【问题标题】:Setting Keyframe interval on DirectShow Encoder在 DirectShow 编码器上设置关键帧间隔
【发布时间】:2015-11-25 11:44:56
【问题描述】:

我在播放视频时看到了一些奇怪的行为,我使用 DirectShow 创建了视频 - 问题仅在 Windows 7 上(W8/W10 工作正常)。

图表是这样构建的:

Source(Webcam) -> H264 Encoder -> MP4 Mux -> File Writer

所以我使用的是 H264 编码器,但是由于某种原因,编码器会在编码器过滤器之后删除所有关键帧(同步)。使用另一个较旧的 H264 编码器,我可以看到它每 20 帧完美地设置一个关键帧(同步),并且该编码器的输出文件在所有操作系统上都能完美运行。

所以我怀疑问题在于编码器没有正确设置关键帧,因此无法正确搜索(但是 Windows 8 和 10 可以弄清楚如何在没有关键帧的情况下正确搜索文件,而不是 Windows 7)

在 Windows 7 上使用 VLC/WMP 搜索文件时文件会表现得很奇怪(很长一段时间没有视频,灰色像素化视频超过 10 秒,视频突然停止......)

所以我的问题是,如何在 DirectShow 中的编码过滤器上设置关键帧的间隔?

编辑:我发现的另一个有趣的事情是,当我寻找时,在播放过程中通过分析器过滤器(在解码器之后插入)可以看到这个奇怪的输出。

【问题讨论】:

  • 尼古拉斯,出于好奇,您使用的是什么 H264 编码器?
  • @MikeDinescu 我正在使用 VisioForge H264
  • 由于 VisioForge 似乎是一种商业产品,我认为最好的办法是联系开发人员并索取文档 - 如果该功能不可用(或未正确实施),他们添加/修复它。

标签: video encoding directshow h.264 directshow.net


【解决方案1】:

插入关键帧的决定是编码器的。它可能具有定义 GOP 长度和关键帧的最小频率的设置。它可能还会在场景更改时插入一个关键帧。它可能还接受外部请求以在特定点插入。

通用方法是IAMVideoCompression::put_KeyFrameRate。同时我会说它是特定于编码器的。您应该查看您正在使用的特定编码器的文档以了解如何操作。

【讨论】:

  • 谢谢罗曼。这是这个问题的完美答案,遗憾的是在我的情况下 IAMVideoCompression 不受支持 - 所以我将不得不希望我的编码器有某种方法。
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多