我正在编写一个实时记录 PC 屏幕并使用 Media Foundation h264 编解码器对其进行编码的应用程序。如果屏幕上的图片没有很多动态变化,则生成的视频质量会保持很高。如果图片有很多动态变化(例如网页的快速滚动),则视频质量会变得非常低。这听起来像是一个低比特率问题,但引用 OSX 录音应用程序在相同设置下工作正常。
编解码器配置:
- 25 帧/秒
- 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
最佳答案
这一步需要设置码率和质量:
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);
最小操作系统需要 windows8。
关于h.264 - Media Foundation h264 编码器在动态场景中质量不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192242/