我有一些OpenCV项目通过USB分析视频,在某些情况下必须将视频流记录到文件中。使用我的软件的人抱怨10分钟以上的录音会产生比他们应该的时间长约20秒的视频文件。
我正在使用openCV的VideoWriter。我尝试过将CV2_CAP_PROP_FPS设置为非常低的设置,并尝试在几秒钟内获得平均帧速率,以便为输出文件的帧速率找到一个好的设置。仍然不能满足我的实时需求。
有没有人知道确保我的视频接近实时录制的好方法?我应该使用time.sleep(在python中)来限制我的帧速率吗?或者有更好的方法吗?
答案 0 :(得分:1)
我写了一个实时跟踪器(用于神经生物学研究),我使用它与许多网络摄像头,并注意到我的一些相机不精确地遵守帧速率;它们可能有些快或慢。为了保存“合理正确”的视频,从网络摄像头捕获帧的代码调用我的VideoWriter
的{{1}}方法,该方法将帧放入队列,并且帧由单独的“作者”检索以恒定速率写入帧的线程。如果写入线程在写入下一帧时发现队列为空,则重复最后一帧。如果编写器线程在队列中找到多个帧,则它会写入最新的帧并丢弃其他帧。 (可以在没有单独的线程的情况下实现这一点,但对于实时跟踪器,让write(frame)
快速返回是很好的。)
以下摘自我的代码。他们将不逐字运行,但会显示我刚刚描述的内容。 (我计划在接下来的几周内将实时跟踪器放在GitHub上。)
write(frame)