https://blog.csdn.net/evsqiezi/article/details/79567719
H.264有四種畫質級別,分別是baseline, extended, main, high:
- 1、Baseline Profile:基本畫質。支持I/P 幀,只支持無交錯(Progressive)和CAVLC;
- 2、Extended profile:進階畫質。支持I/P/B/SP/SI 幀,只支持無交錯(Progressive)和CAVLC;(用的少)
- 3、Main profile:主流畫質。提供I/P/B 幀,支持無交錯(Progressive)和交錯(Interlaced), 也支持CAVLC 和CABAC 的支持;
- 4、High profile:高級畫質。在main Profile 的基礎上增加了8x8內部預測、自定義量化、 無損視頻編碼和更多的YUV 格式;
H.264 Baseline profile、Extended profile和Main profile都是針對8位樣本數據、4:2:0格式(YUV)的視頻序列。在相同配置情況下,High profile(HP)可以比Main profile(MP)降低10%的碼率。 根據應用領域的不同,Baseline profile多應用於實時通信領域,Main profile多應用於流媒體領域,High profile則多應用於廣電和存儲領域。
一些解釋:
1 I-幀:也成爲關鍵幀,I-幀完全自我使用的,並且不使用任何其他幀的信息。它在三種幀中佔最大的比例,並且具有最高的質量,但是壓縮效率是最低的。
P -幀:P -幀是所謂的“預示”幀。當創建了一個P-幀時,編碼器可以向後查看I-幀或者P-幀中冗餘的圖片信息。P-幀比I-幀效率高,但是沒有B-幀的效率高。
B-幀:B-幀是雙向預測幀,這意味着當我們創建B-幀,編碼器可以同時向前和向後查找冗餘的圖片信息。這使得B-幀在三種幀中具備最佳的效率。注意,B-幀在使用Baseline方式生產視頻的時候是不可用的。
2 雖然結果是取決於源文件質量的,但通常來說CABAC被認爲比CAVLC效率高5%-15%。 這意味着,CABAC應該在碼率低5-15%,的情況下,提供同等的,或者更高的視頻質量。
3 至於Baseline@L x.x、Main@L x.x、High@L x.x形式則是在不同級別下的碼流級別,數值越大碼流就越大,更耗費資源。所以就碼流而言[email protected]<[email protected]<[email protected]。
4 壓縮率來說就是BP>HP>MP, 比例大概是100的原始數據, 壓縮後BP=15,HP=45,MP=50;在相同配置情況下,High profile(HP)可以比Main profile(MP)節省10%的碼流量,比MPEG-2 MP節省60%的碼流量,具有更好的編碼性能。根據應用領域的不同,Baseline profile多應用於實時通信領域,Main profile多應用於流媒體領域,High profile則多應用於廣電和存儲領域。
下圖清楚的給出不同的profile&level的性能區別。
profile 主要參數:
Level 主要參數:
從壓縮比例來說,baseline< main < high ,對於帶寬比較侷限的在線視頻,可能會選擇high,但有些時候,做個小視頻,希望所有的設備基本都能解碼(有些低端設備或早期的設備只能解碼baseline),那就犧牲文件大小吧,用baseline。自己取捨吧!
蘋果的設備對不同profile的支持。
preset
· --bframes <最多連續放多少B幀>
B幀是壓縮程度最高的幀, 放的越多愈能降低碼率!
比如設置--bframes 16 (最大值16)就等於一組最多可以連續放入16個.
*注意: 此參數在不同用途的視頻的分歧很大.
**注意: 此參數會嚴重影響網絡視頻的觀看效果.
B幀本身需要讀取參考前面的幀的信息, 調的越高, 一個GOP中就有更大可能被放入更多B幀從而達到壓縮效果.
大量B幀能達到壓縮效果, 加快網絡緩衝, 但上傳用視頻佔用太多CPU會導致網絡播放器從輕微到嚴重的磕磕絆絆斷斷續續的播放狀態, 這種情況不要設高!
· --b-adapt <應該放B幀還是P幀>
x264用來決定放P幀還是B幀更好, 一共3個選項:
0 全部設B幀 (可能會造成播放器解碼困難, 不推薦)
1 加速算法 (bframes開的越大, 速度愈快, 但效果不如2)
2 完整算法 (bframes開的越大, 速度愈慢, 但壓縮率更好)
推薦2, 但碼率允許的情況下也推薦1
· --direct <根據空間還是時間來判斷物件移動>
直接 --direct auto 自動判斷 (有的參數確實沒啥好說的)
· --me <位移預測方式>
速度從低到高有:
dia菱形(快, 效果差),
hex六邊形(快, 效果一般, 純單向移動推薦),
umh可變六邊形(適中,效果好, 推薦),
esa全向(慢, 效果好點兒)
tesa超全向(比上一個慢點兒, 效果好一丟丟).
大多情況推薦 --me umh
模擬鋼琴, midi軌道演示類的視頻大多都是單向移動, 所以可以選 --me hex, 但文件碼率會增大一點(1080p, 60幀下約100kbps).
tesa只比esa慢一小點. 除非碼率只差一點(10kbps)就合格了再使用, 當然更簡單粗暴不拖時間的方式還是調 --vf resize 裏的 sar~
--merange <位移預測範圍大小>
多大都可以. 在最極端的 --preset placebo 參數中這個值也只是24.
普通情況就設24即可, 畢竟現在電腦的配置不是幾年前了.
模擬鋼琴類的視頻由於幾乎所有的物件都往一個方向移動, 不會很大的拖慢判斷, 所以推薦32.
--partitions <宏塊能分成多少份>
用來精確的還原線條. --presetplacebo下的是 --partitions all 所以視頻的寬度和高度都會被分成16塊, 見圖(數一下圖中橫向和縱向的塊的數量就明白了)
推薦:
高清片源+等於/高於1280*720: --partitions all
低清片源/低於1280*720情況下: --partitions b8x8,p8x8,i8x8,i4x4 (IPB幀被分成8x8的小塊, I幀還可以被分成4x4的小塊.)
當片源非常不清晰時: --partitions b4x4,p4x4,i4x4.
--ref <能參考多少幀> 最大值16
這個參數最終會以命令的形式告訴播放器每一個B幀和P幀能用多少個前面的幀來獲取參考信息. 能參考更多幀, 標誌着自身可以儲存更少信息, 增強壓縮效果.
*注意: 此參數會嚴重影響網絡視頻的觀看效果.
**注意: 此參數在不同用途的視頻的分歧很大.
無變化,不用參考,設爲1左右。
變化不大,容易參考,適合開大,設爲10以上。
變化太大,難以參考,適合縮小,設爲5以下。
· --trellis <要幫忙嗎>
基於拉普拉斯算子(什麼鬼)通過分格量化將編碼數據微調的參數. 好吧, 拉普拉斯算子的優點是能發現並增強微小的細節, 我就知道這麼多~
設定的值會影響trellis在計算部分的參與程度. 一般是越多越好.
0: 關閉.
1: 僅編碼後期量化計算.
2: 編碼後期量化, 運動精度, 分割宏塊等計算.
所有情況推薦 --trellis 2
· --rc-lookahead <掃描多少幀>
掃描往後的幀並把變化數據交給量化工具.
建議設置爲視頻原幀數的三倍, 個位數除以2, 小數去尾.
*對於分辨率很低(240p,360p, 480p等)可以考慮設爲視頻源幀數的5倍
(極限值爲 250)
並降低qcomp來保證最大的掃描距離和量化壓縮強度哦(qcomp後面會講到, 現在可以無視)
--subme <設置亞像素估計的複雜度>
值設在0-11之間, 設的越大提升越強.
推薦最高的值: 11 (有的x264版本不支持, 這種情況下用10)
默認:7
可使用的值如下:
0 —— fullpel only
1 —— QPel SAD 1 iteration
2 —— QPel SATD 2 iterations
3 —— HPel on MB then QPel
4 —— Always QPel
5 —— Multi QPel + bi-directional motion estimation
6 —— RD on I/P frames
7 —— RD on all frames
8 —— RD refinement on I/P frames
9 —— RD refinement on all frames
10 —— QP-RD (requires –trellis=2, –aq-mode > 0)
preset跟profile,level是否衝突?
就個人理解,profile,是特性限定,level是數量限定,preset是具體執行的步驟限定,在一起應該不衝突。