【问题标题】:OpenCV: for mp4 files, saving movie works but with wrong codecOpenCV:对于 mp4 文件,保存电影作品但编解码器错误
【发布时间】:2020-05-09 01:13:09
【问题描述】:

我正在使用 OpenCV 在 Python 中制作视频编辑器,并测试编解码器和文件格式的不同组合。对于这个例子,我主要关注avimp4 格式。我尝试了多种不同的四字符编解码器 (http://www.fourcc.org/codecs.php),它们都保存了我可以播放的实际电影。

令人困惑的是,当我重新加载它们并从电影中提取编解码器时,结果发现只有保存为 avi 的电影似乎是使用原始编解码器保存的。下面我有一张图表,显示了用于编码的编解码器(使用cv2.VideoWriter_fourcc() 创建),然后在稍后加载视频后从视频中提取相应的编解码器(使用get(cv2.CAP_PROP_FOURCC) 提取)。我还将大小以 MB 为单位放在括号中。

对于 avi(编码 -> 提取):

MJPG -> MJPG (3.9)
FFV1 -> FFV1 (12.3)
DIVX -> DIVX (0.7)

对于 mp4:

MJPG -> mp4v (3.9)
FFV1 -> avc1 (26.1)
DIVX -> mp4v (0.7)

因此,您可以看到编码与 mp4 文件类型不匹配,即使文件大小大致匹配。 avi 和 mp4 的视频看起来都差不多。

加载的电影中的此元数据是否对 mp4 不可信,编码是否不适用于 mp4,因此它选择了默认值,还是其他?

【问题讨论】:

    标签: python opencv video codec


    【解决方案1】:

    您很可能尝试使用不兼容的编解码器(视频内容的压缩方式)和容器(用于传输压缩视频(通常是音频、字幕等)的实际文件格式)的组合。

    【讨论】:

    • 我一开始也是这么想的,但我的理解是这些是不同的问题,不同的编解码器应该与各种各样的容器保持一致(blog.filestack.com/thoughts-and-knowledge/…)。有趣的是,当我尝试使用AVC1(或avc1)作为四字符编解码器保存时,这两种文件格式都不起作用。
    • 根据您执行opencv的机器,似乎使用不同的压缩后端。你有安装fflmpef吗? docs.opencv.org/3.4/dd/d9e/classcv_1_1VideoWriter.html#details
    • 它在后端使用ffmpeg
    • 然后我要做的是使用 ffmpeg 命令行参数“播放”,看看这些组合是否有效。如果是,那么问题可能出在 ffmpeg 的 opencv 使用上。然后查看 opencv 代码本身或提出 opencv 错误是前进的好方法。
    • 是的,这个演奏正是我所做的——在我的问题中查看我的演奏结果。我们现在是否要递归:) 我的问题更多是为什么事情会以他们的方式工作:我在问题的最后一段中列出了一些可能性,如果有人知道,我很好奇。
    猜你喜欢
    • 2020-03-15
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多