gpt4 book ai didi

windows-7 - 使用 SinkWriter 编码视频时更改 h.264 质量

转载 作者:行者123 更新时间:2023-12-02 11:28:51 24 4
gpt4 key购买 nike

我正在使用 Microsoft Media Foundation 对 H.264 视频文件进行编码。

我正在使用 SinkWriter 创建视频文件。输入是一个缓冲区 (MFVideoFormat_RGB32),我在其中绘制帧,输出是 MFVideoFormat_H264

编码工作正常,它会创建一个包含我的帧的视频文件。但我想设置该视频文件的质量。更具体地说,我想设置 CODECAPI_AVEncCommonQuality H.264 编码器上的属性。

为了获取 H.264 编码器的句柄,我调用 GetServiceForStream在 SinkWriter 上。然后我设置了 CODECAPI_AVEncCommonQuality 属性。

问题是我的属性更改被忽略了。如 documentation 中所述:

To set this parameter in Windows 7, set the property before calling IMFTransform::SetOutputType. The encoder ignores changes after the output type is set.

问题是我没有手动创建 H.264 编码器。我在 SinkWriter 上设置输入和输出类型,SinkWriter 自动创建 H.264 编码器。一旦创建编码器,它就会调用 IMFTransform::SetOutputType 方法,并且我无法再更改 CODECAPI_AVEncCommonQuality 属性。该文档还指出,在 Windows 8 中不会忽略属性更改,但我需要它在 Windows 7 上运行。

您知道在 Windows 7 上使用 SinkWriter 时如何更改编码文件的质量吗?

PS:Someone asked the same question在msdn论坛上,他似乎没有得到答案。

最佳答案

正如文档所述,设置输出类型后,您无法更改 CODECAPI_AVEncCommonQuality 属性,并且 SinkWriter 在您使用编码器之前设置输出类型。

为了绕过这个问题,我设法创建一个类工厂并将其注册到 Media Foundation 中,以便 SinkWriter 使用它来创建新的编码器。在我的类工厂中,我创建了一个新的 H264 编码器,并在将其传递给 SinkWriter 之前设置我想要的任何属性。

我已经在 MSDN 论坛上更详细地写了创建此类工厂的步骤,此处:http://social.msdn.microsoft.com/Forums/en-US/mediafoundationdevelopment/thread/6da521e9-7bb3-4b79-a2b6-b31509224638

这是我在 Windows 7 上解决问题的唯一方法。

关于windows-7 - 使用 SinkWriter 编码视频时更改 h.264 质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287396/

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