将UNIX时间戳添加到网络摄像头录制的开始/结束

时间:2019-11-25 15:32:58

标签: python opencv unix timestamp

我正在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 

有人知道这是为什么吗,我该如何改善呢?

1 个答案:

答案 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