从网络摄像头录制视频时遇到一些问题。因为我正在做一个实验并同时录制视频,所以真正的秒必须与录制的秒相同,这一点非常重要。 我正在使用的代码是这样的:
def record_video(self,path_video="test"):
vid_capture = cv2.VideoCapture(0)
#vid_capture.set(cv2.CAP_PROP_FPS,20)
fps=vid_capture.get(cv2.CAP_PROP_FPS)
#vid_capture.set(cv2.CAP_PROP_BUFFERSIZE,2)
vid_cod = cv2.VideoWriter_fourcc(*'XVID')
output = cv2.VideoWriter("experiment_videos/" + path_video + ".avi",vid_cod,fps,(640,480))
x = threading.Thread(target=socket_trigger)
x.daemon = True
x.start()
print("Waiting")
while(start==0):
ret_cam,frame_cam = vid_capture.read()
while (True):
ret_cam,frame_cam = vid_capture.read()
output.write(frame_cam)
# Close and break the loop after pressing "x" key
if cv2.waitKey(1) & 0XFF == ord('x'):
break
if end== 1:
break
# close the already opened camera
vid_capture.release()
#cap.release()
# close the already opened file
output.release()
# close the window and de-allocate any associated memory usage
cv2.destroyAllWindows()
所有代码均正常运行,我收到的标志变量正常运行。例如,如果我录制了5分钟(实时)的视频,则输出可能是4:52,4:55甚至是5:00。只是不准确。
我认为这是因为我写了一个30fps的输出文件(这就是vid_capture.get(cv2.CAP_PROP_FPS
的返回值),而我的相机有时却以更少的帧数进行记录(比如说28,29
)。
我不知道该怎么办,我曾尝试将摄像机的fps设置为20,但没有用(#vid_capture.set(cv2.CAP_PROP_FPS,20)
)。
有什么想法吗?对我来说至关重要的匹配时间,我唯一的工作就是录制网络摄像头。 谢谢大家 海梅