1.音视频编码压缩
1.1 压缩编码的依据
- 空间冗余:在很多图像数据中,像素间在行、列方向上都有很大的相关性,相邻像素的值比较接近,或者完全相同,这种数据冗余叫做空间冗余
- 时间冗余:在视频图像序列中,相邻两帧图像数据有许多共同的地方,这种共同性称为时间冗余,可采用运动补偿算法来去掉冗余信息.
- 视觉冗余:视觉冗余度是相对于人眼的视觉特性而言的,人类视觉系统对图像的敏感性是非均匀和非线性的,并不是图像中的所有变化人眼都能观察到。
- 信息熵冗余:信息熵是指一组数据所携带的信息量,信息熵冗余指数据所携带的信息量少于数据本身而反映出来的数据冗余。
- 结构冗余:在有些图像的纹理区,图像的像素值存在着明显的分布模式。
- 知识冗余:有许多图像的理解与某些先验知识有相当大的相关性。这类规律性的结构可由先验知识和背景知识得到,称此类冗余为知识冗余
1.2 编码器中的关键技术
-
预测:通过帧内预测和帧间预测降低视频图像的空间冗余和时间冗余
-
变换:通过从时域到频域的变换,去除相邻数据之间的相关性,即去除空间冗余
-
量化:通过用更粗糙的数据表示精细的数据来降低编码的数据量,或者通过去除人眼不敏感的信息来降低编码数据量。
-
熵编码:根据待编码数据的概率特性减少编码冗余。
下图展示这几者间的顺序
1.2.1 预测
预测编码类型:
-
空间预测:利用图像空间相邻像素的相关性来预测的方法。
-
帧内预测技术:利用当前编码块周围已经重构出来的像素预测当前块Intra 图像编码(I 帧)。
-
时间预测:利用时间上相邻图像的相关性来预测的方法。
-
帧间预测:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,
MC)。
-
Inter 图像编码:前向预测编码图像(P 帧),双向预测编码图像(B 帧)。
今天主要了解帧间预测编码和帧内预测编码。
- 帧间预测编码:采用预测编码方法消除序列图像在时间上的相关性,传送前后两帧的对应像素之间的差值,这称为帧间预测。
- 帧内预测编码:I 帧图像的每个宏块都采用帧内(Intra)预测编码模式。宏块分成 8x8 或者 4x4 块,对每个块采用帧内预测编码 ,称作Intra8x8或者Intra4x4。
帧内预测有多个预测方向:水平,垂直,左下,右上。帧内预测还有直流(DC)预测
1.2.2 变换
变换编码也是去除冗余的一种最基本的编码方法。不同的是变换编码首先要把压缩的数据变换到某个变换域中(如频域),然后再进行编码。变换域中表现为能量集中在某个区域,可以利用这一特点在不同区域间有效地分配量化比特数,或者去掉那些能量很小的区域,从而达到数据压缩的目的。
1.2.3 量化
量化操作实质上是将连续的模拟信号采样得到的瞬时幅度值映射成离散的数字信号,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。
量化位数:量化位数是每个采样点能够表示的数据范围,常用的有 8 位、12 位和 16 位。
1.2.4 熵编码
为了进一步压缩数据,对 DPCM 编码后的直流系数 DC 和 RLE 编码后的交流系数 AC 采用熵编码。在 JPEG 有损压缩算法中,使用哈夫曼编码器的理由是可以使用很简单的查表方法进行编码。
1.3 GOP
GOP(Group Of Pictures, 图像组)是一组连续的图像,由一个 I 帧和多个 B/P 帧组成,是编解码器存取的基本单位。
GOP 结构常用的两个参数 M 和 N,M 指定 GOP 中首个 P 帧和 I 帧之间的距离,N 指定一两个I帧直接的距离。
GOP有两种类型,分别是闭合式GOP和开放式GOP。
闭合式 GOP:闭合式 GOP 只需要参考本 GOP 内的图像即可,不需参考前后 GOP 的数据。这种模式决定了,闭合式 GOP 的显示顺序总是以 I 帧开始以 P 帧结束。
开放式 GOP :开放式 GOP 中的 B 帧解码时可能要用到其前一个 GOP 或后一个 GOP 的某些帧。码流里面包含 B 帧的时候才会出现开放式 GOP。
开放式 GOP 和闭合式 GOP 中 I 帧、P 帧、B 帧的依赖关系如下图所示:
1.4 DTS和PTS
DTS(Decoding Time Stamp, 解码时间戳),表示 packet 的解码时间。
PTS(Presentation Time Stamp, 显示时间戳),表示packet解码后数据的显示时间。
音频中 DTS 和 PTS 是相同的,视频中由于 B 帧需要双向预测,B 帧依赖于其前后的帧,所以含有B帧的视频解码顺序和显示顺序不同。
1.5 视频可压缩的冗余信息
- 空间冗余:图像相邻像素之间有较强的相关性
- 时间冗余:视频序列的相邻图像之间内容相似
- 编码冗余:不同像素值出现的概率不同
- 视觉冗余:人的视觉系统对某些细节不敏感
- 知识冗余:规律性的结构可由先验知识和背景知识得到
主要还是去除空间冗余和空间冗余。
2.视频编码
视频编码:通过特定的压缩技术,将某个视频格式的文件转换为另一种视频格式。视频数据在时域和空域层面都有极强的相关性,这也表示有大量的时域信息和空域冗余信息,压缩技术就是去掉数据中的冗余信息。
2.1 去除时域冗余信息
- 运动补偿:通过先前的局部图像来预测、补偿当前的局部图像,可有效减少帧序列冗余信息。
- 运动表示:不同区域的图像使用不同的运动矢量来描述运动信息,运动矢量通过熵编码进行压缩(熵编码在编码过程中不会丢失信息)。
- 运动估计:从视频序列中抽取运动信息。
通用的压缩标准使用基于块的运动估计和运动补偿。
2.2 去除空间冗余信息
- 变换编码:将空域信号变换到另一正交矢量空间,使相关性下降,数据冗余度减小。
- 量化编码:对变换编码产生的变换系数进行量化,控制编码器的输出位率。
- 熵编码:对变换、量化后得到的系数和运动信息,进行进一步的无损压缩。
2.3 编解码器的概念
- 编码器(Encoder):压缩信号的设备或程序。
- 解码器(Decoder):解压缩信号的设备或程序。
- 编解码器(Codec): 指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序。
2.3.1 编解码中的关键流程
2.4 块与宏块
如果总是按照像素来算,数据量会比较大,所以,一般都是把图像切割为不同的“块(Block)”或“宏块(MacroBlock)”,对它们进行计算。一个宏块一般为 16 像素×16 像素。
2.5 I帧P帧B帧
- 对 I 帧(帧内编码)的处理,是采用帧内编码方式,只利用本帧图像内的空间相关性。
- 对 P 帧(帧间编码)的处理,采用帧间编码(前向运动估计),同时利用空间和时间上的相关性。
简单来说,采用运动补偿(motion compensation)算法来去掉冗余信息
下图为I帧的编码过程: