目录

关于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/下载

https://i-blog.csdnimg.cn/direct/2c9aa5ed860c4b439a97d621769ffe27.png

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)