👉 歡迎加入T客邦telegram ( https://t.me/TechbangNEWS )
電腦也是點描派藝術大師
其實電腦儲存數位影像的方式很簡單,但在說明其原理之前,筆者想要先介紹一下點描派藝術大師秀拉,他透過堆砌色點的方式繪畫,當觀賞者與圖畫保持較長距離時,因為不容易看清楚每一個色點,所以就會感覺是一幅正常的畫作。
數位影像的原理與點描畫很接近,電腦會透過儲存很多色點的方式記錄影像,不過在電腦領域會以「像素」(Pixel,也可稱為畫素)稱呼色點,畫面上的每個像素除了有固定位置外,還記錄了紅、綠、藍等3原色的資訊(即RGB資訊),當累積足夠多像素之後,就能拼湊出細膩的畫面。
以Full HD的影像為例,它的解析度為1920 x 1080,代表,畫面上會有寬1920個像素、高1080個像素,透過共207萬3600個像素記錄影像。
點描其實很佔空間
目前常見的顏色取樣深度為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秒影片,看來不把影片壓縮一下真的讓人吃不消。
先從靜態圖片壓縮
從上面的範例可以看到,降低顏色取樣深度並不是個可行的解決方案,所以我們需要使用其他方式壓縮影片以節省容量,由於這個部分牽扯到許多艱深的影像處理技術,會讓文章內容太過發散,所以筆者僅以概念性的方式解說影片壓縮的原理。
由於影片是由許多靜態圖片組合而成,所以壓縮的過程首先可以先考慮把每張圖片都壓縮起來,舉例來說,將BMP點陣圖壓縮成JPEG格式,就能節省許多容量。
而這類圖片壓縮的技術大多為破壞性壓縮,意即編碼器會捨棄些許原始資訊以換取更高的壓縮效率,這類壓縮方式大家比較容易理解的案例是MP3音訊格式。由於一般人耳大多只能聽到頻率20,000Hz以下的聲音,所以MP3就捨棄這些人耳不易查覺的高頻訊號,讓壓縮後的檔案會更小,但由於被捨棄的部分在解壓縮後無法還原到與原始資訊相同,因此稱為破壞性壓縮。
回到圖片部分,壓縮的重要程序就是捨棄人眼難以分辨的細節,由於人眼對亮度比較敏感,而對顏色比較遲鈍,因此在壓縮過程中,會將RGB資訊轉換成YUV,在維持記錄每個像素亮度(Luma)的情況下,降低色度、濃度(Chrominance、Chroma)的記錄密度,達到節省容量的效果。
接著透過離散餘弦變換(Discrete Cosine Transform)、量化(Quantization)、熵編碼(Entropy Coding)等數學運算方式,再次將YUV訊號進行破壞性壓縮,進一步縮小檔案容量。
此外在壓縮影片時,編碼器也會進行畫格內預測(Intra-Frame Prediction),找出空間上的資訊冗餘(簡單地說就是分析畫面內臨近像素是否是相近顏色),並以差分編碼(Delta Encoding)方式節省記錄容量。
動態畫面靠資源回收
當考慮完單張的靜態畫面後,接下來就是要處理把多張畫面串起來後的問題,比方說60FPS的影片就代表每秒播放60張靜態畫面,但是畫面中可能會有很多區域是重覆的,如果可以不用記錄這些重覆的部分,是不是就可以省下很多容量呢?
我們可以想像一個都會區馬路的場景,攝影機高處俯瞰街景,影片中的行人、車輛會移動,但是道路、建築物卻固定不動。另一個例子是電影結束後所播放的工作人原列表,會有許多人的名字從畫面下方向上捲動,字體內容不會改變,只是持續往相同方向移動。
這個時候就是進行畫格間預測(Inter-Frame Prediction),找出時間上的資訊冗餘(簡單地說就是分析影片播放過程中沒有變動的物件),並以動態補償(Motion Compensation)方式找出影片中有變動的部分,只記錄差異的資料,至於沒有變動的部分則重覆利用先前的資訊。
回到前面的例子,在街景的範例中,編碼器會先以I畫格(I Frame)記錄完整畫面,然後使用P畫格(P Frame,可以參考前一畫格內的資訊)與B畫格(B Frame,可以參考前一與後一畫格內的資訊,可以提升壓縮率,但會增加運算負擔)記錄行人、車輛移動時造成的畫面差異,至於沒有變動的部分則沿用先前畫面上的資訊,如此一來就能大幅減少需要記錄的資訊,進而發揮降低壓縮後的檔案容量。
壓縮後只需千分之一
容量
早期常見的影片壓縮格式包含VCD與DVD使用的MPEG-1、MPEG-2,還有網路影片常用的RM、RMVB。到了MPEG-4盛行的年代,則因公開規格的關係,讓各公司、機構可以根據MPEG-4標準開發不同的格式,而產生如DivX、XviD、3ivx等繁多的衍生格式,直到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的影片會犧牲些許畫質並換取更高的壓縮率,檔案容兩能夠壓低至約為無壓縮影片的千分之一。
影片壓縮的技術不會隨時間停下,當我們有更高的影片解析度、畫質需求,而手上又有更強大的運算效能(如更新的智慧型手機處理器),就是壓縮效率更好的技術登場的時機,所以未來的發展還有許多好戲可以看呢。