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