首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DirectShow实现字幕文件与MPEG视频的帧精确同步

用DirectShow实现字幕文件与MPEG视频的帧精确同步
EN

Stack Overflow用户
提问于 2008-12-11 20:06:30
回答 1查看 1.8K关注 0票数 1

这是一个我已经处理了一段时间的问题,而且还没有得到一个好的答案(即使是从微软那里)。我使用通用转储过滤器将硬件压缩的MPEG文件写入磁盘。在图中,我还有一个SampleGrabber过滤器,它在每个帧上都会被调用。通过SampleGrabber回调,我获得了一个副标题以及DirectShow时间戳,并将它们写到一个SAMI (.smi)字幕文件中。这一切似乎都是可行的,因为SAMI文件包含每个帧的正确字幕。不过,我有几个问题:

  1. 前几个(通常是3或4) DirectShow时间戳都是0。如果我收到来自SampleGrabber的回调,这些时间戳不应该增加吗?
  2. 当我开始播放时,显示的第一个时间戳是大约10-20个字幕进入萨米文件。我假设第一个帧会显示文件中的第一个时间戳。
  3. 这可能与#2有关,但字幕没有与文件中的适当帧同步。它们有时会晚到40帧。

我正在使用DirectShow通过C++,在Windows SP3下使用HauppaugeHVR-1800捕获(带有最新的驱动程序09/08/2008),并在媒体播放器经典6.4.9.0下播放。任何想法都欢迎。

EN

回答 1

Stack Overflow用户

发布于 2008-12-12 14:26:46

您是否使用获取传入的IMediaSample的GetTime或GetMediaTime。GetTime是您想要的,因为它重新呈现流、演示文稿的时间。

确保还检查传入的IMediaSample的isPreRoll函数。应忽略预录示例,因为它们将在回放过程中再次输出。我要做的另一件事是确保您的样本抓取器在过滤器的下游尽可能远。最好是在任何要求者和渲染者之后。

还请参阅TimeStamps文档中关于DirectShow的文章。它概述了使用时间戳的其他注意事项。

当然,即使在完成上述所有技巧之后,对于特定的DirectShow过滤器的行为仍然没有绝对的保证。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/360707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档