我正在尝试使用python通过我的网络摄像头录制视频,除保存的视频的长度与录制的实际时间长度不匹配的那部分外,其他一切都很正常。
如果我录制10秒的视频,则保存的视频将有6或12或15秒(随机示例)。经过一番研究后,我意识到它必须达到我的网络摄像机的fps值,并且我已经在研究它,但是并没有达到目的。
cam = cv2.VideoCapture(0)
while (int(time.time() - start_time) < 10):
ret, frame = cam.read()
if ret == True:
frames.append(frame)
cv2.imshow('frame', frame)
if (cv2.waitKey(1) & 0xFF == ord('q')) or get_drives() == default:
break
else:
break
end_time = time.time() - start_time
cap.release()
cv2.destroyAllWindows()
save_frames_as_video(frames, end_time)
(1)首先,我不明白为什么,如果我多次运行程序,有时会生成不同数量的总帧数。例如,我只运行了两次,第一次运行生成了2192帧,而第二次运行生成了1648帧。考虑到相同的时间长度和相同的摄像机,它不应该生成相同数量的帧吗?
def save_frames_as_video(video, end_time):
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter(VIDEO_FILE_NAME, fourcc, ____, (640, 480))
for frame in video:
out.write(frame)
out.release()
(2)我不知道在fps参数(空格)中要放什么。我已经尝试将20.0作为默认值,但没有很好的结果。然后,我尝试将总帧数除以记录的长度,因为我发现如果它捕获了200帧并且记录的长度为10秒,则fps应该为20。这也不起作用。有什么建议么?
谢谢。
请您参考如下方法:
30 fps是很常见的-如果您不知道网络摄像机的fps,请给一个镜头。
您如何检查时间的流逝? end_point实际上是video_duration。您是否正在检查以获取视频长度?
也许尝试摆脱int类型转换?
