You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04下如何用FFmpeg/OpenCV2使用H264编码器生成兼容视频

解决Ubuntu 22.04下OpenCV生成H264视频无法在Firefox播放的问题

核心问题分析

你遇到的错误根源是:MP4容器不支持h264这个FourCC标签,H264编码在MP4格式中对应的标准FourCC是avc1而非h264。另外,pip安装的OpenCV属于简化包,对FFmpeg编码器的绑定存在部分限制,需要调整参数适配。

直接解决方案

1. 替换正确的FourCC编码

将代码中的cv2.VideoWriter_fourcc(*"h264")替换为以下任一合法标签:

  • cv2.VideoWriter_fourcc(*'avc1'):MP4容器标准的H264标签
  • cv2.VideoWriter_fourcc(*'H264'):部分FFmpeg版本兼容的大写标签

同时必须指定yuv420p像素格式(这是浏览器唯一支持的H264像素格式),示例代码如下:

import cv2
import os

frame_dir = "你的图片序列路径"
frames = sorted([os.path.join(frame_dir, f) for f in os.listdir(frame_dir) if f.endswith(('.jpg', '.png'))])
if not frames:
    exit()

# 获取第一帧尺寸信息
height, width = cv2.imread(frames[0]).shape[:2]
fps = 24  # 根据需求调整帧率

# 初始化VideoWriter,使用avc1编码
fourcc = cv2.VideoWriter_fourcc(*'avc1')
out = cv2.VideoWriter('output.mp4', fourcc, fps, (width, height), isColor=True)
# 强制设置像素格式为yuv420p(部分OpenCV版本需手动指定)
out.set(cv2.CAP_PROP_FORMAT, cv2.COLOR_BGR2YUV_I420)

for frame_path in frames:
    frame = cv2.imread(frame_path)
    out.write(frame)

out.release()

2. 修复OpenCV的FFmpeg编码支持

如果上述方法仍报错,说明pip安装的OpenCV未启用H264编码支持,需要重新编译OpenCV并绑定完整FFmpeg:

# 安装编译依赖
sudo apt install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

# 克隆OpenCV及扩展模块源码
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv && mkdir build && cd build

# 配置编译参数,启用FFmpeg和H264支持
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_FFMPEG=ON \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_EXAMPLES=OFF ..

# 编译并安装
make -j$(nproc)
sudo make install

3. 备选方案:直接用FFmpeg命令行转换(最可靠)

既然你已安装FFmpeg,直接用命令行生成浏览器兼容的视频更简单,无需依赖OpenCV:

# 假设图片序列命名为frame_0001.jpg、frame_0002.jpg...
ffmpeg -framerate 24 -i frame_%04d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4

参数说明:

  • -framerate:设置视频帧率
  • -i frame_%04d.jpg:匹配4位数字命名的图片序列(可根据实际命名规则调整)
  • -c:v libx264:指定使用H264编码器
  • -pix_fmt yuv420p:强制输出浏览器支持的像素格式

内容的提问来源于stack exchange,提问作者Vince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:53:22