Невозможно воспроизвести видео, созданное OpenCV (с использованием Ubuntu 12.04)

0

Я попытался записать видео из последовательности образов, созданных OpenCV. Однако я не могу открыть видео после их написания. Я думаю, есть проблема с кодеком. Мне очень сложно найти ошибку. Вот мой код:

    Size size = Size(vecOfMats[0].rows,vecOfMats[0].cols);
    int codec = CV_FOURCC('D', 'I', 'V', 'X');

    VideoWriter videoWriter;
    videoWriter.open(outputFilename,codec,15.0,size,true);

    for(int z=0; z < vecOfMats.size(); z++)
    {
        videoWriter.write(vecOfMats[z]);
    }
    videoWriter.release();

Я также пробовал все эти кодеки без успеха (либо OpenCv не смог найти кодек, либо невозможно открыть видео):

int codec = CV_FOURCC('P','I','M','1');   // = MPEG-1 codec
int codec = CV_FOURCC('M','J','P','G');   // = motion-jpeg codec - cannot be played by VLC
int codec = CV_FOURCC('M', 'P', '4', '2');// = MPEG-4.2 codec - not found
int codec = CV_FOURCC('D', 'I', 'V', '3');// = MPEG-4.3 codec - not found
int codec = CV_FOURCC('D', 'I', 'V', 'X');// = MPEG-4 codec - cannot be played by VLC
int codec = CV_FOURCC('U', '2', '6', '3');// = H263 codec - must have w/h = 4
int codec = CV_FOURCC('I', '2', '6', '3');// = H263I codec - not found

Я даже взял кодек видео, открытый через OpenCV ранее (без успеха):

string filename = "/path/to/the/video/myVideo.avi";
VideoCapture capture(filename);
int ex = static_cast<int>(capture.get(CV_CAP_PROP_FOURCC));             // Get Codec Type- Int form
char EXT[] = {(char)(ex & 0XFF) , (char)((ex & 0XFF00) >> 8),(char)((ex & 0XFF0000) >> 16),(char)((ex & 0XFF000000) >> 24), 0};// Transform from int to char via Bitwise operators
cout<<"Codec: "<<ex<<endl;
VideoWriter videoWriter;
videoWriter.open(outputFilename,ex,15.0,size,true);

Я даже не уверен, что проблема связана с моим OpenCV или моим Ubuntu:/. (Я попытался открыть их, используя проигрыватель по умолчанию и vlc)

  • 0
    Вы не говорите в своем вопросе, у вас определенно установлен кодек ?
  • 0
    Я скомпилировал ffmpeg из исходного кода перед компиляцией OpenCV (ffmpeg -version говорит, что у меня установлен ffmpeg 2.3.3). Я скомпилировал OpenCV из исходного кода (версия 2.4.5), а ccmake говорит, что он определенно нашел ffmpeg. Я не уверен, какие кодеки используются vlc и видеоплеером, но, поскольку я могу кодировать видео, я подумал, что смогу декодировать их в том же формате (как во втором примере кодирования)
Теги:
opencv
ffmpeg
video

1 ответ

0

Поскольку я отказался от написания видео с помощью Opencv, я просто хочу упомянуть, как я решил свою проблему. После сохранения каждого изображения в виде файла png я использую ffmpeg из командной строки linux для записи последовательности изображений в виде видео.

Изображения называются последовательно следующим образом: 00001.png, 00002.png, 00003.png, [...]

Затем я использую эту команду

ffmpeg -i% 5d.png -vcodec mpeg4 test.avi

Ещё вопросы

Сообщество Overcoder
Наверх
Меню