2012-01-23 2 views
5

Я хочу создать видеофайл из потока RGB-изображений, движущихся со скоростью 52 кадров в секунду. Я нашел opencv api очень удобным для использования (cv :: VideoWriter). Проблема в том, что я могу играть с производимыми avi только с VLC; который воспроизводит видео, но орет:cv :: VideoWriter дает нечитаемое видео

[0x28307b0] xcb_xv generic error: no available XVideo adaptor 

Любой другой видеоплеер (на том же компьютере) не умеет читать и воспроизводить видео. При записи все выглядит нормально: я получаю информацию о выходе, о размере кадра, кодеке видео, fps и т. Д. ... без ошибок.

Output #0, avi, to '01-23-12_15-24-51.avi': 
Stream #0.0: Video: flv, yuv420p, 500x242, q=2-31, 7744 kb/s, 90k tbn, 52tbc 

В OpenCV поддерживает только AVI видео, как контейнер, единственное, что я мог бы изменить это видео кодек, я попробовал (FOURCC код) FLV1, DIVX, div3, но ни один из них не работает правильно.

Я хотел бы воспроизвести это видео с любого видеопроигрывателя на разных компьютерах. Как я могу заставить его работать? является ли VideoWriter правильным выбором?

Любое предложение очень приветствуется.

Спасибо.

+0

При скорости 52 кадр/с вы можете выдвигать пределы того, что может делать OpenCV. Сначала я попробую 30 кадров в секунду и посмотрю, как на него реагируют другие видеоплееры. – karlphillip

+0

OpenCV полагается на FFmpeg, чтобы делать все материалы, связанные с низким уровнем видео; Я уверен, что ffmpeg может выйти за пределы 52 кадра в секунду. Во всяком случае, спасибо за предложение, которое я пробовал, но он не работает. – sciarp

+0

попробуйте другой кодек (FOURCC) при создании видеофайла. Выберите простой, MPEG2 или что-то в этом роде – Sam

ответ

1

Если у вас есть видео источник для ваших изображений, было бы хорошая идея, чтобы использовать тот же кодек для вывода:

int videoType = (int)cap.get(CV_CAP_PROP_FORMAT); 

VideoWriter vout; 
vout.open(videofile + "_out.avi", videoType, 30, imgSize); 

Или, вы можете попробовать старый, более простой FOURCC. Или Microsoft, если вы хотите запустить его только в Windows.