使用directshow中的SampleGrabber过滤器生成帧编号和帧采样时间之间的映射

时间:2013-02-15 15:57:36

标签: directshow

在我的一个应用程序中,我需要知道给定视频文件的帧位置(帧编号)和实际帧采样时间之间的映射。 我在回调模式下使用Directshow SampleGrabber过滤器。我正在重写ISampleGraberCB类的BufferCB方法,每当调用回调时,我都会将到达的采样时间映射到地图中的帧位置。每当新样本从零开始到达时,帧位置都会递增。 虽然我能够生成所需的地图,但在处理大型视频文件时,上述方法非常慢。 有人可以提供有关如何快速生成此地图或任何其他更好方法的任何建议。

提前致谢。

与Pradeep

1 个答案:

答案 0 :(得分:1)

在DirectShow中基本上没有“帧号”这样的东西,只有时间戳。唯一需要做的就是遍历整个文件并记录时间戳,就像你已经做的那样。

但是,如果您将样本抓取器设置为接收原始/未解码的fames,则该过程可能会更快方式。这种方式不需要解码器,整个迭代框架发生得非常快。不要忘记从图表中删除时钟以请求ASAP处理(而不是默认的实时速度)。