Python OpenCV中MP4视频的编解码器是什么?

38
fourcc = cv2.cv.CV_FOURCC(*'XVID')

以上行用于avi视频。同样地,Ubuntu中我们要使用哪种编解码器来处理mp4视频?


1
你认为这些答案中有哪个是正确的吗?你能标记一下吗? - Gonzalo Garcia
5个回答

44

你还可以使用mp4v

fourcc = cv2.VideoWriter_fourcc(*'mp4v')

视频编写器应该像这样:

out = cv2.VideoWriter('output.mp4',fourcc, 15, size)

但是对于mp4格式来说,还有更多的编解码器可用。您可以通过设置 fourcc = -1 来查看它们的列表,它将显示如下内容:

OpenCV: FFMPEG: format mp4 / MP4 (MPEG-4 Part 14)
fourcc tag 0x7634706d/'mp4v' codec_id 000C
fourcc tag 0x31637661/'avc1' codec_id 001B
fourcc tag 0x33637661/'avc3' codec_id 001B
fourcc tag 0x31766568/'hev1' codec_id 00AD
fourcc tag 0x31637668/'hvc1' codec_id 00AD
fourcc tag 0x7634706d/'mp4v' codec_id 0002
fourcc tag 0x7634706d/'mp4v' codec_id 0001
fourcc tag 0x7634706d/'mp4v' codec_id 0007
fourcc tag 0x7634706d/'mp4v' codec_id 003D
....

所有这些支持mp4,但如果您想将视频提供到Web上,则Web浏览器支持h264


您如何生成该列表?您在哪里设置fourcc = -1? - Vic
2
字面上向 VideoWriter 构造函数传递 fourcc = -1,然后这个输出就会出现。 - Christoph Rackwitz

21

编解码器是H.264。

以下任何一种都应该适合您:

fourcc = cv2.VideoWriter_fourcc(*'h264')
#or 
#fourcc = cv2.VideoWriter_fourcc(*'x264')
#or
#fourcc = cv2.VideoWriter_fourcc(*'mp4v')

不过,我应该警告你,你可能需要安装ffmpegx264库,因此如果你使用Ubuntu,请尝试在终端中执行以下命令:

sudo apt-get install ffmpeg x264 libx264-dev

此外,请查看OpenCV教程中的链接,以了解平台支持的各种FourCC代码的详细信息。

在上面的链接中,它说X264是您应该使用的FourCC代码,但在您使其正常工作之前,请尝试切换它们。


1
在所有的解决方案中,将 codec 单独安装到 open cv 4 中是行得通的,使用 sudo apt-get install ffmpeg x264 libx264-dev 命令即可使其在我的 Raspberry Pi 3 上运行。谢谢! - Jonas TM
4
FFmpeg不支持在MP4格式容器中使用"h264"标签,会显示错误信息:FFMPEG:tag 0x34363268/'h264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)'。但是它接受"avc1"标签(如其他答案所述)。这两个标签都代表同一种视频压缩编码H.264/AVC,但是MP4格式只接受特定的标签,这是一个标准。 - Christoph Rackwitz
H.264在浏览器中能够正常工作吗? - Mehdi Charife
1
@MehdiCharife 是的 - rayryeng

6
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')

总是看起来能工作。


1

这是一个旧问题。但是,如果有人最近使用编解码器遇到了无法获取保存的视频的问题,他们可以在OpenCV 3及更高版本中使用0X00000021作为编解码器值。


1

我不得不重新安装ffmpeg并从源代码编译opencv才能使其正常工作。我在这篇博客文章中记录了步骤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接