我正在尝试使用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参数(blankspace)中放入什么。我已经尝试20.0作为默认值,没有好结果。然后我尝试将总帧数除以记录长度,因为我想它是否捕获了200帧并且记录的长度是10秒,那么fps应该是20.它也没有用。有什么建议吗?
谢谢。
答案 0 :(得分:-1)
30 fps是常见的 - 如果您不知道网络摄像头的fps,请拍摄。
你是如何检查时间的? end_point真的是video_duration。您是否正在检查以获取视频长度?
也许尝试摆脱int类型转换?