【发布时间】:2015-12-18 19:48:54
【问题描述】:
我知道VideoWriter 对象的 FPS 应该与我的网络摄像头的 FPS 匹配。我的网络摄像头是Logitech HD Pro Webcam C920,如您所见,规范说它的 FPS 为 30。我仍然没有硬编码该值,而是使用cap.get(CV_CAP_PROP_FPS)(返回 30.0)来确保匹配 FPS。
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.avi', fourcc, cap.get(CV_CAP_PROP_FPS), (640, 480))
print(cap.get(CV_CAP_PROP_FPS)) # 30.0
这就是我捕捉视频每一帧的方式:
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
if ret == True:
out.write(frame)
我的问题是,即使使用匹配的 FPS,输出视频 (output.avi) 的播放速度约为 x3(根据我的非科学估计),这显然不是我想要的。我尝试了不同的编解码器,但出现了同样的问题。
有几个关于 SO 的问题正在解决同样的问题:
OpenCV, captured video runs faster than original camera video!
OpenCV Video capture and fps problem
OpenCV: Video Recording is too fast
http://answers.opencv.org/question/16522/video-recording-is-too-fast/
其中大部分建议将作者的 FPS 与网络摄像头的 FPS 相匹配,我也这样做了。如果我将 FPS 硬编码为 10,则视频播放看起来很正常,但我不想这样做,因为它必须与许多相机通用。
我现在真的不知道该怎么做,但我会继续寻找,直到找到解决方案。任何见解都值得赞赏!
【问题讨论】:
标签: python opencv raspberry-pi video-capture opencv3.0