x264 碼率控制

1. 概述

在視頻編解碼過程中,我們一直在追求更低的碼率和更高的編碼質量。更低的碼率意味着更低的帶寬佔用和更小的文件體積,但往往意味着更低的視頻質量。所以我們會根據應用場景和視頻複雜度,選擇恰當的視頻編碼碼率以及其他控制參數。對於 x264 而言,共有三種碼率控制模式,接下來進行介紹。

2. 碼率控制的三種模式

2.1 恆定量化參數模式

X264_RC_CQP constant quantizer parameter

取值範圍:[0, 51],0 = lossless

最簡單的碼率控制方式,每幀圖像都按照這一個特定的 QP 來編碼,每幀編碼後的數據量有多大是未知的。參數 i_qp_constant 設置的是 P 幀的 QP,I、B 幀的 QP 根據 f_ip_factor,f_pb_factor 計算得到。

每種幀類型的量化參數設置位於 x264/encoder/encoder.c 中,具體代碼:
在這裏插入圖片描述X264 YUV420 格式 8 比特採樣的 QP 範圍是 [0, 51],QP 值越小,編碼視覺質量越好。0 代表無損編碼。

在研究編碼算法時,一般會選用 CQP 方法,設定 QP 值爲 24,28,32,40 等,編碼得到 RD 曲線,然後比較算法優劣。

相同視覺質量時,CQP 編碼輸出的文件會比 CRF 模式更大,一般而言 CRF 都能替代 CQP 方法,不過 CQP 方法因爲完全不需要預測所以運行更加快。

幀的重要級別:IDR 幀 > I 幀 > P 幀 > 做參考的 B 幀 > 不做參考的 B 幀。QP 值可以隨着幀的重要級別降低而增大。

i_qp_min
默認值:0. 定義 x264 可以使用的最小量化參數值。量化參數值越小,輸出的視頻質量越好。
當 QP 小於某一個值後,編碼輸出的宏塊質量與原始塊極爲相近,這時沒有必要繼續降低 QP。
如果開啓了自適應量化器(默認開啓),不建議提高 i_qp_min 的值,因爲這樣會降低平滑背景區域的視覺質量。

i_qp_max
默認值:51. 定義 x264 可以使用的最大量化值。默認值 51 是 h264 規格中可供使用的最大值。

i_qp_min 和 i_qp_max 在 CRF 和 ABR 方法下是有效的,將 i_qp_max 設置過小,可能導致 ABR 碼率控制失敗,不建議調整這個參數。

i_qp_step
默認值:4. 設置兩幀間量化值的最大變化幅度。
幀間 QP 變化,幀內宏塊 QP 不變,輸出碼率未知,各幀輸出的視覺質量有變化。

2.2 恆定碼率係數模式

X264_RC_CRF constant rate-factor

這種控制模式在控制所有視頻幀的質量上有很好的效果,但是無法有效地控制碼率。

這種碼率控制模式是 x264 採用的默認碼率控制模式,f_rf_constant 默認值取 23。
在這裏插入圖片描述
CRF 可以提供和 CQP 一樣的視覺質量,但是文件更小,CRF 通過降低那些“less important”的幀的質量來達到這個目的。

“less important”指那些過於耗費碼率但是又難以用肉眼察覺的幀,比如複雜或者告訴運行的場景,省下來的碼率分配給其他更有效的幀。

在 x264 編碼器內部 CRF 和 ABR 採用了相同的調整策略,只是它不遵循一個特定的輸出碼率。

它也是通過改變不同重要級別幀(I、P、B),以及幀內不同宏塊類型(高速運動、複雜紋理、平坦區域)的 QP 值,以此來調整輸出的視覺質量。

和 QP 的範圍一樣 RF 的範圍也是 [0, 51]。其中 0 對應無損模式, 51 質量最差。RF 值加 6,輸出碼率大概減少一半。

從主觀上講,18~28 是一個合理的範圍, 18 往往被認爲從視覺上看是近似無損的。
幀間 RF 變化,幀內宏塊 RF 變化,輸出碼率未知,各幀輸出視覺質量基本恆定。

2.3 恆定平均碼率模式

X264_RC_ABR average bitrate

參數設置的量綱爲 kilobits/sec。X264 中的 1k 是 1000,而不是 1024.

恆定比特率模式意味着最終文件的大小是可知的,但是目標文件的質量不可知。X264 會試圖讓最終文件的整體碼率與給定的碼率相等。

與 ABR 模式相應的有 CBR 和 VBR 。
CBR 編碼碼率基本保持恆定,有利於流式播放。
CBR 的缺點在於複雜場景碼率不夠用,簡單場景碼率浪費,因此編碼內容的視覺質量不穩定。通常在比較低的比特率下,這種質量變化會更加明顯。

VBR 爲簡單場景分配較大的 QP,爲複雜場景分配較小的 QP,得到基本穩定的輸出視覺質量。
相較於 CBR ,在同樣文件大小的條件下,VBR 的輸出結果要比 CBR 好很多,有利於媒體的下載和本地存儲。
VBR 的缺點在於輸出碼流的大小不可控,同時對於複雜度恆定的內容沒什麼優勢。

ABR 編碼爲簡單場景分配較少的比特,從而留出足夠的比特用於生成高質量的複雜部分。使得有限的比特數能夠在不同的場景間合理分配。這一點類似於 VBR。
同時 ABR 分配碼率,使得在一定時間內,平均碼率趨近於目標碼率,這樣可以控制輸出文件的大小。這一點類似於 CBR。
因此,可以認爲 ABR 是一種 VBR 和 CBR 的折中方案。

對比結果

模式 視覺質量穩定性 即時輸出碼率 輸出文件大小
CBR 不穩定 恆定 可控
VBR 穩定 變化 不可控
ABR 基本穩定 變化 可控

2.4 使用建議

在這裏插入圖片描述
CQP 模式是把某個量化值作爲目標,ABR 是把某個文件大小作爲目標,而 CRF 則是把某個輸出“視覺質量”作爲目標。

3. 小結

碼率控制屬於視頻編碼的核心內容之一,簡單的看幾篇博客目前還只是停留在比較粗略的認識上,後續隨着對視頻編碼理解的加深也會對碼率控制有更多的認識。

參考

[1] x264碼率控制方法介紹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章