将压缩媒体存储在 AVI 文件中(Microsoft 媒体基础)

使用 Windows 媒体音频和视频编解码器压缩的任何内容都必须放在某种容器格式中。 最流行的格式之一是音频视频交错或 AVI。 可以使用适用于 Windows 的 Microsoft 视频 (VfW) 或 Microsoft DirectShow 来创建 AVI 文件。

Windows Media 音频和视频编解码器是为使用高级系统格式 (ASF) 的属性而开发的,高级系统格式是 Windows Media 使用的容器。 由于 AVI 和 ASF 以不同的方式存储内容,因此在 AVI 文件中存储使用 Windows 媒体音频和视频编解码器压缩的内容时,会出现一些困难。

Windows 媒体音频编解码器通过这样一种方式压缩音频内容,如果没有单个样本的时间戳,就无法正确解压缩。 这将在压缩媒体中启用一些优化。 由于 ASF 容器在所有采样中都保留了时间戳,因此音频算法的这一特性一直运行良好。

但是,AVI 文件不保留采样的时间戳。 这意味着在 AVI 文件中存储时,无法正确解压缩 Windows 媒体音频内容。 Windows 媒体视频内容没有此限制,并且可以包含在 AVI 文件中。 若要将 Windows 媒体视频内容编码为具有同步声音的 AVI 文件,必须使用另一个音频编解码器。

将 AVI 文件用作 Windows 媒体容器的另一个问题涉及低比特率视频。 Windows 媒体视频编解码器为低比特率生成视频内容的方式之一是删除重复帧。 如果您要将 Windows 媒体视频内容置于 ASF 文件中,需要设置编码器,以便为重复帧(将 MFPKEY_PRODUCEDUMMYFRAMES 设置为 VARIANT_TRUE)提供虚拟帧,以便每个帧都显示在文件中。 编解码器生成的虚拟帧的大小为 8 字节。 但是,由 AVI 多路复用器写入文件的帧可以大于数百个字节,并用随机数据填充。 以这种方式制作的 AVI 文件仍可播放,但它将比预期大得多。 在为 AVI 文件中存储编码视频时,可以使用更高的比特率来避免此问题。

Windows Media 编解码器