Skip to main content
 首页 » 编程设计

python之Python-CV2:录制的视频速度问题

2025年05月04日9zhwl

我正在尝试使用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类型转换?