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

使用OpenCV通过帧序列生成视频时输出文件损坏如何解决

OpenCV生成视频损坏问题排查与修复

核心错误:帧宽高参数顺序颠倒

OpenCV 初始化 VideoWriter 时要求传入的尺寸参数顺序为 (宽度, 高度),但 OpenCV 读取的帧是 numpy 数组格式,其 shape 属性返回的顺序是 (高度, 宽度, 通道数)。你现有代码里直接把 shape[0] 赋值给宽、shape[1] 赋值给高,传入 VideoWriter 的尺寸是完全颠倒的,这是导致视频损坏的最常见原因。

修正后的 make_vid 函数如下:

def make_vid(file_path, frames, fps):
  # 交换宽高取值顺序,shape返回顺序为 高、宽、通道数
  h, w, l = frames[0].shape
  fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
  writer = cv2.VideoWriter(file_path, fourcc, fps, (w, h))

  for frame in frames:
      writer.write(frame)

  writer.release()

其他可排查的异常点

  • 确认帧的通道顺序:OpenCV 读取的帧默认是 BGR 通道顺序,如果你在处理过程中将帧转为了 RGB 格式,写入前需要用 cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) 转回 BGR 再写入。
  • 确认文件后缀与编码匹配:你使用的 mp4v 编码对应输出文件后缀必须为 .mp4,如果保存为 .avi 等其他后缀,可能导致播放器无法正常解码。
  • 确认帧列表有效性:增加判断逻辑避免 frames 列表为空,或列表中存在尺寸不一致的帧,两种情况都会生成损坏的视频。
  • 确认 OpenCV 版本依赖完整:部分精简版 OpenCV 会缺失视频编码组件,可重装完整版 opencv-python 和 opencv-contrib-python 排查。

内容的提问来源于stack exchange,提问作者Who am I

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03