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

在Google Colab中使用cv2.VideoWriter保存视频到Google Drive失败求助

解决OpenCV在Google Colab中写入视频无报错但文件不生成的问题

以下是导致问题的核心原因及修正方案:

问题根源

  1. 输出文件缺少对应编码的后缀:XVID编码对应的视频格式是AVI,你给的输出文件名是./video2,没有加.avi后缀,会导致写入流程静默失败。
  2. 硬编码的分辨率与原视频帧不匹配:你固定了输出分辨率为(600,500),但原视频的帧尺寸大概率不是这个值,OpenCV在帧尺寸与VideoWriter设置不符时,不会抛出错误但会停止写入。
  3. 未验证原视频是否成功打开:没有检查VideoCapture是否成功加载video1.mkv,如果原视频路径或文件本身有问题,后续写入逻辑也会无效。

修正后的完整代码

import cv2 as cv
import os
from google.colab import drive

# 挂载Google Drive并切换到目标目录
drive.mount('/content/drive')
os.chdir('/content/drive/My Drive/my folder')

# 打开原视频并检查是否成功
caped = cv.VideoCapture('video1.mkv')
if not caped.isOpened():
    print("无法读取原视频文件,请检查路径或文件完整性")
    exit()

# 获取原视频的真实参数(避免硬编码)
fps = caped.get(cv.CAP_PROP_FPS)
frame_width = int(caped.get(cv.CAP_PROP_FRAME_WIDTH))
frame_height = int(caped.get(cv.CAP_PROP_FRAME_HEIGHT))

# 初始化VideoWriter:指定正确的文件后缀、编码、帧率和分辨率
fourcc = cv.VideoWriter_fourcc(*'XVID')
# 必须添加.avi后缀对应XVID编码
video_writer = cv.VideoWriter('./video2.avi', fourcc, fps, (frame_width, frame_height))

# 逐帧读取并写入视频
while caped.isOpened():
    ret, frame = caped.read()
    if ret:
        # 如果需要强制调整分辨率,可在此添加resize操作
        # frame = cv.resize(frame, (600, 500))
        video_writer.write(frame)
    else:
        break

# 释放所有资源
caped.release()
video_writer.release()
# 强制刷新缓存,确保文件写入Google Drive
os.sync()

print("视频写入完成,可在当前目录查看video2.avi")

额外注意事项

  • 不同编码对应不同文件后缀:比如MP4V编码对应.mp4,MJPG对应.avi,必须匹配才能正常生成可识别的视频文件。
  • 如果需要自定义输出分辨率,必须在写入前用cv.resize()将每帧调整为目标尺寸,保证与VideoWriter的设置一致。
  • Colab的Drive同步可能有延迟,执行os.sync()可以强制将内存中的写入数据同步到磁盘,避免文件不显示。

内容的提问来源于stack exchange,提问作者Mr. Hosseini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:05:09