我正在Python中使用OpenCV记录来自网络摄像头的数据。视频录制的帧数固定,因此它们的长度相同。我想获取记录开始和结束的确切UNIX时间戳。
下面是我的5秒示例视频(30 fps,因此总共150帧)的代码。
import cv2
import time
video_capture_0 = cv2.VideoCapture(1)
#define frame height and width
frame_width0 = int(video_capture_0.get(3))
frame_height0 = int(video_capture_0.get(4))
# create output file
out0 = cv2.VideoWriter('test.avi', cv2.VideoWriter_fourcc(str('X'),str('V'),str('I'),str('D')), 30.0, (frame_width0,frame_height0))
counter = 0
start_time = time.time()
while True:
counter += 1
# Capture frame-by-frame
ret0, frame0 = video_capture_0.read()
if (ret0):
#write video
out0.write(frame0)
# show video
cv2.imshow('Cam 0', frame0)
if (cv2.waitKey(1) & 0xFF == ord('q')) or counter == 150:
end_time = time.time()
break
# When everything is done, release the capture
video_capture_0.release()
out0.release()
cv2.destroyAllWindows() # closes all frames
time_passed = end_time - start_time
print('Start time : ', start_time, '\n')
print('End time : ', end_time, '\n')
print('Time passed : ', time_passed, '\n')
然而,实现time.time()组件总是会给我大约0.23s的延迟。
Start time : 1574694237.1550183
End time : 1574694242.387653
Time passed : 5.232634782791138
有人知道这是为什么吗,我该如何改善呢?
答案 0 :(得分:0)
如果您在ret0, frame0 = video_capture_0.read()
之前运行代码start_time = time.time()
以激活相机,并 commit 注释cv2.imshow('Cam 0', frame0)
和(cv2.waitKey(1) & 0xFF == ord('q'))
,则结果将非常接近5.0