我正在用Python和OpenCV制作一个视频编辑器,并测试不同的编解码器和文件格式组合。在这个例子中,我专注于 avi
和 mp4
格式。我试过多种不同的四字符编解码器(http:/www.fourcc.orgcodecs.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不起作用所以选了个默认的,还是其他原因?
最可能的是,你尝试使用编解码器(视频内容如何被压缩)和容器(用于传输压缩视频的实际文件格式(通常是音频、字幕...)的组合,这些组合是不兼容的。