【问题标题】:DirectShow filter graph using WMASFWriter creates video which is too short使用 WMASFWriter 的 DirectShow 过滤器图创建的视频太短
【发布时间】:2011-12-20 15:16:12
【问题描述】:

我正在尝试基于 DirectShow SDK 中的 pushsource 示例创建 DirectShow 源过滤器。这实际上将一组位图输出到视频。我已经设置了一个过滤器图,它使用 Async_reader 和 Wave Parser 用于音频和我的新过滤器来推送视频(过滤器是 CSourceStream,我在 FillBuffer 函数中填充我的帧)。它们都连接到 WMASFWriter 以输出 WMV。

每个位图可以持续几秒钟,因此在 FillBuffer 函数中,我在传递的 IMediaSample 上调用 SetTime,开始和结束时间相隔几秒钟。这在渲染到屏幕时效果很好,但写入磁盘会导致文件持续时间太短。在编写 WMV 时,似乎最后一个位图被忽略了(它显示为视频结束而不是持续到预期的持续时间)。我的过滤器和修改后的 pushsource 过滤器都是这种情况(其中帧长度已增加)。

我看到了其他奇怪的行为,因为在我尝试制作时,不可能有一个长度不是 10 秒倍数的视频。我不确定这是什么,但我会提到它以防万一。

【问题讨论】:

    标签: c++ directshow


    【解决方案1】:

    我认为结束时间被忽略了。通常视频样本只有一个开始时间,因为它们是一个时间点。如果视频中有运动,则运动是流畅的,尽管视频只是时间点。

    我认为解决方案很简单。因为在接收到下一帧之前视频保持不变,您可以在视频末尾添加一个虚拟帧。您可以简单地重复上一帧。

    【讨论】:

    • 啊,当然可以。我没有考虑到结束时间被忽略了。在视频末尾添加一个虚拟帧效果很好。谢谢!
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2010-12-30
    • 2012-05-08
    相关资源
    最近更新 更多