在通过“ cv2”保存视频文件期间,出现了一个奇怪的问题。如果从网络摄像头捕获视频,则此代码效果很好,但是如果从文件捕获视频(例如cap = cv2.VideoCapture(“ test.avi”)),则将形成没有任何流的空文件。
import cv2
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, w)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, h)
out = cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc('M','J','P','G'), fps, (w, h))
while cap.isOpened():
ret, frame = cap.read()
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
out.release()
cap.release()
cv2.destroyAllWindows()
我试图更改.avi,.ts和输出等输入视频文件的格式,但没有任何改变
谁知道为什么这个问题发生在我身上?
答案 0 :(得分:0)
您是否尝试打印cam.isOpened()输出?您可用的相机可能已初始化为变量,而不是0。
尝试cap = cv2.VideoCapture(-1)
。除此之外,您还在Linux上运行它吗?确保已安装ffmpeg。
答案 1 :(得分:0)
好吧,一段时间后我发现了问题所在。这部分使我无法完成视频的定稿:
if cv2.waitKey(1) & 0xFF == ord('q'):
break
我删除“ break”之后,一切都变得正常了。也许是因为,与从摄像机接收到的流不同,来自视频文件的流是有限的,而我的中断阻止了终结。