使用 Windows Media Video 9 屏幕编解码器获取良好结果

[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Windows Media Video 9 屏幕编解码器旨在为屏幕捕获生成高度压缩的视频。 由于屏幕捕获的大部分需求都涉及相当简单的静态图像,因此获得的高压缩级别通常并不意味着对图像质量的极大牺牲。 但是,每个屏幕捕获都不同,生成的图像质量可能会因情况而大有不同。

确定屏幕编解码器会话的配置文件设置的最佳方式是使用基于质量的可变比特率流对测试文件进行编码。 将质量设置为所需的值,并像录制最终文件一样对屏幕捕获进行编码。 写入文件时,使用异步读取器对象播放该文件,定期调用 IWMReaderAdvanced::GetStatistics。 通过监视每个调用WM_READER_STATISTICS结构的 dwBandwidth 成员的值,可以确定实现所需质量所需的近似比特率。 然后,可以使用该比特率进行恒定比特率编码。

如果发现所需的质量需要比交付方案更高的比特率,可以尝试以下技术来提高编解码器的效率。

  • 使用较小的分辨率进行屏幕捕获。 捕获比所需更大的屏幕分辨率也可能通过显示比所需信息更多的信息来给观看者造成混淆。
  • 在屏幕捕获中使用更少的图形。 Windows Media Video 9 屏幕编解码器经过优化,可对 Windows 基元和文本进行高质量编码。 通常,由于位图图形(通常包含成千上万种颜色)而出现问题。 捕获时屏幕上的位图越少,结果就越好。 如果无法从屏幕捕获中消除图形,可通过多种方式将位图对图像质量的影响降到最低:
    • 减小图形的大小。
    • 减少同时在屏幕上显示的各个图形的数量。
    • 减少图形的移动量。 例如,如果图形位于窗口中,则使窗口尽可能保持静止。
    • 避免将鼠标指针移到图形上,或将窗口或其他元素拖动到图形上。
  • 使用较慢的 帧速率。 屏幕捕获通常可以在非常低的帧速率下有效, (有时) 低至每秒 4 或 5 帧。
  • 降低随附音频的比特率。

此外,编解码器不支持调整视频矩形的大小。 换句话说,如果尝试使用编解码器将 800 x 600 屏幕向下编码为 640 x 480 的视频矩形,则生成的视频将具有大量项目,可能会使屏幕上的大部分文本难以辨认。

配置屏幕捕获流

配置流