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

OpenCV4.6.0中VideoWriter_fourcc如何设置x264编码参数

OpenCV 4.6.0 配置VideoWriter x264自定义参数方案

原有代码问题修正

原有测试代码存在3处会导致运行/输出异常的问题,需要先修复:

  • capture.isOpened是对象方法,判断读取状态时必须加括号调用,即capture.isOpened()
  • 视频写入完成后必须调用writer.release()写入文件尾,否则输出的mkv文件会损坏无法播放
  • fourcc标记建议使用大写X264,避免部分版本FFmpeg无法匹配到libx264编码器,不要使用h264标记,其对应内置编码器不支持crf参数配置

自定义编码参数配置方法

OpenCV 4.6.0的FFmpeg后端支持通过环境变量透传编码器私有参数,兼容性最好,不需要额外编译修改源码。你需要的pix_fmt yuv420p -preset ultrafast -crf 30参数可以直接通过该方式传入,参数会直接透传给libx264编码器生效。

修正后可直接运行的代码

import os
import cv2 as cv

# 初始化VideoWriter前配置FFmpeg透传参数,格式为 键=值; 分号分隔多个参数
os.environ["OPENCV_FFMPEG_WRITER_OPTIONS"] = "pix_fmt=yuv420p;preset=ultrafast;crf=30"

capture = cv.VideoCapture('input.mp4', cv.CAP_FFMPEG)
width = int(capture.get(cv.CAP_PROP_FRAME_WIDTH))
height = int(capture.get(cv.CAP_PROP_FRAME_HEIGHT))
fps = capture.get(cv.CAP_PROP_FPS)

fourcc = cv.VideoWriter_fourcc(*'X264')
writer = cv.VideoWriter('output.mkv', cv.CAP_FFMPEG, fourcc, fps, (width, height))

while capture.isOpened():
    ret, frame = capture.read()
    if not ret:
        break
    writer.write(frame)
    if cv.waitKey(1) == ord('q'):
        break

# 按顺序释放资源
writer.release()
capture.release()
cv.destroyAllWindows()

注意事项

  • 如果运行时抛出找不到编码器的错误,说明当前安装的OpenCV绑定的FFmpeg没有编译libx264支持,需要更换为带全量编解码器的OpenCV安装包,或自行编译开启libx264依赖
  • 该参数透传方式同样适用于其他FFmpeg支持的编码器,只要把参数按键=值;的格式拼接进环境变量即可
  • 如果需要输出mp4格式封装,直接把输出文件名改为output.mp4即可,编码参数配置逻辑不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:57:16