cv2.videowriter写入0字节文件(Python)(OpenCV)

5
我目前正在进行一个运动检测项目,当检测到运动时会记录视频。目前录制视频时没有出现错误,但是当我检查视频时,它的大小为0字节。非常感谢任何帮助。
这是我的代码:
camera = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480))

你用的是什么操作系统?你尝试过不同的fourCC吗?opencv_version -v 显示了哪些视频I/O? - Mark Setchell
Windows 7专业版。我已经尝试了XVID和MJPG。在哪里运行“opencv_version -v”命令? - Aplin
我在Mac/Linux上使用OpenCV,如果在终端中运行该命令,则可能不适用于Windows,我不知道。 - Mark Setchell
@MarkSetchell 我发现我的opencv版本是3.2.0。 - Aplin
@Aplin 你的操作系统上安装了XVID编解码器吗? - Lakshya Kejriwal
2个回答

8
当输入帧大小与输出视频不匹配时,问题就出现了。
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480))

在这里,您承诺输出视频为640x480,这取决于输入源(如果您不重新调整大小)。

您可以硬编码它(检查输入视频或流源的帧大小),也可以使用以下代码:

w = cap.get(cv2.CAP_PROP_FRAME_WIDTH);
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT); 
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('output.mp4',fourcc, 15.0, (int(w),int(h)))

我的建议是在while循环之外捕获一帧并在那里声明VideoWriter,指定宽度和高度。 此外,如果那样不起作用,请尝试将编解码器从XVID更改为DIVX或MJPG。


根据您的回复解决了这个问题,只需将文件扩展名更改为 .mp4(而不是 .avi)- 谢谢! - Amir F

0
摄像机的颜色传感器与您在函数中指定的内容不匹配也可能导致此问题。这可能还涉及到写入调用中的任何错误参数。
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height), isColor=False)

isColor默认为True;在尝试从灰度Basler相机捕获时遇到了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接