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

使用OpenCV VideoWriter创建的视频无法播放,求助排查

问题:生成的视频无法播放
  • Firefox浏览器提示“找不到具有支持格式和MIME类型的视频。”
  • VLC播放器提示“无法找到任何/moov/trak”“未找到流”
原因分析

核心问题是**VideoWriter的frame_size参数顺序错误**:
OpenCV的VideoWriter要求frame_size传入(宽度, 高度),但你通过cam.read()[1].shape[:2]获取的是(高度, 宽度)(OpenCV读取的图像shape格式为(height, width, channels))。参数顺序颠倒会破坏视频文件的结构,导致播放器无法识别有效流信息。

此外,原代码未检查摄像头初始化和帧读取是否成功,若摄像头无法正常工作,会写入无效数据进一步损坏文件。

修正后的代码
import cv2

FPS = 30
KEY_ESC = 27
OUTPUT_FILE = "vid.mp4"

cam = cv2.VideoCapture(0)
# 校验摄像头是否成功打开
if not cam.isOpened():
    print("无法打开摄像头")
    exit()

# 读取初始帧并验证
success, image = cam.read()
if not success:
    print("无法读取摄像头画面")
    cam.release()
    exit()

codec = cv2.VideoWriter.fourcc(*"mp4v")
# 修正尺寸顺序:(宽度, 高度)
frame_size = (image.shape[1], image.shape[0])
video_writer = cv2.VideoWriter(OUTPUT_FILE, codec, FPS, frame_size)

# 录制直到按下ESC退出
while True:
    success, image = cam.read()
    if not success:
        print("读取画面失败,停止录制")
        break
    cv2.imshow("window", image)

    video_writer.write(image)

    if cv2.waitKey(5) == KEY_ESC:
        break

# 释放所有资源
cam.release()
video_writer.release()
cv2.destroyAllWindows()
关键修改点
  1. 调整frame_size的参数顺序,从(height, width)改为(width, height)
  2. 添加摄像头初始化和帧读取的错误检查,避免无效数据写入
  3. 增加cv2.destroyAllWindows(),确保录制结束后关闭显示窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:25:18