OpenCV中基于时间戳的视频同步帧播放

2024-06-08 11:33:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个视频处理alg(python opencv),并希望将逐帧分析与类似的商业alg进行比较。我有一个从类似的alg生成的csv文件,它有时间戳,对应的整个视频输出。csv文件的格式如下所示。带有时间戳和真/假(1/0)。在

| Time             | Output|  
|------------------|--------|  
| 00:01:10.345     | 1 |

视频是一个每秒30帧的.avi文件。我在让两个ALG之间的帧对齐时遇到问题,这样我就可以比较输出。以下是我迄今为止尝试过的方法。在

想法1

我试着在读取每一帧之前,将时间戳设置为来自csv文件来回放视频。csv中的每个时间戳间隔33ms(通过计算确认)。它以每秒30帧的速度录制,因此每帧应有一个时间戳。在

时间戳的格式为hh:mm:ss.000,如上所示。下面是我设置时间的代码:

^{pr2}$

但是这不能正确播放视频。我可以在VLC中打开同一个视频并排播放,与帧相比的时间戳不正确。Opencv将播放得非常慢,直到它达到某种程度的临界点,跳过几帧,然后快速播放几帧,赶上VLC中的正常视频。这种方法看起来效率很低,但如果有效的话,可以确保框架对齐。在

想法2

因为视频和csv时间戳是30帧/秒,所以我想我可以正常播放视频,并且每帧增加一个csv索引以获得相应的输出。然而,当比较这些时间戳时,opencv的速度缓慢地超过csv,到视频结束时,它就领先了几分钟。在

# This changes over time!! About 1 milliscond every 3 frames
diff = timeToMilli(csv['Time'][index]) - cap.get(0)

# Returns 30 as expected
fps = cap.get(5)

以这种方式播放视频,在视觉上也比在VLC中观看视频快。在

问题

在python opencv中将视频回放与时间戳同步吗?opencv的运行速度是否超过每秒30帧?或者可能是某种编码问题。在


Tags: 文件csv方法outputget视频time格式