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

OpenCV VideoWriter输出0KB视频:多分辨率处理场景异常排查

问题分析与修复方案

核心原因

你推测的图像宽高尺寸不匹配完全正确——4K视频降采样0.5倍后,box_img的实际尺寸和你初始化VideoWriter时指定的参数不一致,导致写入失败生成0KB无效文件;而拼接后的res尺寸刚好和Writer的初始化参数匹配,所以能正常输出。1080p视频没有降采样操作,box_img尺寸和Writer参数一致,因此无异常。

具体排查与修复步骤

  • 同步VideoWriter的尺寸参数与降采样后图像
    4K视频降采样后宽高会减半(比如原3840×2160→1920×1080),你必须确保VideoWriter初始化时的宽高是降采样后box_img的实际尺寸,而非原视频尺寸。
    错误示例:

    # 用原4K尺寸初始化Writer,和降采样后的box_img尺寸不匹配
    out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 25, (3840, 2160))
    

    正确做法:

    # 先获取降采样后box_img的实际宽高(注意OpenCV中shape是(高, 宽, 通道))
    h, w = box_img.shape[:2]
    # 初始化Writer时传入(宽, 高)
    out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 25, (w, h))
    
  • 确认降采样操作的准确性
    检查你的降采样代码,确保输出尺寸符合预期。比如使用cv2.resize时,明确缩放比例:

    # 0.5倍降采样,用INTER_AREA算法更适合缩小图像
    downsampled_frame = cv2.resize(frame, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
    

    处理后可以打印downsampled_frame.shape确认宽高是否正确。

  • 写入前验证尺寸匹配性
    在调用out.write(box_img)前,添加检查代码快速定位问题:

    writer_w = out.get(cv2.CAP_PROP_FRAME_WIDTH)
    writer_h = out.get(cv2.CAP_PROP_FRAME_HEIGHT)
    img_w, img_h = box_img.shape[1], box_img.shape[0]
    if (img_w, img_h) != (writer_w, writer_h):
        print(f"尺寸不匹配:图像({img_w},{img_h}) vs Writer({writer_w},{writer_h})")
    
  • 检查通道数一致性
    额外确认box_img的通道数和Writer匹配:如果Writer按彩色(3通道)初始化,但box_img是灰度图(单通道),也会导致写入失败。可以用box_img.shape[2]查看通道数,若为单通道,初始化Writer时要传入isColor=False参数。

总结

OpenCV的VideoWriter对写入图像的尺寸、通道数要求严格,必须完全匹配初始化参数。4K降采样后图像尺寸变化,若未同步更新Writer参数,就会出现写入失败;而拼接后的res刚好符合Writer参数,所以正常输出。1080p视频无尺寸变化,因此没有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:53:09