Microsoft Media Foundation) (编码方法

大多数 Windows Media 音频和视频编解码器都支持多种编码方法。 了解如何以及何时使用每种方法有助于创建高质量的压缩内容。

编码方法都集中在解码器用于管理压缩输入数据的缓冲区上。 此缓冲区由流的比特率(以位/秒为单位)和缓冲区窗口(以毫秒为单位)定义。 编码时,编解码器遵守缓冲区的限制。 有关缓冲区的详细信息,请参阅 泄漏桶缓冲区模型

常量比特率编码

由其中一个 Windows Media 音频和视频编解码器编码的任何流的比特率不是恒定的。 因此,CBR) 编码 (恒定比特率是一个有点误导性的术语。 CBR 编码流的区别在于较小的缓冲区窗口,它限制了样本大小的变化。 CBR 编码主要用于通过网络流式传输到目标的内容。 在这种情况下,必须能够依赖一致的带宽使用情况。

从配置的角度来看,CBR 编码与其他模式不同,在开始编码之前,可以设置输出内容的平均比特率和应用于该比特率的缓冲区窗口。 在其他模式下,配置编码器时,其中一个或两个值未知,并且由编解码器在编码时计算。 CBR 是 Windows Media 编码器 DSO 使用的标准编码模式。

Two-Pass常量比特率编码

标准 CBR 仅使用单个编码通道。 将内容作为输入示例提供,编解码器将压缩内容并返回输出示例。 还可以处理输入样本两次。 在第一次传递时,编解码器执行计算以优化内容的编码。 在第二次传递中,编解码器使用在第一次传递期间收集的数据对内容进行编码。

双传递 CBR 编码具有许多优点。 它通常比标准 CBR 编码产生显著的质量提升,而无需更改任何缓冲要求。 这使得此编码模式非常适合通过网络流式传输的内容。 两次传递 CBR 不可行的唯一情况是从实时源对内容进行编码,而不能使用第二次传递。

双传递 CBR 流的输出媒体类型与标准 CBR 流的输出媒体类型相同;你仍指定要使用的比特率和缓冲区窗口。 配置 DMO 时,必须将其设置为执行两次传递。 完成第一次传递的样本发送后,必须通知 DMO。

Quality-Based可变比特率编码

由于 CBR 编码实际上并不保持恒定的比特率,因此它与 VBR) (可变比特率编码之间的区别似乎有点模糊。 CBR 和 VBR 之间的主要区别在于所使用的缓冲区窗口的大小。 与 CBR 编码的流相比,VBR 编码的流通常具有较大的缓冲区窗口。 基于质量的 VBR 也不例外,因为它既不为其定义比特率,也不定义缓冲区窗口。 而是设置质量值。 然后,编解码器尝试压缩数据,以便编码媒体的质量在其整个持续时间内保持一致,而不考虑生成的流的缓冲区要求。

基于质量的 VBR 使用单个编码传递,并倾向于创建大型压缩流。 编码完成后,编解码器会设置缓冲区要求,以便解码器可以解压缩数据。 编码的 VBR 流不适用于通过网络进行流式传输,因此基于质量的 VBR 仅应用于本地播放方案, (或下载和播放) 。

不受约束的可变比特率编码

与基于质量的 VBR 不同,不受约束的 VBR 不会编码到特定的质量级别。 相反,它会将内容编码为尽可能高的质量,同时保持指定的比特率。 无约束 VBR 使用两个编码通道,类似于两次传递 CBR,只不过你没有为流指定缓冲区窗口设置。 这意味着,只要平均比特率小于或等于设置的值,流中各个样本的大小就没有限制。

不受约束的 VBR 使用有限,因为很少有播放方案需要符合其缓冲区要求。 编解码器可以将缓冲区窗口设置为编码后所需的任何值,因此无法控制缓冲区大小。 在大多数情况下,如果你不关心缓冲区的大小或带宽使用情况的一致性,则应使用基于质量的 VBR。

Peak-Constrained可变比特率编码

最终的编码模式是受峰值约束的 VBR。 与不受约束的 VBR 一样,此模式使用两个编码传递,并编码为指定的比特率。 但是,对于受峰值约束的 VBR,还可以配置编码的峰值。 峰值类似于正常的缓冲区配置值:存在峰值比特率和峰值缓冲区窗口。 对文件进行编码以符合峰值描述的缓冲区,条件是流的总体平均比特率等于或小于指定的平均比特率值。

受约束的 VBR 可能难以概念化。 下面是考虑所使用的缓冲模型的最简单方法。 假设流是一个 CBR 流,其峰值比特率和峰值缓冲区窗口用于定义缓冲区。 通常,峰值比特率相当高。 编码器可确保在流的持续时间内保持你指示的预期平均比特率值。 在流中的任何特定点,平均比特率保证大于总流大小(以位为单位),除以流持续时间(以秒为单位)) 。

请考虑以下示例:配置平均比特率为每秒 16,000 位、峰值比特率为 48,000 位/秒、峰值缓冲区窗口为 3,000 (3 秒) 。 用于流的缓冲区大小为 144,000 位 (48,000 位/秒 x 3 秒,) 由峰值确定。 编码器压缩数据以符合该缓冲区。 此外,流的平均比特率必须为 16,000 或更少。 如果编码器需要制作一些非常大的样本来处理复杂的内容段,它可以利用较大的缓冲区大小。 但流的其他部分必须以较低的比特率进行编码,以便将平均值降低到指定的级别。

峰值约束 VBR 编码对于具有有限缓冲区容量和某些数据速率约束的播放设备非常有用。 一个常见示例是用于 DVD 的编码。

使用 VBR 编码

Windows Media 编解码器