如何以可变帧速率同步两个视频?

时间:2012-07-17 21:02:02

标签: video opencv video-processing pyglet

我有很多视频文件对,可以在一个房间内使用两个网络摄像头拍摄。由于带宽利用率,视频文件具有可变的帧速率。据我了解,如果我们在时间轴上标记帧,它就是这样的:

variable frame rates

我想要同步这两个视频。通过同步,我的意思是填充间隙,使得对于视频中的给定帧,在另一视频中存在对应的帧。最后,我想要两个有两个这样的视频:

enter image description here

我已经考虑过使用转换器工具将两个视频转换为25 fps,尽管我将有冗余帧对,它们将被同步。但是,我有与所有视频的每个帧相关的信息,我无法在转换后知道关联。

我认为我需要以编程方式执行此操作,以便我可以相应地保留与每个帧相关联的信息。

到目前为止,我已经尝试过OpenCV,VideoCapture属性CV_CAP_PROP_POS_MSEC给出了帧号,而不是帧的毫秒数。即使它给了我正确的值,VideoWriter也不支持可变帧速率。 MATLAB拒绝读取我的视频文件,因为它不支持编解码器,即MJPEG(运动jpeg)。我已经能够在Python中使用pyglet读取帧#和相应的毫秒。但它只是解码器,我仍然没有任何东西可以写入视频文件,例如"这是#12帧,这应该是视频的1.76秒"。

我正在寻找实现这一目标的最简单方法,语言,工具并不重要。基于Windows的解决方案表示赞赏非常感谢你的回答。

PS。我不介意输出格式,但我更喜欢丢失格式。

1 个答案:

答案 0 :(得分:1)

最简单的方法是将两者转换为相同的fps(比方说25),然后匹配它们。 ffmpeg是一个很好的工具。查看此博客文章了解更多详情http://www.hdslr-cinema.com/news/workflow/convert-between-framerates/

但可能会重复帧以覆盖空位。如果这不能满足您的要求,您应该考虑时间插值 - 在帧之间插入像素。但这是很多工作。 ffmpeg解决方案是一个5分钟的任务,插值可能意味着阅读和实施一些学术论文。

请注意,可能有一些专用的插值工具,但我不知道它们。值得研究。