影片壓縮在幹嘛?看懂H.264、H.265、VP9等影片的檔案瘦身原理 無論我們使用手機拍攝影片,或是透過YouTube、Netflix觀賞影片,這些檔案都會經過壓縮手續,來節省儲存空間與傳輸流量,然而影片壓縮的原理是什麼,或是目前大家會遇到林林總總的檔案編碼格式,是不是讓你覺得眼花繚亂,就讓我們一起來看看這些技術背後的原理吧。

ADVERTISEMENT

👉 歡迎加入T客邦telegram  ( https://t.me/TechbangNEWS )

電腦也是點描派藝術大師

其實電腦儲存數位影像的方式很簡單,但在說明其原理之前,筆者想要先介紹一下點描派藝術大師秀拉,他透過堆砌色點的方式繪畫,當觀賞者與圖畫保持較長距離時,因為不容易看清楚每一個色點,所以就會感覺是一幅正常的畫作。

數位影像的原理與點描畫很接近,電腦會透過儲存很多色點的方式記錄影像,不過在電腦領域會以「像素」(Pixel,也可稱為畫素)稱呼色點,畫面上的每個像素除了有固定位置外,還記錄了紅、綠、藍等3原色的資訊(即RGB資訊),當累積足夠多像素之後,就能拼湊出細膩的畫面。

以Full HD的影像為例,它的解析度為1920 x 1080,代表,畫面上會有寬1920個像素、高1080個像素,透過共207萬3600個像素記錄影像。

《大碗島的星期日下午》是點描派大師秀拉最具代表性的畫作之一。

將畫作放大來看,可以發現是由許多色點所構成。

45 x 30解析度(共1,350像素)的影像因像素太少,所以相當粗糙。

若把解析度提升至720 x 480(共345,600像素),由更多像素組合出的影像就清晰許多。

目前主流的Full HD的解析度為1920 x 1080,代表寬、高分別有1920、1080個像素,雖然不及更高階的4K解析度,但已經能夠提供高畫質的視覺體驗。

點描其實很佔空間

目前常見的顏色取樣深度為24bit,代表分別使用8個位元儲存RGB資訊,因此3原色可以有256種不同色階變化,組合起來共可呈現16,777,216(約1677萬)種顏色。

由於每個像素需佔用24bit,所以儲存Full HD畫面上的200多萬個像素總共需要的儲存空間如下

1920 x 1080 x 24 = 6,220,800bit

,若以無壓縮的BMP格式儲存這種圖片,則需額外加上54 bit的檔頭資料,總共會佔用5.93MB左右的儲存空間。

在不壓縮畫面的情況下,光是儲存1張靜態畫像就會佔用不少空間,若以60FPS的影片為例,每秒儲存60張畫面,就需佔用356MB左右,這樣下來1個小時的影片的畫面部分(不含聲音資訊),就會佔用約1.22TB的儲存空間。

這樣無論是對於儲存或是傳輸影片來說都是很大的負擔,舉個例子來說,如果我們以手機拍攝無壓縮、Full HD、60FPS影片,那麼64GB的空間大約只夠儲存3分鐘的影片,若以10GB的行動上網流量觀賞串流影片,則只能觀看28秒影片,看來不把影片壓縮一下真的讓人吃不消。

24bit雖然可以還原美麗的色彩,在未壓縮的情況下儲存靜態畫像就耗費不少空間。

降低顏色取樣深度雖然可以節省儲存空間,但也會大幅折損色彩表現,圖為16色範例。

先從靜態圖片壓縮

從上面的範例可以看到,降低顏色取樣深度並不是個可行的解決方案,所以我們需要使用其他方式壓縮影片以節省容量,由於這個部分牽扯到許多艱深的影像處理技術,會讓文章內容太過發散,所以筆者僅以概念性的方式解說影片壓縮的原理。

由於影片是由許多靜態圖片組合而成,所以壓縮的過程首先可以先考慮把每張圖片都壓縮起來,舉例來說,將BMP點陣圖壓縮成JPEG格式,就能節省許多容量。

而這類圖片壓縮的技術大多為破壞性壓縮,意即編碼器會捨棄些許原始資訊以換取更高的壓縮效率,這類壓縮方式大家比較容易理解的案例是MP3音訊格式。由於一般人耳大多只能聽到頻率20,000Hz以下的聲音,所以MP3就捨棄這些人耳不易查覺的高頻訊號,讓壓縮後的檔案會更小,但由於被捨棄的部分在解壓縮後無法還原到與原始資訊相同,因此稱為破壞性壓縮。

回到圖片部分,壓縮的重要程序就是捨棄人眼難以分辨的細節,由於人眼對亮度比較敏感,而對顏色比較遲鈍,因此在壓縮過程中,會將RGB資訊轉換成YUV,在維持記錄每個像素亮度(Luma)的情況下,降低色度、濃度(Chrominance、Chroma)的記錄密度,達到節省容量的效果。

接著透過離散餘弦變換(Discrete Cosine Transform)、量化(Quantization)、熵編碼(Entropy Coding)等數學運算方式,再次將YUV訊號進行破壞性壓縮,進一步縮小檔案容量。

此外在壓縮影片時,編碼器也會進行畫格內預測(Intra-Frame Prediction),找出空間上的資訊冗餘(簡單地說就是分析畫面內臨近像素是否是相近顏色),並以差分編碼(Delta Encoding)方式節省記錄容量。

以JPEG格式圖片格式為例,將品質參數設為96(最高為100),可以把原先容量為854KB的BMP圖片壓縮至87.9KB,且肉眼不易分辨差異。

但是把品質參數設為10的話,雖然能把容量進一步壓縮至12.8KB,但可以看出破壞性壓縮對畫質造成負面影響。

動態畫面靠資源回收

當考慮完單張的靜態畫面後,接下來就是要處理把多張畫面串起來後的問題,比方說60FPS的影片就代表每秒播放60張靜態畫面,但是畫面中可能會有很多區域是重覆的,如果可以不用記錄這些重覆的部分,是不是就可以省下很多容量呢?

我們可以想像一個都會區馬路的場景,攝影機高處俯瞰街景,影片中的行人、車輛會移動,但是道路、建築物卻固定不動。另一個例子是電影結束後所播放的工作人原列表,會有許多人的名字從畫面下方向上捲動,字體內容不會改變,只是持續往相同方向移動。

這個時候就是進行畫格間預測(Inter-Frame Prediction),找出時間上的資訊冗餘(簡單地說就是分析影片播放過程中沒有變動的物件),並以動態補償(Motion Compensation)方式找出影片中有變動的部分,只記錄差異的資料,至於沒有變動的部分則重覆利用先前的資訊。

回到前面的例子,在街景的範例中,編碼器會先以I畫格(I Frame)記錄完整畫面,然後使用P畫格(P Frame,可以參考前一畫格內的資訊)與B畫格(B Frame,可以參考前一與後一畫格內的資訊,可以提升壓縮率,但會增加運算負擔)記錄行人、車輛移動時造成的畫面差異,至於沒有變動的部分則沿用先前畫面上的資訊,如此一來就能大幅減少需要記錄的資訊,進而發揮降低壓縮後的檔案容量。

筆者隨手拍攝的範例影片,可以看到畫面中只有行人、車輛在移動。(未降低容量所以畫質較差請見諒)

影片的I畫格會記錄完整畫面,但P或B畫格則只需記錄紅框標註的區域,其他部分的資訊則可省略並節省容量。

壓縮後只需千分之一容量

早期常見的影片壓縮格式包含VCDDVD使用的MPEG-1MPEG-2,還有網路影片常用的RMRMVB。到了MPEG-4盛行的年代,則因公開規格的關係,讓各公司、機構可以根據MPEG-4標準開發不同的格式,而產生如DivXXviD3ivx等繁多的衍生格式,直到H.264出現,才算是一統MPEG-4的「業界標準」,而H.264也是目前最主流的影片壓縮格式之一。

以YouTube所採用的H.264格式影片為例,筆者先前以Full HD解析度錄製的《實感賽車7》開場動畫時間長度約為30秒,若以未壓縮的方式儲存需要佔用10.43GB的空間,而經YouTube壓縮後檔案容量大幅下降為10.4MB,差距大約為1000倍。

除此之外,Google也先後推出VP8、VP9等影片壓縮格式,改善線上影片串流的觀賞體驗,而H.264的後續技術H.265也能在維持相近影像品質時,節省一半影片容量,對於往4K或更高解析度的影片播放來說相當關鍵。這3種壓縮格式的介紹可以參考筆者先前所撰寫的深入報導。

延伸閱讀:
認識 VP8 影像編碼:整合 HTML5 更小更漂亮、挑戰 H.264 地位
VP9影像編碼格式是什麼?為何能讓YouTube播高畫質影片不需緩衝
新一代影像編碼格式 H.265 完全析解,流量省一半,檔案更小更美

目前最新的影片壓縮格式之一就是由開放媒體聯盟(AOMedia)所開發的AV1,它的目標是取代其前身,即由Google開發的VP9影片壓縮格式,並具有日漸完整的生態系統,有望成為下個世代最主流的格式。

▲上傳至YouTube的影片會犧牲些許畫質並換取更高的壓縮率,檔案容兩能夠壓低至約為無壓縮影片的千分之一。

AV1具有完整的生態系統與相對開放且免權利金的優勢,未來發展值得期望。

AV1已經獲得許多廠商加盟與支持,對普及化有決定行的助益。

影片壓縮的技術不會隨時間停下,當我們有更高的影片解析度、畫質需求,而手上又有更強大的運算效能(如更新的智慧型手機處理器),就是壓縮效率更好的技術登場的時機,所以未來的發展還有許多好戲可以看呢。

👉 歡迎加入T客邦telegram  ( https://t.me/TechbangNEWS )

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則