Я пытаюсь прочитать видеофайл с помощью OpenCV (C ++), применить фильтр к каждому кадру и записать новый измененный кадр в выходной файл.
Важнейшие части кода:
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 и другие. Более того, некоторые выходные форматы должны сочетаться с конкретными кодеками.
Попробуйте использовать кодек «M», «P», «4», «V» с контейнером .mp4, то есть установите расширение для вашего имени файла как нечто .mp4
Для контейнера mp4 вы также можете попробовать MPEG, MJPG, FMP4
Других решений пока нет …