天天看點

h.264中的SPS和PPS1、概念2、sps、pps、I幀、P幀在NALU中的關系和nalu type判斷 一個完整的NALU單元結構圖如下:3、序列參數集 (Sequence Paramater Set, SPS) 4、圖像參數集 (Picture Paramater Set, PPS)

1、概念

在 

H.264

 流中,有兩種 

NALU

 極其重要,H264碼流可以分為兩層,VCL層和NAL層,NAL的全稱是Network abstraction layer,叫網絡抽象層,它儲存了H264相關的參數資訊和圖像資訊,NAL層由多個單元NALU組成,NALU由了NALU頭(00 00 00 01或者00 00 01)、sps(序列參數集)、pps(圖像參數集合)、slice、sei、IDR幀、I幀(在圖像運動變化較少時,I幀後面是7個P幀,如果圖像運動變化大時,一個序列就短了,I幀後面可能是3個或者4個P幀)、P幀、B幀等資料。

2、sps、pps、I幀、P幀在NALU中的關系和nalu type判斷

一個完整的NALU單元結構圖如下:

h.264中的SPS和PPS1、概念2、sps、pps、I幀、P幀在NALU中的關系和nalu type判斷 一個完整的NALU單元結構圖如下:3、序列參數集 (Sequence Paramater Set, SPS) 4、圖像參數集 (Picture Paramater Set, PPS)

3、序列參數集 (Sequence Paramater Set, 

SPS

)

SPS 記錄了編碼的 

Profile

level

、圖像寬高等

3.1、profile 主要參數:

  • 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則多應用于廣電和存儲領域。

h.264中的SPS和PPS1、概念2、sps、pps、I幀、P幀在NALU中的關系和nalu type判斷 一個完整的NALU單元結構圖如下:3、序列參數集 (Sequence Paramater Set, SPS) 4、圖像參數集 (Picture Paramater Set, PPS)

3.2、Level 主要參數:

h.264中的SPS和PPS1、概念2、sps、pps、I幀、P幀在NALU中的關系和nalu type判斷 一個完整的NALU單元結構圖如下:3、序列參數集 (Sequence Paramater Set, SPS) 4、圖像參數集 (Picture Paramater Set, PPS)

3.3、fmpeg如何控制profile&level

ffmpeg -i input.mp4 -profile:v baseline -level 3.0 output.mp4

ffmpeg -i input.mp4 -profile:v main -level 4.2 output.mp4

ffmpeg -i input.mp4 -profile:v high -level 5.1 output.mp4      

如果ffmpeg編譯時加了external的libx264,那就這麼寫:

ffmpeg -i input.mp4 -c:v libx264 -x264-params "profile=high:level=3.0" output.mp4      

從壓縮比例來說,baseline< main < high ,對于帶寬比較局限的線上視訊,可能會選擇high,但有些時候,做個小視訊,希望所有的裝置基本都能解碼(有些低端裝置或早期的裝置隻能解碼baseline),那就犧牲檔案大小吧,用baseline。自己取舍吧!

 4、圖像參數集 (Picture Paramater Set, 

PPS

)

每一幀編碼後資料所依賴的參數儲存于 

PPS

 中

一般情況

SPS

PPS

NAL Unit

通常位于整個碼流的起始位置。

封裝檔案一般進儲存一次,位于檔案頭部,

SPS/PPS

在整個解碼過程中複用,不發生變化。

然而對于實時流,通常是從流中間開始解碼,是以需要在每個

I幀

前添加

SPS

PPS

如果編碼器在編碼過程中改變了碼流參數(如分辨率),需要重新調整

SPS

PPS

資料。

繼續閱讀