视频编码器的关键技术流程主要涉及以下几个核心步骤,它们共同协作以高效压缩视频数据,同时尽量保持视频质量。下面是对每个关键技术环节及其压缩原理的详细描述:
+-------------------+ +----------------------+ +-----------------------+
| 输入视频帧 | ---> | 分割(宏块划分) | ---> | 预测编码(帧间/帧内) | ---> |
+-------------------+ +----------------------+ +-----------------------+
|
V
+-----------------------------+
| 变换编码(如DCT变换) | --->
+-----------------------------+
|
V
+-----------------------------+
| 量化 | --->
+-----------------------------+
|
V
+-----------------------------+
| 熵编码(如CABAC/CAVLC) | ---> 输出比特流
+-----------------------------+
^
|
|
+-----------------------------+
| 环路滤波(如Deblocking) | <---
+-----------------------------+
关键技术及压缩原理
-
输入视频帧:原始未压缩的视频数据,由一系列连续的图像帧组成。
-
分割(宏块划分):将每一帧划分为多个小块(通常是16x16像素的宏块),便于独立处理。这一步骤有助于后续的预测和变换编码。
-
预测编码(帧间/帧内):
- 帧间预测:通过运动估计识别相邻帧间相似区域的位移(运动矢量),仅编码运动信息和残差,大幅减少冗余。
- 帧内预测:在同一帧内基于周围像素预测当前宏块的内容,再次编码残差,适用于静态区域。
-
变换编码(如DCT变换):将像素域的宏块转换到频率域,常用的是离散余弦变换(DCT)。变换后的系数集中体现了图像的能量分布,大部分系数接近零,易于压缩。
-
量化:对变换后的系数进行有损处理,即除以量化步长并四舍五入。系数的精度降低,大量接近零的小系数直接置零,从而大大减少数据量。
-
熵编码(如CABAC/CAVLC):对量化后的系数和运动信息等进行统计建模,使用自适应二进制算术编码(CABAC)或自适应变长编码(CAVLC),依据概率分配不同长度的编码,进一步压缩数据。
-
环路滤波(如Deblocking):编码后和解码前对边界进行平滑处理,减少因量化引入的块效应,改善视频的视觉质量。虽然这一步增加了处理复杂度,但它提高了主观视觉质量,是可逆的。
整个流程通过减少空间和时间上的冗余,利用人类视觉系统的特性,实现了高效的视频压缩,使得视频数据更适合于存储和传输。
视频编码中的变换确实会导致质量损失。在视频编码的过程中,主要有三种不同类型的质量损失。
- “马赛克效应”:由于帧内或者帧间的残差信号通过线性空域变换,会使得一些亮度较小的交流量在量化阶段被忽略,从而造成高频信息的丢失,导致图像细节丢失进而看上去模糊。
- “边界效应”:由于编码器对视频的操作是在CTU级(即编码树单元级),不同的CTU会因为内容的不同而具有不同的编码参数,这会导致相邻CTU的边界像素值产生较大差异,进而产生边界效应。
- “假边缘效应”:由于帧间预测会对上一帧未滤除完全的边框效应进行预测和运动补偿,因此在当前帧会在前一帧边缘的基础上形成假边缘。
这些质量损失会影响观众的视觉效果,并且随着压缩率的提升,质量会进一步下降。然而,这些损失是在追求更高压缩率以减小视频文件体积,从而更好地存储和传输的过程中不可避免的。不同的视频编码标准采用的压缩算法不同,从而在压缩率和视频质量之间寻求平衡。
在视频编码过程中,有几个关键步骤可能会导致质量损失:
- 量化(Quantization):量化是将连续或大范围的值映射到较小范围或离散的值的过程。在视频编码中,量化被用来减少数据的大小,但这会导致一些信息的丢失,因此是有损的。量化步长越大,丢失的信息就越多,视频质量就越低。
- 变换编码(Transform coding):如离散余弦变换(DCT)或离散波尔特变换(DWT)等,这些变换的目的是将像素空间的数据转换为频率空间的数据。虽然理论上这些变换是可逆的,但在实际应用中,由于量化和舍入误差,这些变换通常是有损的。
- 运动估计(Motion Estimation)和运动补偿(Motion Compensation):在视频编码中,这些技术被用来减少连续帧之间的冗余信息。然而,运动估计的准确性可能会受到限制,导致运动补偿后的图像与原始图像之间存在差异,从而引入质量损失。
- 预测(Prediction):在视频编码中,帧内预测和帧间预测用于减少数据冗余。然而,由于预测模型的限制和预测误差的存在,这些预测过程也会导致质量损失。
- x264编码中的压缩失真:由于x264编码采用了有损压缩算法,因此在压缩视频文件大小的过程中,会丢失一些细节信息,导致视频质量下降。此外,x264编码将视频分成多个块进行压缩,可能导致压缩后的视频出现块状效应。
请注意,虽然这些过程可能会导致质量损失,但现代视频编码标准(如H.264/AVC、H.265/HEVC和H.266/VVC)已经通过优化算法和参数设置来尽量减小这些损失,同时保持较高的压缩效率。