2014-12-03 2 views
2

Я пытаюсь использовать opencv videoWriter для получения видеофайла. Но я получаю следующую задачу:OpenCV VideoWriter не работает

>[libx264 @ 0x132b680] broken ffmpeg default settings detected 
>[libx264 @ 0x132b680] use an encoding preset (e.g. -vpre medium) 
>[libx264 @ 0x132b680] preset usage: -vpre <speed> -vpre <profile> 
>[libx264 @ 0x132b680] speed presets are listed in x264 --help 
>[libx264 @ 0x132b680] profile is optional; x264 defaults to high 
>Could not open codec 'libx264': Unspecified error!!! Output video could not be opened 

У меня есть libx264 в моей системе, поэтому я предполагаю, что это последняя строка просто побочный эффект

Код я пытаюсь запустить пример, взятый из How to write video file in OpenCV 2.4.3 ,

int main (int argc, char *argv[]){ 
// Load input video 
VideoCapture input_cap("testi.mp4"); 
if (!input_cap.isOpened()) 
{ 
     std::cout << "!!! Input video could not be opened" << std::endl; 
     return -1; 
} 

// Setup output video 
cv::VideoWriter output_cap("testo.mp4", 
       input_cap.get(CV_CAP_PROP_FOURCC), 
       input_cap.get(CV_CAP_PROP_FPS), 
       cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH), 
       input_cap.get(CV_CAP_PROP_FRAME_HEIGHT))); 

if (!output_cap.isOpened()) 
{ 
     std::cout << "!!! Output video could not be opened" << std::endl; 
     return -1; 
} 


// Loop to read from input and write to output 
cv::Mat frame; 

while (true) 
{  
    if (!input_cap.read(frame))    
     break; 

    output_cap.write(frame); 
} 

input_cap.release(); 
output_cap.release(); 

return 0; 
} 

Я нашел пост с подобной проблемой How to get stream info from opened file in ffmpeg?, но никто еще не ответил правильно.
Я нашел, что людям говорят, что если opencv использует старый fmmpeg вместо libav, это не так, потому что это новая сборка, а у моего ubuntu нет ffmpeg.

ответ

0

Ответ Димазавра не совсем прав. Во-первых, вам необходимо изменить расширение выходного видеофайла с .mp4 на .avi. Затем, если вы запустите код, вы получите следующую информацию об ошибке:

OpenCV Error: Unsupported format or combination of formats (Gstreamer Opencv backend does not support this codec.) in CvVideoWriter_GStreamer::open, file /home/rwduzhao/store/opencv-2.4.13/modules/highgui/src/cap_gstreamer.cpp, line 1372 
terminate called after throwing an instance of 'cv::Exception' 
    what(): /home/rwduzhao/store/opencv-2.4.13/modules/highgui/src/cap_gstreamer.cpp:1372: error: (-210) Gstreamer Opencv backend does not support this codec. in function CvVideoWriter_GStreamer::open 

Aborted (core dumped) 

Это означает, что либо cv::VideoWriter в opencv2.4 не поддерживает формат libx264 или avi расширения не является несовместимым с форматом libx264. Я не предлагаю использовать кодек libx264. Вы можете попробовать следующий список форматов кодеков, поддерживаемый CV_FOURCC:

CV_FOURCC('P','I','M','1') = MPEG-1 codec 
CV_FOURCC('M','J','P','G') = motion-jpeg codec 
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec 
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec 
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec 
CV_FOURCC('U', '2', '6', '3') = H263 codec 
CV_FOURCC('I', '2', '6', '3') = H263I codec 
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec 

Из моего опыта, качество CV_FOURCC('D', 'I', 'V', 'X') прекрасно. Кроме того, если вы установили cv_fourcc как -1, вы можете выбрать один из форматов кодеков, поддерживаемых в вашей системе, в окне графического интерфейса. Вы можете наблюдать за ходом процесса here.

2

VideoWriter не поддерживает расширение .mp4. Используйте .avi вместо

Смежные вопросы