关于OpenCV无法进行h264视频转码的问题
目录
关于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 subprocess
def 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 subprocess
def 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)