h.264 - Media Foundation h264 编码器在动态场景中质量不佳

标签 h.264 ms-media-foundation

我正在编写一个实时记录 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/

相关文章:

java - 将 java.awt.Image 保存到磁盘

c# - 如何从 C# 中的一组图像创建 H.264 编码的电影?

android - 支持 Chrome for Android 中的 sw/hw h264 解码器

h.264 - 使用wireshark将RTP有效载荷解码为H264

c++ - WMAV2 MFT编码器

media-player - 使用 Media Foundation 的 WP8 视频流

windows - 以编程方式为应用设置图形性能

flv - 如何在 gstreamer 中播放没有 playbin2 的 .flv(h.264 aac) 文件?

audio - 带音频的IMFCapturePreviewSink

c++ - 如何在 Windows 桌面应用程序的 MediaFoundation SourceReader 中使用英特尔硬件 MJPEG 解码器 MFT?