2017-01-31 34 views
0

我正在尝试使用OpenCV(C++)读取视频文件,将滤镜应用于每个帧并将新的修改后的帧写入输出文件。 代码的关键部分是这些: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和其他。此外,一些输出格式必须与特定的编解码器一起使用。

+0

你能检查输入视频的编码格式和比特率是什么吗? – Steeve

+0

比特率看起来是23.67,输入的四位数是AVC1 – diningphil

+0

你可以尝试调用'writer.set(VIDEOWRITER_PROP_QUALITY,0.1);'在写入之前?根据[this],默认设置似乎为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