问题复现

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)
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐