Я пытаюсь прочитать видеофайл с использованием 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 и другие. Более того, некоторые форматы вывода должны идти вместе с определенными кодеками.
Можете ли вы проверить, что такое формат кодирования и битрейт входного видео? – Steeve
Битрейт, по-видимому, равен 23,67, а четверть входного сигнала AVC1 – diningphil
Можете ли вы попробовать вызвать 'writer.set (VIDEOWRITER_PROP_QUALITY, 0.1);' перед записью? Значение по умолчанию похоже на 100% качество в соответствии с [это] (http://docs.opencv.org/trunk/d4/d15/group__videoio__flags__base.html#gga41c5cfa7859ae542b71b1d33bbd4d2b4a1cc2ab47f60a115ff9624ff71715b93b). – Steeve