H.264编解码器中,量化参数QP和量化步长Qstep的关系:
量化步长Qstep共有52个值。(对于亮度编码而言)
量化参数QP是量化步长Qstep的序号,取值0~51。
QP取最小值0 时,表示量化最精细;相反,QP取最大值51时,表示量化是最粗糙的。
Qstep随着QP的增加而增加,QP每增加6,Qstep增加一倍。
对于色度编码,QP的最大值是39。
RT.假设源和输出都是8bit.
QP |
Qstep |
0 |
0.625 |
1 |
0.6875 |
2 |
0.8125 |
3 |
0.875 |
4 |
1 |
5 |
1.125 |
6 |
1.25 |
7 |
1.375 |
8 |
1.625 |
9 |
1.75 |
10 |
2 |
11 |
2.25 |
12 |
2.5 |
13 |
2.75 |
14 |
3.25 |
15 |
3.5 |
16 |
4 |
17 |
4.5 |
18 |
5 |
19 |
5.5 |
20 |
6.5 |
21 |
7 |
22 |
8 |
23 |
9 |
24 |
10 |
25 |
11 |
26 |
13 |
27 |
14 |
28 |
16 |
29 |
18 |
30 |
20 |
31 |
22 |
32 |
26 |
33 |
28 |
34 |
32 |
35 |
36 |
36 |
40 |
37 |
44 |
38 |
52 |
39 |
56 |
40 |
64 |
41 |
72 |
42 |
80 |
43 |
88 |
44 |
104 |
45 |
112 |
46 |
128 |
47 |
144 |
48 |
160 |
49 |
176 |
50 |
208 |
51 |
224 |
對於YUV 4:2:0的顏色空間,luma分量的qp範圍為0-51,chroma分量的qp範圍為0-39
其中,qp就是x264 –qp中的那個qp. quantization
parameter,Qstep是量化步長,即:
Zij=round(Wij/Qstep)
其中Wij代表一個宏塊(macroblock)經DCT變換后的係數.這個宏塊在h264標準鐘可以是16×16,16×8,8×16,8×8,8×4,4×8,4×4等大小,其來源可以是I幀或者P/B幀的殘差值等等.
這裡同樣和JPEG標準不同,每個宏塊採用相同的量化步長量化.
QP和ln(Qstep)具有線性相關性,每當QP值增加6,Qstep便增加一倍.
因此當raw源中每當某分量每像素平均比特數增加一,最大QP值便可以增加6;反之如果減少一,最大QP值便應該減少6.這一點在x264源碼中也有體現.
因此10bit視頻的luma(亮度)分量其最大量化值就是51+2*6=63.
此外也可以看到當x264 –qp 0時並不是嚴格意義上的無損編碼,只不過是0.625的量化步長幾乎難以產生量化噪聲,因此可以近似看成無損編碼.
而x264的crf和2pass碼率控制模式就是通過marco-block tree等工具,採用一定的預測算法,考慮人眼對不同內容的敏感程度,來確定不同宏塊/幀的量化值,從而完成最終成品的碼率控制的
变换与量化
1、
变换量化的过程如图3-1所示:
图3-1
2、 H.264 对4×4 的图像块(亮度块或Cr、Cb 色度块)进行操作,则相应的4×4DCT 变换矩阵
A
为:
,则:
H.264 对4×4DCT 中的
A
进行了改造,采用整数DCT 技术,有效地减少计算量,同时不损失图像准确。上式可等效为:
其中,d=c/b(≈0.414)。符号“?”表示(
CXC
T)结果中的每个元素乘以矩阵
E
中对应位置上的系数
值的运算。为了简化计算,取d 为0.5。同时又要保持变换的正交性,对b 进行修正,取b=√(2/5) 。对矩阵
C
中的第2 行和第4 行,以及矩阵
C
T 中的第2 列和第4 列元素乘以2,相应地改造矩阵
E
为
E
f,以保持原式成立,得到:
H.264 将DCT 中“?
E
f”运算的乘法融合到后面的量化过程中,
实际的DCT 输出为:
3、
量化:
4、 在H.264 中,量化步长Qstep 共有52 个值。如表3-1 所示。其中QP 是量化参数,是量化步长的序号,QP 每增加
6,Qstep 增加一倍。
表3-1
5、 量化步长是实际用来进行量化的值,量化参数只是量化步长的别名。
6、 亮度QP 的最大值是51,而色度QP 的最大值是39。
7、 H.264 量化过程还要同时完成DCT 变换中“?
E
f”乘法运算,它可以表述为:
其中,Wij 是矩阵
W
中的转换系数,PF 是矩阵
E
f 中的元素,根据样本点在图像块中的位置(i, j)取值:
利用量化步长随量化参数每增加6 而增加一倍的性质,可以进一步简化计算。
设:
qbits = 15 + floor(QP/6)。
令
。于是:
。
这样,MF 可以取整数。表3-2 只列出对应QP 值为0 到5 的MF 值,对于QP 值大于5 的情况,只是qbits 值随QP 值每增加6 而增加1,而对应的MF 值不变。这样,量化过程则为整数运算,并且可以避免使用除法。
表3-2
具体量化过程的运算为:
其中sign()为符号函数;
f 为偏移量,它的作用是改善恢复图像的视觉效果例如,对帧内预测图像块f 取2
qbits
/3,对帧间预测图像块f 取2
qbits
/6
。
8、 如果当前处理的图像宏块是色度块或帧内16×16 预测模式的亮度块,则需要将其中各图像块的DCT 变换系数矩阵
W
中的直流分量或直流系数W00 按对应图像块顺序排序,组成新的矩阵
W
D,再对
W
D 进行Hadamard 变换及量化。
9、 对亮度块
W
D 的Hadamard 变换为:
其中,
Y
D 是Hadamard 变换结果。接着要对
Y
D 再进行量化输出:
10、对各色度块
W
D 的Hadamard 变换为:
其中,
Y
D 是Hadamard 变换结果。接着要对
Y
D 再进行量化输出:
11、zig-zag扫描顺序如下图3-1:
帧模式
场模式
图3-1
cbp是什么参数?
12、cbp一共6bit,高2bit表示cbpc (2:cb、cr中至少一个4×4块的AC系不全为0;1:cb、cr中至少一个2×2的DC系数不全为0;0:所有色度系数全0)。低4bit分别表示4个8×8亮度块,其中从最低一位开始的4位分别对应00,10,01,11位置的8*8亮度块。如果某位为1,表示该对应8*8块的4个4*4块中至少有一个的系数不全为0。
13、level:幅值;run: 每个非零系数前面 0 的个数。