视频压缩技术的系统考虑
| 简单 2d fir 滤波器用于平滑参考帧中的量化效应。必须同时在编码器及解码器中精确地对每个比特应用上述滤波。 mpeg-1 mpeg-1[3] 是 iso 开发的第一个视频压缩算法。主要应用是数字媒体上动态图像与音频的存储与检索,如速率为 1.15mbps、采用 sif 分辨率(352(240 - 29.97fps 或者 352(288 - 25 fps)的vcd。mpeg-1 与 h.261 相似,不过编码器一般需要更高的性能,以便支持电影内容的较高运动性而不是典型的可视电话功能。 与 h.261 相比,mpeg1 允许采用 b 帧。另外它还采用自适应感知量化,也就是说,对每个频段采用单独的量化比例因子(或等步长),以便优化人们的视觉感受。mpeg-1 仅支持逐行视频,因此新标准——mpeg2 已经开始做出努力,同时支持分辨率及比特率更高的逐行与隔行视频。 mpeg-2/h.262 mpeg-2[4] 专门针对数字电视而开发,很快成为了迄今最成功的视频压缩标准。mpeg-2 既能够满足标准逐行视频的需求(其中视频序列由一系列按一定时间间隔采集的帧构成),又能够满足电视领域常用的隔行视频的需求。隔行视频交替采集及显示图像中两组交替的像素(每组称为一个场)。这种方式尤其适合电视显示器的物理特性。mpeg2 支持标准的电视分辨率,其中包括:针对美国和日本采用的 ntsc 制式隔行 720(480 分辨率,每秒 60 场,以及欧洲和其他国家采用的pal 制式的 720(576 分辨率,每秒 50 场。 mpeg-2 建立在 mpeg-1 基础之上,并具备扩展功能,能支持隔行视频及更宽的运动补偿范围。由于高分辨率视频是非常重要的应用,因此 mpeg-2 支持的搜索范围远远大于 mpeg-1。与之前的标准相比,它显著提高了运动估计的性能要求,并充分利用更宽搜索范围与更高分辨率优势的编码器需要比 h.261 和 mpeg-1 高得多的处理能力。mpeg2 中的隔行编码工具包含优化运动补偿的能力,同时支持基于场和基于帧的预测,而且同时支持基于场和基于帧的 dct/idct。mpeg-2 在 30:1 左右的压缩比时运行良好。mpeg-2 在 4-8mbps 时达到的质量适合消费类视频应用,因此它很快在许多应用中得到普及,如:数字卫星电视、数字有线电视、dvd 以及后来的高清电视等。 另外,mpeg-2 增加了分级视频编码工具,以支持多层视频编码,即:时域分级、空域分级、snr 分级以及数据分割。尽管 mpeg-2 中针对分级视频应用定义了相关类别 (profile),不过支持单层编码的主类 (main profile) 是当今大众市场中得到广泛应用的唯一 mpeg-2 类。mpeg-2 通常称为 mpeg-2 主类。 mpeg-2 解码最初对于通用处理器及 dsp 具有很高的处理要求。优化的固定功能 mpeg-2 解码器开发已问世,由于使用量较高,成本已逐渐降低。mpeg2 证明低成本芯片解决方案的供应是视频编解码标准成功和普及的关键。 h.263 h.263[5] 在 h.261 之后得到开发,主要是为了以更低的比特率实现更高的质量。其主要目标之一是基于普通 28.8kbps 电话调制解调器的视频。目标分辨率是 sqcif (128(96)~cif (352(288)。其基本原理与 h.261 大同小异。 h.263 的运动矢量在两个方向上允许是 1/2 的倍数(“半像素”),参考图像以数字方式内插到更高的分辨率。这种方法可以提高 mc 精度及压缩比。mv 可采用更大的范围。为不同方案提供许多新的选项,包括: * 4 个运动矢量——每个块采用一个运动矢量,而非整个 mb 采用单个运动矢量。 * 3d vlc:huffman 编码——将块结束 (eob) 指示符与每个运行级别对结合在一起。这种功能主要用于低比特率,这时大多时候只有一、两个编码系数。 尽管存在这些功能,但是仍然很难在普通电话线上实现理想的视频质量,而且目前基于标准调制解调器的可视电话仍然是一个难题。不过,由于 h.263 一般情况下可提供优于 h.261 的效率,它成为了电视会议首选的算法,但是,为了兼容旧系统,仍然需要支持 h.261。h.263 逐渐发展成为了 h.263+,其增加了可选的附件,为提高压缩并实现分组网的鲁棒性提供支持。h.263 及其附件构成了 mpeg-4 中许多编码工具的核心。 mpeg-4 mpeg-4[6] 由 iso 提出,以延续 mpeg-2 的成功。一些早期的目标包括:提高容错能力以支持无线网、对低比特率应用进行更好的支持、实现各种新工具以支持图形对象及视频之间的融合。大部分图形功能并未在产品中受到重视,相关实施主要集中在改善低比特率压缩及提高容错性上。. mpeg-4 简化类 (sp) 以h.263为基础,为改善压缩增加了新的工具,包括: * 无限制的运动矢量:支持对象部分超出帧边界时的预测。 * 可变块大小运动补偿:可以在 16(16 或 8(8 粒度下进行运动补偿。 * 上下文自适应帧内 dct dc/ac 预测:可以通过当前块的左右相邻块预测 dc/ac dct 系数。 * 扩展量化 ac 系数的动态范围,支持高清视频:从 h.263 的 [-127:127] 到 [-2047, 2047]。 增加了容错功能,以支持丢包情况下的恢复,包括: * 片断重同步 (slice resynchronization):在图像内建立片断 (slice),以便在出现错误后更快速的进行重新同步。与 mpeg-2 数据包大小不同,mpeg4 数据包大小与用于描述 mb 的比特数量脱离了联系。因此,不管每个 mb 的信息量多少,都可以在位流中按相同间隔进行重新同步。 * 数据分割:这种模式允许利用唯一的运动边界标记将视频数据包中的数据分割成运动部分和 dct 数据部分。这样就可以实现对运动矢量数据更严格的检查。如果出现错误,我们可以更清楚地了解错误之处,从而避免在发现错误情况下抛弃所有运动数据。 * 可逆 vlc:vlc 编码表允许后向及前向解码。在遇到错误时,可以在下一个slice进行同步,或者开始编码并且返回到出现错误之处。 * 新预测 (newpred):主要用于在实时应用中实现快速错误恢复,这些应用中的解码器在出现丢包情况下采用逆向通道向解码器请求补充信息。 mpeg-4 高级简化类 (asp) 以简化类为基础,增加了与 mpeg-2 类似的 b 帧及隔行工具(用于level 4 及以上级别)。另外它还增加了四分之一像素运动补偿及用于全局运动补偿的选项。mpeg-4 高级简化类比简化类的处理性能要求更高,而且复杂性与编码效率都高于 mpeg-2。 mpeg-4 最初用于因特网数据流,例如,已经被 apple 的 quicktime 播放器采用。mpeg-4 简化类目前在移动数据流中得到广泛应用。mpeg-4 asp 是已经流行的专有 divx 编解码器的基石。 工具与压缩增益 当我们查看 h.261、mpeg1、mpeg2 与 h.263 视频编解码技术中引入的功能时,明显可以发现几种基本技巧提供了大部分压缩增益。图 4 说明这些技巧及其相关效果。与 4 个运动矢量以及四分之一像素运动补偿等工具相比,运动补偿(整数像素与半像素)的效果显然更为突出。 图 4:基本技巧的效果:1) 无 mc;2) 增加 skip 模式构成 cr 编码器;3) 仅允许零 mv;4) 允许整数像素 mc;5) 允许半像素 mc;6) 允许 4-mv;7) 允许四分之一像素mc。如欲了解有关详细说明,敬请参见 [7]。 7. h.264/ mpeg4-avc 视频编码技术在过去几年最重要的发展之一是由 itu 和 iso/iec 的联合视频小组 (jvt) 开发了 h.264/mpeg-4 avc[8] 标准。在发展过程中,业界为这种新标准取了许多不同的名称。itu 在 1997 年开始利用重要的新编码工具处理 h.26l(长期),结果令人鼓舞,于是 iso 决定联手 itu 组建 jvt 并采用一个通用的标准。因此,大家有时会听到有人将这项标准称为 jvt,尽管它并非正式名称。itu 在 2003 年 5 月批准了新的 h.264 标准。iso 在 2003 年 10 月以 mpeg-4 part 10、高级视频编码或 avc 的名称批准了该标准。 h.264/avc 在压缩效率方面取得了巨大突破,一般情况下达到 mpeg-2 及 mpeg-4 简化类压缩效率的大约 2 倍。在 jvt 进行的正式测试中 [9],h.264 在 85 个测试案例中有 78% 的案例实现 1.5 倍以上的编码效率提高,77% 的案例中达到 2 倍以上,部分案例甚至高达 4 倍。h.264 实现的改进创造了新的市场机遇,如: * 600kbps 的 vhs 品质视频。可以通过 adsl 线路实现视频点播。 * 高清晰电影无需新的激光头即可适应普通 dvd。 h.264 标准化时支持三个类别:基本类、主类及扩展类。后来一项称为高保真范围扩展 (frext) 的修订引入了称为高级类的 4 个附加类。在初期主要是基本类和主类引起了大家的兴趣。基本类降低了计算及系统内存需求,而且针对低时延进行了优化。由于 b 帧的内在时延以及 cabac 的计算复杂性,因此它不包括这两者。基本类非常适合可视电话应用以及其他需要低成本实时编码的应用。 主类提供的压缩效率最高,但其要求的处理能力也比基本类高许多,因此使其难以用于低成本实时编码和低时延应用。广播与内容存储应用对主类最感兴趣,它们是为了尽可能以最低的比特率获得最高的视频质量。 尽管 h.264 采用与旧标准相同的主要编码功能,不过它还具有许多与旧标准不同的新功能,它们一起实现了编码效率的提高。图 5 的编码器框图总结了其主要差别,概述如下: 帧内预测与编码:h.264 采用空域帧内预测技术来预测相邻块邻近像素的 intra-mb 中的像素。它对预测残差信号和预测模式进行编码,而不是编码块中的实际像素。这样可以显著提高帧内编码效率。 帧间预测与编码:h.264 中的帧间编码采用了旧标准的主要功能,同时也增加了灵活性及可操作性,包括适用于多种功能的几种块大小选项,如:运动补偿、四分之一像素运动补偿、多参考帧、通用 (generalized) 双向预测和自适应环路去块。 可变矢量块大小:允许采用不同块大小执行运动补偿。可以为小至 4(4 的块传输单个运动矢量,因此在双向预测情况下可以为单个 mb 传输多达 32 个运动矢量。另外还支持 16(8、8(16、8(8、8(4 和 4(8 的块大小。降低块大小可以提高运动细节的处理能力,因而提高主观质量感受,包括消除较大的块化失真。 四分之一像素运动估计:通过允许半像素和四分之一像素运动矢量分辨率可以改善运动补偿。 多参考帧预测:16 个不同的参考帧可以用于帧间编码,从而可以改善视频质量的主观感受并提高编码效率。提供多个参考帧还有助于提高 h.264 位流的容错能力。值得注意的是,这种特性会增加编码器与解码器的内存需求,因为必须在内存中保存多个参考帧。 自适应环路去块滤波器:h.264 采用一种自适应解块滤波器,它会在预测回路内 对水平和垂直区块边缘进行处理,用于消除块预测误差造成的失真。这种滤波通常是基于 4(4 块边界为运算基础,其中边界各边的 3 个像素可通过 4 级滤波器进行更新。 整数变换:采用 dct 的早期标准必须为逆变换的固点实施来定义舍入误差的容差范围。编码器与解码器之间的 idct 精度失配造成的漂移是质量损失的根源。h.264 利用整数 4(4 空域变换解决了这一问题——这种变换是 dct 的近似值。4(4 的小区块还有助于减少阻塞与振铃失真。 量化与变换系数扫描:变换系数通过标量量化方式得到量化,不产生加大的死区。与之前的标准类似,每个 mb 都可选择不同的量化步长,不过步长 |
