OpenCV保存H264视频的问题-CSDN博客
Excerpt
文章浏览阅读1.5w次,点赞16次,收藏36次。环境windows 10 64bitopencv 4.5.3前言看到有小伙伴在聊,如何将目标检测的结果保存成视频的相关问题?本篇我们就来看看。opencv保存视频在绝大多数的目标检测项目中…_cv.videowriter h264 mp4
环境
windows 10 64bit
opencv 4.5.3
前言
看到有小伙伴在聊,如何将目标检测的结果保存成视频的相关问题?本篇我们就来看看。
opencv保存视频
在绝大多数的目标检测项目中,都是使用opencv
这个开源的计算机视觉库来进行图片、视频或者摄像头的读写。
关于视频保存,来看下面的代码示例
1 | import cv2 |
主要是VideoWriter
对象,这里需要几个重要参数,输出文件名、宽width
、高height
、帧率fps
和fourcc
。除了fourcc
,其它几项都很好理解。
FourCC
是一个4字节码,用来表示视频编码器,网站 fourcc.org 列出了所有可用的编码器。在VideoWriter
中既可以写成*'MJPG'
,也可以写成'M', 'J', 'P', 'G'
。但是并不是说,所有的编码器都可以使用。
使用H264编码器
在上面代码的基础上我们修改一下,使用h264
编码器
1 | import cv2 |
执行代码后,报错了
1 | OpenCV: FFMPEG: tag 0x34363248/'H264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)' |
从错误信息中可以看到,H264
字节码并不被支持,自动帮你替换成了avc1
,opencv
默认使用ffmpeg
框架来处理视频,但是ffmpeg
并没有h264
解码器。报错之外,还提供了一个解决方案,那就是去使用cisco
开源的openh264
。
接下来去站点 https://github.com/cisco/openh264/releases 下载1.8.0
版本的dll
文件,并和源码文件放在同一级目录,然后将fourcc
也改为avc1
,执行代码
opencv videowriter h264
看到,报错信息不见了,针对生成的mp4
文件,使用ffmpeg
命令查看其信息
1 | Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1440x1080, 538 kb/s, 29.92 fps, 29.92 tbr, 29917 tbn, 59834 tbc (default) |
可以看到,视频编码确实是h264
。
为什么不内置h264
这主要是许可证的问题,libx264
是基于GPL
的,而ffmpeg
要使用libx264
的话,必须--enable-gpl
,而opencv
则用的是MIT
许可。具体的,可以看看这个链接 https://github.com/opencv/opencv-python/issues/299