ADVERTISEMENT
影片壓縮最大的重點之一,就是找出影片中冗餘的資料,想辦法用現有的資料去取代這些重複的部分,就可以減少影片檔案的體積,這次要測試的項目,就是動態補償(motion compensation)所使用的 B‑frame 可以提高多少壓縮效率。
動態補償只記錄改變
在說明B‑frame之前,筆者要先解釋一下動態補償的概念,它是消除出影片中「畫面間冗餘」(interframe redundancy)的重要方式。在影片的畫面中有許多區塊是不會產生變動的,因此影片編碼器會對畫面實施動態預測(motion estimation),分析並記錄鄰近畫格間產生變動與沒有變動的區塊,在播放時再透過動態補償結合上述資訊拼湊出完整的畫面,如此一來就可以不用記錄沒有變動的部分,節省儲存空間。
以下方的附圖為例,圖中畫格1為時間較早的畫格,有顆球從天上掉下來,畫格2則為緊接而來的畫格,球往畫面下方移動。由於畫格2中只有球的位置產生變化,其他部分都與畫格1相同,所以整個左半部以及右邊1/4畫面接可沿用畫格1中的資訊,編碼器只需記錄與球的移動有關的畫面區塊即可。
▲超級找一找,看得出來上下2張圖片有什麼不一樣嗎?看得出來就代表你也懂動態補償。(點圖可看大圖)
簡單說就是偷看隔壁
為了要達到動態補償,編碼器會將畫格分為I‑frame(Intra-coded picture)、P‑frame(Predicted picture)、B‑frame(Bi-predictive picture)等3種畫格,I‑frame的性質與Flash動畫中的關鍵影格類似,它會完整地記錄整個畫面,在解碼時並不會施行動態補償,P‑frame則是單向性的預測畫格,它可以尋找前1個畫格中的資訊進行動態補償,而B‑frame則是雙向預測畫格,它可以取用前後1個畫格中的資訊,而由I、P、B‑frame組成的畫格群組稱為GOP(Group of Pictures)。
使用B‑frame的好處是它可以向後面的畫格擷取資料,因此遇到「無變動區塊」的機會比P‑frame還要高,可以進一步刪除更多的冗餘資訊,但是相對而言它的分析工作更加複雜,因此會加重編碼及解碼的運算負擔。
約可減少7%檔案體積
在使用720p的《復仇者連盟》(樣本1)及1080p的《新世紀福音戰士新劇場版:破》(樣本2)預告片進行測試,採用MeGUI搭配x264編碼器進行編碼,由於我們想要得知B-frame對壓縮率的影響,因此在編碼時採用crf方式固定影片品質,讓壓縮效率反應在檔案體積上。
測試的控制變因為改變GOP中B-frame的數量,x264說明文件指出B-frame數量的建議值為2~3,因此筆者使用0(不使用B-frame)、3、5共3組設定進行驗證。
▲在這次的測試中筆者除了改變B-frame數量之外,其餘設定值皆維持編碼器預設。
從實測數據中可以看到開啟B-frame之後,大約可以節省7%左右的檔案空間,然而編碼的速度也會隨著使用B-frame數量的多寡而下降,而且解析度較高的樣本2下降幅度比樣本1高出1倍以上,不過還好在播放時並沒有遇到不流暢的狀況。另一方面,將B-frame數增加至5個縱然可以減省更多空間,不過也會降低編碼的效能,該如何取捨就要看讀者自己在不在乎等待的時間了。
延伸閱讀:
認識 VP8 影像編碼:整合 HTML5 更小更漂亮、挑戰 H.264 地位
Google WebP 圖片新進展:無失真壓縮、去背透明、動畫
電源供應器大小瓦數,誰的轉換效率高?瓦數愈大愈耗電?實驗給你看
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!