减少视频编码中的空间冗余,就像把一张重复图案的壁纸压缩成说明书——找出重复规律,只记一次,其余靠复制!具体方法如下:
一、帧内预测:用邻居猜你的颜色
-
原理:
同一帧内,利用周围像素预测当前块的颜色,只存储预测误差。- 举个栗子:
如果当前块右边和左边都是蓝色,预测它也是蓝色,只记录实际颜色与蓝色的微小差异。
- 举个栗子:
-
预测方向:
- 水平预测:假设颜色从左到右渐变(如水平条纹)。
- 垂直预测:假设颜色从上到下渐变(如垂直条纹)。
- DC预测:取周围像素平均值(适合纯色块)。
-
效果:
- 纯色区域(如蓝天)预测误差接近0,大幅压缩数据量。
- 复杂纹理(如树叶)预测误差较大,但后续步骤进一步压缩。
二、变换编码:把图像变「数学公式」
-
DCT(离散余弦变换) :
- 将图像块(如8x8像素)转换为频率系数。
- 低频:大块颜色(如背景)→ 重要,保留。
- 高频:细节和边缘(如头发)→ 次要,可丢弃。
-
能量集中:
- 自然图像中,大部分能量集中在低频,高频系数趋近于0。
- 举个栗子:
一张人脸图,DCT后大部分系数集中在左上角(低频),右下角高频系数接近0。
-
压缩方式:
- 对高频系数进行更激进的量化(缩小数值或归零)。
三、量化:选择性「模糊」细节
-
量化表控制:
- 对每个频率系数设定不同的“压缩力度”(量化步长)。
- 低频量化步长小:保留更多信息(如肤色渐变)。
- 高频量化步长大:丢弃更多细节(如噪点)。
-
QP(量化参数)调节:
- QP值越大,量化越狠,空间冗余减少越多,但画质越低。
- 动态调整:简单区域用高QP(如墙面),复杂区域用低QP(如人脸)。
四、熵编码:用「缩写术」压缩数据
-
哈夫曼编码:
- 高频出现的数值用短码(如0),低频用长码(如1110)。
- 举个栗子:
数据序列0,0,0,5,5,100→ 编码为0:00 5:01 100:10→ 二进制流0000010110。
-
算术编码:
- 更高效地将整个数据流映射为一个0~1之间的分数,逼近理论压缩极限。
五、实战技巧(以H.264为例)
-
选择高效预测模式:
- 对平滑区域用 DC预测,对纹理区域用 角度预测。
-
调整QP值平衡质量与压缩:
- 高清视频:QP=18~24
- 普通视频:QP=24~30
-
开启自适应量化(AQ) :
- 让编码器自动根据区域复杂度调整量化强度。
六、总结口诀
“空间冗余哪里找?帧内预测来帮忙。
DCT变换能量聚,量化砍掉高频光。
熵编码用短符号,数据瘦身效果强!”