Media Foundation h264编码器动态场景质量不佳

时间:2016-10-22 12:34:49

标签: h.264 ms-media-foundation

我正在编写一个实时记录PC屏幕的应用程序,并使用Media Foundation h264编解码器对其进行编码。如果屏幕上的图片没有很多动态变化,则所得视频的质量会保持很高。如果图片有许多动态变化(例如,快速滚动网页),则视频质量变得非常低。这听起来像一个低比特率问题,但参考OSX录制应用程序可以正常使用相同的设置。

编解码器配置:

  • 25 fps
  • 1364 x 768决议
  • 基线资料
  • 1.2 MBit比特率

为了最大限度地提高质量,我使用以下参数配置了编解码器:

  • CODECAPI_AVEncCommonRateControlMode = eAVEncCommonRateControlMode_Quality
  • CODECAPI_AVEncCommonQuality = 100
  • CODECAPI_AVEncAdaptiveMode = eAVEncAdaptiveMode_FrameRate
  • CODECAPI_AVEncMPVGOPSize = 10

不幸的是,这并没有多大帮助。唯一具有实际效果的设置是比特率。

示例视频,演示了此问题: https://www.dropbox.com/s/b26odaeyaygxigo/10-22-2016_15.08.17.mp4?dl=1

1 个答案:

答案 0 :(得分:0)

您需要通过此步骤设置比特率和质量:

VARIANT controlModeVar;
InitVariantFromUInt32(eAVEncCommonRateControlMode_GlobalVBR,
&controlModeVar);
hr = CodeApi->SetValue(&CODECAPI_AVEncCommonRateControlMode, 
&controlModeVar);
VARIANT quality;
InitVariantFromUInt32(BitRate, &quality);
hr = CodeApi->SetValue(&CODECAPI_AVEncCommonMeanBitRate, 
&quality);

InitVariantFromUInt32(eAVEncCommonRateControlMode_Quality, 
&controlModeVar);
hr = CodeApi->SetValue(&CODECAPI_AVEncCommonRateControlMode, 
&controlModeVar);
InitVariantFromUInt32(H264QualityLevel, &quality);
hr = CodeApi->SetValue(&CODECAPI_AVEncCommonQuality, &quality);

min os需要windows8。