关于OpenCV无法进行h264视频转码的问题
问题复现
opencv无法将
mp4v
编码格式的视频转换为h264
编码格式的视频,使用ffmpeg
解决问题
使用下面方式即保存为mp4v
格式没有问题
fourcc = cv2.VideoWriter.fourcc(*"mp4v")
使用下面方式即保存为h264
格式会报错Failed to load OpenH264 library: openh264-1.8.0-win64.dll Please check environment and/or download library: https://github.com/cisco/openh264/releases
fourcc = cv2.VideoWriter.fourcc('H', '2', '6', '4')
解决方案
windows配置ffmpeg
到https://www.gyan.dev/ffmpeg/builds/
下载
import subprocessdef convert_video(input_file, output_file):ffmpeg = r'D:\chromeDownload\ffmpeg-7.1.1-essentials_build\ffmpeg-7.1.1-essentials_build\bin\ffmpeg.exe' # ffmpeg的路径cmd = [ffmpeg,'-hide_banner', # 启动时隐藏版权和版本信息'-loglevel', 'warning', # 只显示警告和错误信息'-i', input_file, # 输入文件路径'-vcodec', 'libx264', # 指定视频编码'-preset', 'fast', # 编码速度+压缩效率,速度快效率就低导致文件大,默认'medium''-crf', '23', # 视频质量,越小质量越高,文件越大,默认23'-acodec', 'aac', # 音频编码output_file # 输出文件路径]subprocess.run(cmd)
docker配置ffmpeg
(下面只是安装ffmpeg
的指令)
# 安装编译工具和依赖
RUN apt-get update && \apt-get install -y --no-install-recommends \wget \tar \build-essential \nasm \yasm \libx264-dev \libmp3lame-dev \libvorbis-dev \libopus-dev && \apt-get clean && \rm -rf /var/lib/apt/lists/*# 下载并编译FFmpeg
RUN cd /tmp && \wget https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.gz && \tar -xzf ffmpeg-7.1.1.tar.gz && \cd ffmpeg-7.1.1 && \./configure \--prefix=/usr/local \--enable-gpl \--enable-libx264 \--enable-libmp3lame \--enable-libvorbis \--enable-libopus \--enable-nonfree && \make -j$(nproc) && \make install && \cd / && \rm -rf /tmp/ffmpeg*
import subprocessdef convert_video(input_file, output_file):ffmpeg = 'ffmpeg' # ffmpeg指令,不需要路径cmd = [ffmpeg,'-hide_banner', # 启动时隐藏版权和版本信息'-loglevel', 'warning', # 只显示警告和错误信息'-i', input_file, # 输入文件路径'-vcodec', 'libx264', # 指定视频编码'-preset', 'fast', # 编码速度+压缩效率,速度快效率就低导致文件大,默认'medium''-crf', '23', # 视频质量,越小质量越高,文件越大,默认23'-acodec', 'aac', # 音频编码output_file # 输出文件路径]subprocess.run(cmd)