视频压缩原理:视频压缩通过减少和去除冗余视频数据的方式,达到有效发送和存储数字视频文件的目的。
一段时长1分钟的视频,假设帧速率是60,那么这段60秒的视频共有30*60=3600帧,其中每一帧都是一张图,假设每张图片大小是1M,那如果按照传统图片成像的概念去处理的话,视频大小是3600M。那短短1分钟的视频,大小就有3.6G。显然,这有处理空间,因为有些连续的帧画面并不复杂,甚至部分画面完全相同,这就可以通过一些方法,将连续的相似帧画面进行处理、合并,达到压缩优化视频大小的作用。
在压缩过程中,需要应用压缩算法对源视频进行压缩以创建压缩文件,以便进行传输和存储。
要想播放压缩文件,则需要应用相反的解压缩算法对视频进行还原,还原后的视频内容与原始的源视频内容几乎完全相同。压缩、发送、解压缩和显示文件所需的时间称为延时。在相同处理能力下,压缩算法越高级,延时就越长。
视频编解码器(编码器/解码器)是指两个协同运行的压缩-解压算法。使用不同标准的视频编解码器通常彼此之间互不兼容;也就是说,使用一种标准进行压缩的视频内容无法使用另外一种标准进行解压缩。
例如,MPEG-4Part2解码器就不能与H.264编码器协同运行。这是因为一种算法无法正确地对另外一个算法的输出信号进行解码,然而我们可以在同一软件或硬件中使用多种不同的算法,以支持对多种格式的文件进行压缩。 由于不同的视频压缩标准会使用不同的方法来减少数据量,因此压缩结果在比特率、质量和延时方面也各不相同。
此外,由于编码器的设计者可能会选择使用某个标准所定义的不同工具集,因此,即使是使用相同压缩标准的编码器之间,其压缩结果也可能会存在差异。
不过,只要编码器的输出信号符合标准的格式以及解码器的要求,就可以采用不同的实施方式。这是非常有利的,因为不同的实施方式可实现不同的目标,满足不同的预算要求。对用于管理光介质存储的非实时专业软件编码器来说,应该能够比用于视频会议的集成在手持设备中的实时硬件编码器提供质量更高的编码视频。因此,即使是某个指定的标准也无法保证提供指定的比特率或质量。
而且,如果不事先确定实施方式,一个标准就无法与其它标准进行正确的性能对比,甚至也无法与同一标准的其它实施方式进行正确的性能对比。 与编码器不同,解码器必须实施某个标准的所有必需部分,才能对符合标准的比特流进行解码。这是因为标准中明确规定了解压缩算法应如何对压缩视频的每个比特进行还原。
1.视频信号的冗余信息
数字化的视频信号能进行压缩的主要依据两个基本条件:
数据冗余:空间冗余、时间冗余、结构冗余、信息熵冗余等,图像的各个像素之间存在着很强的相关性,消除这些冗余不会导致信息损失,属于无损压缩。
视觉冗余:人眼的一些特性,例如亮度分辨阈值、视觉阈值、对亮度和色度的敏感度不同,是的编码的时候引入适量的误差,也不会被察觉出来。可以利用人眼的这一特性,以一定客观失真换取数据压缩。这种压缩属于有损压缩。
数字视频信号的压缩正是基于上述两种条件,使得视频数据量得以极大的压缩,有利于传输和存储。
2.压缩编码方法
一般的数字视频压缩编码方法都是混合编码,即将变换编码,运动估计和运动补偿,以及熵编码三种方式相结合来进行压缩编码。
变换编码:消去除图像的帧内冗余
运动估计和运动补偿:去除图像的帧间冗余
熵编码:进一步提高压缩的效率
1. 变换编码
变换编码的作用是将空间域描述的图像信号变换到频率域,然后对变换后的系数进行编码处理。一般来说,图像在空间上具有较强的相关性,变换到频率域可以实现去相关和能量集中。
常用的正交变换有离散傅里叶变换,离散余弦变换等等。数字视频压缩过程中应用广泛的是离散余弦变换。
2. 熵编码
熵编码是因编码后的平均码长接近信源熵值而得名。熵编码多用可变字长编码(VLC,Variable Length Coding)实现。其基本原理是对信源中出现概率大的符号赋予短码,对于出现概率小的符号赋予长码,从而在统计上获得较短的平均码长。可变字长编码通常有霍夫曼编码、算术编码、游程编码等。其中游程编码是一种十分简单的压缩方法,它的压缩效率不高,但编码、解码速度快,仍被得到广泛的应用,特别在变换编码之后使用游程编码,有很好的效果。
3. 运动估计和运动补偿
运动估计(Motion Estimation)和运动补偿(Motion Compensation)是消除图像序列时间方向相关性的有效手段。上文介绍的DCT变换、量化、熵编码的方法是在一帧图像的基础上进行,通过这些方法可以消除图像内部各像素间在空间上的相关性。实际上图像信号除了空间上的相关性之外,还有时间上的相关性。例如对于像新闻联播这种背景静止,画面主体运动较小的数字视频,每一幅画面之间的区别很小,画面之间的相关性很大。对于这种情况我们没有必要对每一帧图像单独进行编码,而是可以只对相邻视频帧中变化的部分进行编码,从而进一步减小数据量,这方面的工作是由运动估计和运动补偿来实现的。
运动估计技术一般将当前的输入图像分割成若干彼此不相重叠的小图像子块,例如一帧图像的大小为1280×720,首先将其以网格状的形式分成40×45个尺寸为16×16的彼此没有重叠的图像块,然后在前一图像或者后一个图像某个搜索窗口的范围内为每一个图像块寻找一个与之最为相似的图像块。这个搜寻的过程叫做运动估计。通过计算最相似的图像块与该图像块之间的位置信息,可以得到一个运动矢量。这样在编码过程中就可以将当前图像中的块与参考图像运动矢量所指向的最相似的图像块相减,得到一个残差图像块,由于残差图像块中的每个像素值很小,所以在压缩编码中可以获得更高的压缩比。这个相减过程叫运动补偿。
由于编码过程中需要使用参考图像来进行运动估计和运动补偿,因此参考图像的选择显得很重要。一般情况下编码器的将输入的每一帧图像根据其参考图像的不同分成3种不同的类型:I(Intra)帧、B(Bidirection prediction)帧、P(Prediction)帧。
如图所示,I帧只使用本帧内的数据进行编码,在编码过程中它不需要进行运动估计和运动补偿。显然,由于I帧没有消除时间方向的相关性,所以压缩比相对不高。P帧在编码过程中使用一个前面的I帧或P帧作为参考图像进行运动补偿,实际上是对当前图像与参考图像的差值进行编码。B帧的编码方式与P帧相似,惟一不同的地方是在编码过程中它要使用一个前面的I帧或P帧和一个后面的I帧或P帧进行预测。由此可见,每一个P帧的编码需要利用一帧图像作为参考图像,而B帧则需要两帧图像作为参考。相比之下,B帧比P帧拥有更高的压缩比。
4. 混合编码
在实际应用中,这几种方法常常是不可分离的,通常将它们结合起来以达到最好的压缩效果。下面是混合编码(即变换编码+ 运动估计和运动补偿+ 熵编码)模型,该模型普遍适用于MPEG1,MPEG2,H.264等标准中。