我目前正在做一个运动检测项目,当检测到运动时记录下来的视频.现在有没有记录视频时,但当我检查视频错误,它是0字节.任何帮助将非常感谢.这是我的代码:
camera = cv2.VideoCapture(0) fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480))
q35jwt9p1#
当您的输入帧大小与输出视频不匹配时,问题就会出现。
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640, 480))
在这里,您承诺输出视频为640,480,并且取决于您的输入源(如果您不调整大小)您可以对其进行硬编码(检查输入视频或流源的帧大小)或使用以下代码:
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循环外抓取一个帧,并在那里声明一个带有帧宽度和高度的视频编码器。另外,如果不起作用,请尝试将编解码器从XVID更改为DIVX或MJPG。
qltillow2#
相机的颜色传感器与您在函数中指定的颜色传感器之间的不匹配也会导致此问题。它可能会扩展到writer调用中的任何错误参数。
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height), isColor=False)
isColor默认为True;尝试从灰度Basler相机捕获时遇到此问题
2条答案
按热度按时间q35jwt9p1#
当您的输入帧大小与输出视频不匹配时,问题就会出现。
在这里,您承诺输出视频为640,480,并且取决于您的输入源(如果您不调整大小)
您可以对其进行硬编码(检查输入视频或流源的帧大小)或使用以下代码:
我的建议是在while循环外抓取一个帧,并在那里声明一个带有帧宽度和高度的视频编码器。另外,如果不起作用,请尝试将编解码器从XVID更改为DIVX或MJPG。
qltillow2#
相机的颜色传感器与您在函数中指定的颜色传感器之间的不匹配也会导致此问题。它可能会扩展到writer调用中的任何错误参数。
isColor默认为True;尝试从灰度Basler相机捕获时遇到此问题