【发布时间】:2017-06-17 09:48:25
【问题描述】:
我正在尝试使用 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 MB 的文件会产生 2 GB 的输出。
这是编解码器的问题吗?我尝试过 DIVX、MPEG 等。此外,某些输出格式必须与特定的编解码器配合使用。
【问题讨论】:
-
你能检查一下输入视频的编码格式和码率是什么吗?
-
比特率似乎是23.67,输入的fourcc是AVC1
-
你可以在写之前先打电话给
writer.set(VIDEOWRITER_PROP_QUALITY, 0.1);吗?根据this,默认设置似乎是 100% 质量。 -
刚刚试了下,对最终结果没有影响。
-
也许编解码器不支持以这种方式设置编码质量,如果您可以尝试尝试其他编解码器(可能是 x264?)
标签: c++ opencv video codec video-codecs