保存带有时间戳的实时视频帧

时间:2019-05-23 12:06:46

标签: python opencv raspberry-pi

我想使用Raspberry pi实时捕获带有时间戳的视频帧。该视频由USB网络摄像头使用python代码中的ffmpeg()函数制作。如何在Raspberry pi中保存USB网络摄像头当前制作的视频帧?

我尝试使用opencv的三个功能。 cv2.VideoCapture用于检测视频,video.read()用于捕获帧,cv2.imwrite()用于保存帧。此处是代码,为简洁起见,未提及所包含的库。

  os.system('ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 out.avi')
  video=cv2.VideoCapture('out.avi')
  ret, frame=video.read()
  cv2.imwrite('image'+str(i)+'.jpg',frame)     
  i+=1

该代码保存以前由网络摄像头制作的视频帧。它不会保存网络摄像头当前正在录制的视频帧。

1 个答案:

答案 0 :(得分:0)

您可以阅读here,因此可以使用ret, frame = camera.read()访问相机。 0是所连接摄像机的索引。您可能需要尝试使用其他索引,但通常使用0。
与视频文件类似,您可以使用ret来抓取帧。在继续处理帧之前,请始终检查imwrite值。
接下来,您可以按照here所述向框架添加文本。 您可以使用timedatetime获取时间戳。 最后保存框架。

注意:如果您使用time.time(),则会快速获得很多图像。根据您的项目,您还可以考虑将帧另存为视频文件。说明here

评论后编辑:

这是您使用time.time()的方式。首先将时间模块导入代码顶部。 January 1, 1970, 00:00:00返回自import time starttime = time.time() # get frame timestamp = time.time() - starttime cv2.putText(frame,timestamp,(10,500), font, 4,(255,255,255),2,cv2.CV_AA) 起的秒数。 因此,要获取时间戳,您必须存储开始时间-程序/视频开始运行的时间。
然后,在每一帧上,调用time.time()并减去开始时间。结果是您的程序/视频已经运行的时间。您可以将该值用作时间戳记。

<nav>
    <label class="nav-toggler">
        <input type="checkbox" />
    </label>
    <ul class="nav-links">
        <li>link</li>
        <li>link</li>
        <li>link</li>
    </ul>
</nav>