ffmpeg--轉碼參數調整

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是具體執行的步驟限定,在一起應該不衝突。

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