2017-01-31 22 views
0

Я пытаюсь прочитать видеофайл с использованием OpenCV (C++), применить фильтр к каждому кадру и записать новый модифицированный кадр в выходной файл. Решающие части кода являются следующие:OpenCV (C++): write создает большой файл по сравнению с вводом

int out_format = CV_FOURCC('M','P','4','2'); // can be another one 
double fps = media.get(CV_CAP_PROP_FPS), 
     width = media.get(CV_CAP_PROP_FRAME_WIDTH), 
     height = media.get(CV_CAP_PROP_FRAME_HEIGHT); 

// On Linux FFMPEG is used to write videos 
VideoWriter writer("./" + outputname + ".mkv", out_format, fps, Size(width, height)); 
....... 
....... 
writer.write(newFrame); // Mat newFrame 

То есть, я не опытен с кодеками и вывода видео форматов, таким образом, я хотел бы знать, почему это файл, который составляет около 280 МБ производит выход 2 ГБ.

Это проблема кодека? Я пробовал DIVX, MPEG и другие. Более того, некоторые форматы вывода должны идти вместе с определенными кодеками.

+0

Можете ли вы проверить, что такое формат кодирования и битрейт входного видео? – Steeve

+0

Битрейт, по-видимому, равен 23,67, а четверть входного сигнала AVC1 – diningphil

+0

Можете ли вы попробовать вызвать 'writer.set (VIDEOWRITER_PROP_QUALITY, 0.1);' перед записью? Значение по умолчанию похоже на 100% качество в соответствии с [это] (http://docs.opencv.org/trunk/d4/d15/group__videoio__flags__base.html#gga41c5cfa7859ae542b71b1d33bbd4d2b4a1cc2ab47f60a115ff9624ff71715b93b). – Steeve

ответ

0

Попробуйте использовать 'M', 'P', '4', кодек 'V' с контейнером .mp4, то есть установить расширение для вашего файла как something.mp4

Для контейнера mp4 , вы также можете попробовать, MPEG, MJPG, FMP4