gpt4 book ai didi

c++ - 使用 WMASFWriter 的 DirectShow 过滤器图创建的视频太短

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:33:42 25 4
gpt4 key购买 nike

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

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

我还看到了其他奇怪的行为,因为在我尝试完成这项工作时,不可能有一段长度不是 10 秒倍数的视频。我不确定这是什么,但我想在相关的情况下提及它。

最佳答案

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

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

关于c++ - 使用 WMASFWriter 的 DirectShow 过滤器图创建的视频太短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8577609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com