2013-01-21 107 views
0

我试图捕获一个AVI视频,使用DirectShow AVIMuxFileWriter过滤器。 当我连接SampleGrabber过滤器而不是AVIMux时,我可以清楚地看到数据流是30 fps,但是在捕获视频时,每个帧都重复4次,我得到120帧而不是30帧。电影慢了4倍比它应该是,并且只有一组中的第一帧是一个关键帧。 我尝试了8 fps的相同实验,对于我收到的每个图像,我在视频中有15帧。而在15 fps的情况下,我得到了每帧8次。用DirectShow捕获AVI视频

我试着用C++编写代码并用Graph Edit Plus进行测试。 有什么办法可以控制它吗?可能对AVIMux过滤器有些限制?

回答

0

您没有指定可能对问题有影响的捕获格式,但通常听起来像图形写入文件时有一些瓶颈,阻止了流以30fps的速度继续流动。相机正在尝试以30fps的速度制作相框,只要缓冲区被回收填充,相机就会这样做。

但是,这里缓冲区不可用,因为文件写入器正忙于将它们放到磁盘上。捕捉过滤器不足,在这种情况下,它会增加与每个捕捉帧一起传播的“丢帧”计数器。 AVIMux使用这个计数器在AVI文件中插入一个指示符,它实际上表示“一帧应该在这里可用来写入文件,但不是;在播放时重复最后一帧”。所以文件应该有每秒30帧的占位符 - 一些填充了实际的帧,一些“丢帧”。

此外,您没有提及您是否在音频中混音,这将作为图形的参考时钟以维持音频 - 视频同步。如果还使用音频流捕获完成,则AVIMux会更改视频流的帧率,以使两个流的持续时间相等。您可以通过转储AVI文件头来检查AVIMux是否改变了视频流的帧率(或者右键单击资源管理器中的文件并查看属性)。

如果让我大胆地猜测到问题的根源,我打赌捕获驱动程序在计算丢弃帧计数这又搞乱了AVIMux的错误。这是否发生在不同的相机?