获取视频经过的时间

Get time elapsed of a video

本文关键字:时间 经过 视频 获取      更新时间:2023-10-16

我有一个VideoCapture,然后我正在执行一些操作,例如对象检测。现在我已经到达了一个阶段,我想获取视频在特定时间内的经过时间,例如当检测到物体时。获取经过时间的最佳/最可靠方法是什么?

重要的是,由于 FPS 下降,视频无法以原始速度运行,这是因为我正在执行一些图像处理。所以问题是我希望能够在处理后的视频中获取时间,然后能够跟踪原始视频中的时间,并且它应该在同一序列上。(示例:我得到的时间是 05:30,那么如果我在 VLC 等中转到 05:30,它应该在原始视频中的同一位置)。

我希望我在解释中足够清楚。我已经尝试了CV_CAP不同的选择,但我不明白如何获得时间。它的用法是这样的:

if (this)
   Get time elapsed

任何想法和所有帮助都非常感谢

好吧

,如果您知道原始 FPS 速率和当前帧数,那么它就很简单了:elapsed_time_in_seconds = frame_number / original_fps .

OpenCV 将视频解码为其帧,而不管视频文件的编解码器如何。负责的模块是ffmpeg,这是一个混乱,超出了研究内容的图像处理范围。我的意思是,OpenCV并不关心你是否无法获得CODEC的真实fps。因此,无法保证获得您询问的时间。正如@Jesper所说,尽量幸运地使用original_fps(这是一个恒定的数字,您可能知道视频可能具有不同的 FPS,例如,直播视频会根据可用网络带宽更改其 fps 以赶上时间)。

这听起来可能很愚蠢,但在 OpenCV 中推断时间的最可靠方法是在视频捕获期间实际硬打印帧上的时间戳。

另一种解决方案可能是为您的软件设置先决条件/要求。 例如,要求视频输入应恒定为 30 FPS。

最后,与所有其他方法一样,使用帧号作为时间指示。