使用Python的OpenCV保存视频报错,生成的视频为0KB
解决OpenCV保存视频出现“Video type not supported”及0KB文件问题
以下是针对问题的具体修复点和修正后的代码:
- 文件后缀与编码不匹配:代码中使用
MJPG编码,但输出文件后缀设为.mp3(音频格式),导致系统无法识别视频类型。MJPG编码对应的标准视频后缀为.avi,需保证后缀与fourcc编码对应。 - 未正确释放VideoWriter资源:
out.release是属性引用而非方法调用,缺少括号会导致写入缓存未刷新,最终生成0KB空文件,需改为out.release()。 - 未检查帧读取状态:循环中直接写入帧,但未判断
cam.read()返回的ret值(帧读取成功标记),若读取失败写入无效帧会导致文件损坏,必须先确认ret为True再执行写入。 - 分辨率不匹配:指定的
(640,640)可能与摄像头实际输出分辨率不符,OpenCV要求写入帧的尺寸必须与VideoWriter初始化时的尺寸完全一致,否则无法写入。可通过摄像头属性获取实际分辨率。
修正后的代码
import cv2 cam = cv2.VideoCapture(0) # 获取摄像头实际分辨率 frame_width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT)) # MJPG编码对应avi后缀 fourcc = cv2.VideoWriter_fourcc(*'MJPG') out = cv2.VideoWriter('captured.avi', fourcc, 20.0, (frame_width, frame_height)) while cam.isOpened(): ret, frame = cam.read() if ret: # 确保帧读取成功再写入 out.write(frame) cv2.imshow('frame', frame) if cv2.waitKey(1) == ord('e'): break else: break # 读取失败退出循环 # 正确释放所有资源 cam.release() out.release() cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Pratham Singh
相关产品推荐
相关产品推荐

