OpenCV保存H264视频的问题
使用Opencv4.6.0使用H264编码保存视频为MP4格式时系统输出
OpenCV: FFMPEG: tag 0x34363268/'h264' is not supported with codec id 27 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x31637661/'avc1'
Failed to load OpenH264 library: openh264-1.8.0-win64.dll
Please check environment and/or download library: https://github.com/cisco/openh264/releases
[libopenh264 @ 0000022427c87ac0] Incorrect library version loaded
[ERROR:0@2.699] global /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2985) open Could not open codec libopenh264, error: Unspecified error (-22)
[ERROR:0@2.699] global /build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (3002) open VIDEOIO/FFMPEG: Failed to initialize VideoWriter
无法使用H264进行编码,而是使用avc1方式进行编码。
从错误信息中可以看到,H264字节码并不被支持,自动帮你替换成了avc1,opencv默认使用ffmpeg框架来处理视频,但是ffmpeg并没有h264解码器。报错之外,还提供了一个解决方案,那就是去使用cisco开源的openh264。 接下来去站点 https://github.com/cisco/openh264/releases 下载1.8.0版本的dll文件,并和源码文件放在同一级目录,然后将fourcc也改为avc1,执行代码。
原因
这主要是许可证的问题,libx264是基于GPL的,而ffmpeg要使用libx264的话,必须–enable-gpl,而opencv则用的是MIT许可。具体的,可以看看这个链接 https://github.com/opencv/opencv-python/issues/299