0

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

我尝试使用 C++ 编写代码并使用 Graph Edit Plus 对其进行测试。有什么办法可以控制吗?也许对AVIMux过滤器有一些限制?

4

1 回答 1

0

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

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

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

如果我不得不冒险猜测问题的根源,我敢打赌捕获驱动程序在计算丢帧计数时存在错误,这反过来又会弄乱 AVIMux。使用不同的相机会发生这种情况吗?

于 2013-03-15T15:58:06.610 回答