30-05之影像的編碼與壓縮

正文開始

本篇文章中我們將要學習以下的主題:

影像編碼

接下來我們會分以下三個章節來進行學習:

  • 什麼是影像編碼呢 ?
  • 如何進行壓縮呢 ?
  • 常用的編碼

什麼是影像編碼呢 ?

用來描敘影像的有規則二進位。

這個東西事實上就和音頻編碼一樣,都是使用電腦看的懂的東西(二進位)來說明一部影像,並且希望儘可能的在不損失畫質的前提下,將它弄小,可以方便我們傳輸與儲放。

但是為什麼要弄小呢 ? 它會很大嗎 ?

嗯超大。

我們來看看一個例子,假設有一部影像的資訊如下:

FPS:30 fps 每幀大小:1024 x 768 每個像素所用的 bit:10 bit 影像長度:10 分鐘

所以我們這部 10 分鐘的影像所需的空間為如下:

 30 X 1024 X 768 X 10 X 60 X 10 = 大約等於 18 GB

嗯哼, 10 分鐘的影片如果什麼都沒處理,那就需要 18 GB,你覺得你的小電腦可以儲放幾部迷片呢 ?

所以才會一堆人研究了各種的編碼。

如何將影像變小呢 ?

就是用一些奇技淫巧來壓縮。

接下來我們來簡單的看一下壓縮的原理,比較白話文的是說可以去除影像中的什麼。

主要有以下幾個冗餘點(Redundancy)可以處理:

  • 圖像冗餘:圖像是由像素所組成,但是每個相鄰的像素,相似性非常的高,所以這裡可以動點手腳兒。
  • 時間冗餘:影像是由連續的圖片組成,但每個相鄰的圖片,相似性非常的高,所以這裡也可以動點手腳兒。
  • 視覺冗餘:人的小眼晴事實上不是很敏感的,所以你動點小手腳事實上也看不出來。
  • 編碼冗餘:就是某些時後會不小心用到多餘的編碼來描述某個事物,所以這裡也可動手腳。

這個地方主要是參考智庫百科的數據冗餘

常用的編碼

基本上就分為兩大派H26XVPX

H.264

它是由 ITU-T 與 ISO/IEC MPEG 所共同合作的 JVT 小組開發的影像壓縮編碼,它目前可以說是公認效率最高的編碼,咱們來看看它到底壓到多驚人。

假設有個原始影像為 100 GB,那使用 H.264 編碼技術所壓縮後約為 1 GB 左右幾乎是 1:100。

大約在 2012 ~ 2014 年時影像編碼的主流還是都在使用 H.264,無論是手機、平板或是網路串流 (Ex. YouTube),完全就是一個老大樣子,而且蘋果公司是它的完全支持者,所有設備都支援它。

這裡就不多解釋它的技術細節囉,反正只是要讓你知道它是現在影像編碼的主流之一。

備註

  • 硬體上它需要取得授權
  • 初始版日為 2003 年 5 月
  • 和蘋果有關的都支持

H.265

它就是 H.265 的進化版,細節就不說明,反正壓縮效率更高就對了,不過這東東到現在還是不算很普及,聽說是授權的問題,目前好像只有在蘋果的圈子才有支持。

P.S 初始版日為 2013 年 2 月

VP8

VP8 是由 On2 所開發,並且在 2010 年時被 Google 所收購。VP8 當初在開發時就選擇以網路為主戰場,由於在網路的世界有頻寬的限制,所以選擇以較低的品質來處理頻寬的問題。基本上它以低頻寬的壓縮能力來看,屌打 H.264,而一般情況下也不會輸它太多。

大約 2012 年左右那時 H.264 還是影像編碼的老大,然後 Google 想藉由 VP8 與 HTML5 的與運算能力較弱手機的整合來將 H.264 從龍頭給接下來。然後首當其衝的當然是 Google 旗下影像最大用戶為 Youtube,它在那時開始將大量的影像改用 VP8。

備註

  • Chrome、Android、Youtube、WebRTC 都絕對的支持。
  • 硬體上它不需要授權。
  • 初始版日為 2008 年 9 月。

VP9

VP9 它是 Google 用來開發出來未了替代老舊的 VP8 影像編碼。

備註

  • 初始版日為 2012 年 12 月。
  • 目前 ( 2018 ) 大部份的瀏覽器都有支援 VP9,除了 safari。
  • WebRTC 在 2016 年時就支持囉。

雙方在 HTML5 的狀況

咱們直接從 w3school抓來看看。

先說明一下,下面說的格式會在後面的封裝章節進行更多的說明。

接下來咱們來看看下表,咱們可以說蘋果就是霸氣,只選擇支援 H.264 編碼,而 Firefox 與 Opera 就選擇站在支援 VP8 這陣營,你也可以將它們倆想成 Google 派。而 IE 反正沒啥人用別理他。

Ogg = Theora 影像編碼 + Vorbis 聲音編碼 MPEG 4 = H.264 影像編碼 + AAC 聲音編碼 WebM = VP8 影像編碼 + Vorbis 聲音編碼

圖片來源:w3school

結論

本編文章中咱們學到了以下幾個重點:

  • 什麼是影像編碼呢 ? 就是一段有規則用來說明影像的二進位。
  • 如何將影像變小呢 ? 請參考這篇智庫百科的數據冗餘
  • 常用的編碼。這裡就只要記得 H26X 派 ( 蘋果 ) 與 VPX 派 ( Google )

事實上這一篇我寫的有點心虛,原本想要深入的理解 VP8 與 H.264 編碼的差異,但發覺裡面的內容超硬的 ~ 未來有緣份在來寫寫。

參考資料

comments powered by Disqus