【发布时间】:2012-11-08 10:42:13
【问题描述】:
我正在使用 Microsoft Media Foundation 对 H.264 视频文件进行编码。
我正在使用 SinkWriter 创建视频文件。输入是一个缓冲区 (MFVideoFormat_RGB32),我在其中绘制帧,输出是 MFVideoFormat_H264。
编码有效,它会创建一个包含我的帧的视频文件。但我想设置该视频文件的质量。更具体地说,我想在 H.264 编码器上设置CODECAPI_AVEncCommonQuality 属性。
为了获得 H.264 编码器的句柄,我在 SinkWriter 上调用了GetServiceForStream。然后我设置CODECAPI_AVEncCommonQuality 属性。
问题是我的属性更改被忽略了。如documentation中所述:
要在 Windows 7 中设置此参数,请在调用 IMFTransform::SetOutputType 之前设置该属性。设置输出类型后,编码器会忽略更改。
问题是我没有手动创建 H.264 编码器。我在 SinkWriter 上设置了输入和输出类型,SinkWriter 会自动创建 H.264 编码器。一旦它创建了编码器,它就会调用IMFTransform::SetOutputType 方法,我不能再更改CODECAPI_AVEncCommonQuality 属性。文档还说在 Windows 8 中不会忽略属性更改,但我需要在 Windows 7 上运行它。
您知道在 Windows 7 上使用 SinkWriter 时如何更改编码文件的质量吗?
PS:在msdn论坛Someone asked the same question,他似乎没有得到答案。
【问题讨论】:
标签: windows-7 encoding h.264 ms-media-foundation