在Google Colab中使用cv2.VideoWriter保存视频到Google Drive失败求助
解决OpenCV在Google Colab中写入视频无报错但文件不生成的问题
以下是导致问题的核心原因及修正方案:
问题根源
- 输出文件缺少对应编码的后缀:
XVID编码对应的视频格式是AVI,你给的输出文件名是./video2,没有加.avi后缀,会导致写入流程静默失败。 - 硬编码的分辨率与原视频帧不匹配:你固定了输出分辨率为(600,500),但原视频的帧尺寸大概率不是这个值,OpenCV在帧尺寸与VideoWriter设置不符时,不会抛出错误但会停止写入。
- 未验证原视频是否成功打开:没有检查
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
相关产品推荐
相关产品推荐

