MPEG_H.264 壓縮格式 GOP. IBP 基本架構
資料整理 吳思賢
上圖為 MPEG 壓縮格式基本 (I、B、P) 架構,H.264 則為 (I、P) 架構
1.Sequence = 序列 (一部影片)
2.GOP =影片群組 (Group of pictures)
3.Picture = 影格Frame
4.Slice = 一片(面)
5.Macroblock = 大區塊
6.Block = 區塊
7.Pixel = 像素
※ 我們將視訊壓縮技術分為二種模式: 幀內壓縮(Intraframe Compression)以及幀間壓縮 (Interframe compression)。
●【幀內壓縮】,以 I-Frame (Intra-Frame) 為代表,其壓縮技術主要為【單幀本身】畫面內容考量,並不需要與臨近幀之間的參考關聯,因此這種壓縮技術的編解解碼方式,會比【幀間壓縮】技術來得簡單與快速許多,這種格式影片適合用來剪輯,不會有影音不同步的問題,但是在相同解析度與相同畫質條件下,檔案大小相對大很多,有可能到達10~50倍的差異。
●例如:在相同解析度1920x1080與接近畫質條件下
【幀內壓縮】也許需要每秒 100 mbps ~ 300 mbps
【幀間壓縮】只需要每秒 8 mbps ~ 15mbps
●【幀間壓縮】,以 B-Frame (Bi-directional-Frame)與 P-Frame (Predictive-Frame)為代表,其壓縮技術主要為【多幀共同】畫面內容考量,就是與臨近各幀之間相互的參考關聯,因此這種壓縮技術的編解解碼方式,會較為【計算複雜】許多,這種格式影片用來剪輯時,如果你的電腦硬體不是很優秀很強大,可能會有部份影音不同步的問題,但是在相同解析度與相同畫質條件下,檔案相對小很多,有可能到達10~50倍的差異。甚至某些解碼器Codec只支援剪輯點落在【i 幀】【Intra-Frame 幀內壓縮】,如果這一秒(30格)是由2個GOP所組成,例如:I BBP BBP BBP BBP BB I BBP BBP BBP BBP BB,因此你能設定的【in 點】只能【第01格】與【第15格】,如果設定在其它格,由於此解碼器Codec只支援剪輯點落在【i 幀】,也會自動【in 點】跳至【第01格】或【第15格】
※ 所謂的 GOP 壓縮,主要是針對【一組區間連續畫面】所做的壓縮計算,參考前後的畫面是否有重複的部份,再決定該畫面的壓縮資料量分配。這【一組區間連續畫面】有些 Frame 是使用【幀內壓縮】,有些 Frame 是使用【幀間壓縮】。
※一部影片可以只由一個序列組成,也可以由數個序列來組成。
1. 序列(Sequence)= 由數個 GOP 影片群組所組成,
2.影片群組(GOP)= 由一張 I 畫面及數張 B 及一張 P 畫面所組成,也是序列存取的基本單位。
而 M 與 N 是用來描述一 GOP 結構的參數,
M Frame 是指【前一段連續的結束 P-Frame 與 後一段連續的結束 P-Frame,也就是 2 個P-Frame 畫面距離之間的 Frame 結構數量】,例如 : M=3=>IBBP(IBBPBBPBBPBBP),M=4=>IBBBP(IBBBPBBBPBBBP),M=5=>IBBBBP,M=15=>IBBBBBBBBBBBBBP... ,
而 N Frame 是指【在一組 GOP 裡的畫面總數量】或【I-Frame 開始 與 下一段 I-Frame 之間的 Frame 總數量】,以非線性剪輯軟體編碼輸出為例 : M=3,N=15,則IBBPBBPBBPBBPBBPIBBPBBPBBPBBPBBPIBBPBBPBBPBBPBBP。*Closed GOP Every = 每xx個數值,封閉 GOP 一次。
3.影格(Frame)= 由數個片面(Slice)所組成。每一影格,會是I、P、B的其中一種影像編碼 。
4. 片面(Slice)= 由數個大區塊(Macroblock)所組成,是將Picture作水平固定單位的畫分,記錄了它在影像中的垂直位置,是訊號同步及錯誤控制的最小單位。
5. 大區塊(Macroblock)= 由16x16的像素所組成,就是由四個亮度信號 Y(Luminance)區塊(Block)及數個色彩信號 U、V (Chroma)區塊所組成,例如:4:4:4、4:2:2、4:2:0、4:1:1、4:1:0 。而色彩信號區塊的數目是依據影像數位化的取樣格式所決定。大區塊是移動估計及移動補償的基本單位,記錄編碼型式、移動向量及在片面中距離第一個大區塊的相對位置。
6. 區塊(Block)= 包含量化後的畫面資料,由8x8的像素所組成。※YUV請參閱相關頁面 Macroblock & block
※MPEG 定義了三種畫面壓縮模式, I 影格畫面、B 影格畫面、P 影格畫面,Long GOP的模式
1、I 影格畫面(Intra – Frame)
※I 影格畫面的編碼方式是採用類似於JPEG DCT 的方式處理,它並不考慮與其他畫面之間的關係,只有使用本身的資料進行編碼,所儲存的是一張完整的畫面。經量化後(Quantization),再經全程變動編碼( Variable Length Coding) ,由於實實在在的記錄影格的資料,因此壓縮率比較差。(壓縮比1:7) 。
※I 影格是一個序列或影片群組的第一張,接著是影片群組的 B與 P 影格,它們都會參考到I的資料,所以在網路傳輸時,需要保護該影格的損壞遺失,以免讓其它影格參考了不正確的資料,發生碼賽克的現象。
※由於編碼獨立,不須參考其它影格畫面的資料好處,因此可以單獨進行解碼,所以也做為解碼的基準點,提供任意讀取的開始位置,在時間軸上有隨點即播的特性。
※例如,我們設定每15格就有一格 I 影格。這裡的 I 影格是很重要的,因為它是15格中唯一張完整的畫
面。若在影片播放中間有很大而且突然的畫面改變,使得『動態預測補償編碼』沒有辦法有效的預測
P影格及B 影格,那我們就很快的在下一個 I 影格恢復正常的放映。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 1 | 2 | 3 |
I | B | B | P | B | B | P | B | B | P | B | B | P | B | B | I | B | B | P | B | B | P | B | B | P | B | B | P | B | B | I | B | B |
2、B 影格畫面( Bi-directional - Frame)
在編碼時,使用雙向的參考前後影格,做動態預測補償編碼,本身不做為其它影格畫面的參考用,擁有最高的編碼壓縮率 (壓縮比1:50) ;若找不到最適合的大區塊時,則使用Intra模式編碼(I-Frame)。在解碼時,使用雙向的參考前後影格畫面,做動態預測補償解碼播放。
3、P 影格畫面(Predictive - Frame)
在編碼時,會參考到前面較早被播放的 I 影格或 P 影格,而參考的位置就是以移動預測,所產生的移動向量來表示,由於參考前一個 I 影格或 P 影格,且以動態方式預測編碼,其編碼壓縮率較高(壓縮比1:20)。若找不到最適合的大區塊時,則會使用Intra模式編碼I-Frame 。
※而這三類的畫面在 Group Of Picture 中,有很多樣的排列順序。但是排列方式會影響視訊壓縮率與隨機解碼的處理能力,其開頭可以為 I 影格,結束的可以為 I 或 P 影格。
※GOP長度的設定主要看影片內容而言,靜態多的影片,GOP長度可以設長一些;經常切換畫面的影片,GOP長度可以設短一些。DVD-Video規格定義,NTSC系統的GOP最長為18 格 (每秒播出29.97frames);PAL系統的GOP為15 格 (每秒播出25frames)。
而M 與 N 是用來描述一 GOP 結構的參數,M Frame = 兩個連續的 I 畫面的距離數量,N Frame = 在一組 GOP 裡的畫面總數量。
※如需重新剪輯MPG的檔案格式,由於是Long GOP,因此, in 點 & out 點或製作DVD的章節點也是必須設定在 I 影格畫面上。
※DVD的章節點設定,只能設在GOP的起始點。MPEG或DVD的編輯工具,也只能處理到GOP的起始點,如果設定的點不在GOP的起始點上,會自動被指到最近的上一個或下一個GOP的起始點上,然後才會抓出縮圖(代表圖示),作為識別。
※例如,我們在影片正常速度播放中途,將影片快轉時,會自動忽略掉所有的 B-frame 與 P-frame,只播放完整影格的I-frame,因此在影片快轉時,會出現一格I-frame停了許久,接著又換了一格I-frame又停了許久,再換一格…,如此不連續的影片內容,因為影片快轉時,來不及檢查、比對、還原所有的 B-frame 與 P-frame。所以GOP的編碼方式,不適合用來作為,講求速度與精準影格裁切的,不適合專業影像製作單位來作剪輯使用。因此,如果想要檔案小,又方便找點剪輯,那就是要全程使用I-frame 來工作,現在已經有推出MPEG 2 I-Frame 及MPEG 2 I-Frame HD的編碼格式。
※GOP資料是怎樣記錄與回復成壓縮前的資料流呢 ?
※編碼,就是在編碼影像緩衝暫存區 (Coding Image Buffer ) 中,將接收到的資料進行編碼,若為第一張I-frame 影格則直接進行編碼的工作,隨後的畫面則透過 Frame Memory 將畫面記憶,再透過動態補償,將只記錄差異值的 B & P-Frame進行編碼的工作。
※解碼播放,就是在重建影像緩衝暫存區(Reconstructed Image Buffer)中將接收到的資料,再還原成原來的畫面;若為第一張 I 影格則直接進行還原的工作,隨後的畫面則透過 Frame Memory 將畫面記憶,再透過動態補償,將只記錄差異值的 B & P-Frame 還原成壓縮前的狀態。B-Frame 除了可以參考前面的畫面外,還可以參考後面的畫面,因為它是雙向參考還原。
※例如某張B-Frame 必須參考後面的P-Frame 才可以得到想要的畫面,那我們必須先運算下一個P-Frame 才行,運算完之後,P-Frame 並不馬上播放,而是先儲存在buffer 裡面,等到我們將B-Frame 還原並播放之後,才將P-Frame 播出。
※Discrete Cosine Transform(DCT)離散餘弦轉換,可使圖片做到大量的壓縮。
※緩衝器大小會影響到延遲的傳遞大小,但是卻能夠改變延遲變化量及使訊號調整更好效果。
● GOP愈長,硬體則需要愈強大,例如:IBBP BBP BBP BBP BB 可能需要硬體一般。例如:IBBBBBBBBBBBBBP 可能需要非常強大硬體一般。
資料整理 吳思賢