获取视频的时间

时间:2016-07-10 22:35:38

标签: c++ opencv

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

重要的是由于FPS下降,视频没有以原始速度运行,这是因为我正在执行一些图像处理。所以问题是我希望能够在处理过的视频中获得时间,然后能够跟踪原始视频中的时间,它应该在相同的序列上。 (例如:我得到时间05:30,如果我在VLC等05:30去,它应该在原始视频的同一个地方。)

我希望我在解释中足够清楚。我尝试CV_CAP有不同的选择,但我不知道如何得到时间。使用它将类似于:

if (this)
   Get time elapsed

任何想法和所有帮助非常 赞赏

2 个答案:

答案 0 :(得分:2)

好吧,如果您知道原始FPS费率和当前帧数,那么它很简单:elapsed_time_in_seconds = frame_number / original_fps

答案 1 :(得分:0)

OpenCV将视频解码为其帧,无论视频文件的编解码器如何。负责这个的模块是ffmpeg,这是一个混乱,超出了研究内容中的图像处理范围。我的意思是OpenCV并不关心你是否能够获得CODEC的真实fps。因此,无法保证获得您所要求的时间安排。正如@Jesper所说,尝试幸运的是original_fps(这是一个常数,因为你可能知道视频可能有不同的FPS,例如直播视频根据可用的网络带宽改变其fps以赶上时间)。

这可能听起来很愚蠢,但在OpenCV中推断时间的最值得信赖的方法是在视频捕捉过程中实际硬盘上的时间戳。

另一种解决方案是设置软件的前提条件/要求。例如。要求视频输入应保持恒定30 FPS。

最后,正如所有其他人一样,使用帧编号进行时间显示。