【问题标题】:OpenCV (C++): write produces big file compared to inputOpenCV(C++):与输入相比,写入产生大文件
【发布时间】: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


【解决方案1】:

尝试将“M”、“P”、“4”、“V”编解码器与 .mp4 容器一起使用,即将文件名的扩展名设置为 something.mp4

对于 mp4 容器,你也可以试试,MPEG、MJPG、FMP4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2019-12-07
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多