首頁>Club>
HEIF & HEVC你知道多少?
31
回覆列表
  • 1 # 好色之圖

    在升級 iOS 11 之後,iPhone 7 及更新的裝置內的照片儲存將不再用 JPEG 了,而採用了一種新的圖片格式 HEIF(發音同 heef),在 iOS 中對應的檔案字尾為 .heic ,其編碼用的是 HEVC(這個發不了音,哈哈哈)格式,又稱 H.265 (這個就很熟悉了 H.264 的下一代),同時影片也用 HEVC 作為編碼器,對應的檔案字尾還是 .mov 。

    這裡要注意他們倆的關係, HEIF 是圖片格式,而 HEVC 是編碼格式(類似 H.264,VP8),HEIF 是圖片容器(類似於影片的 mkv,mp4 字尾),而用 HEVC 進行編碼的 HEIF 圖片就是字尾為 .heic 的圖片,也是蘋果主要使用的格式。

    這兩個都是很新的標準,分別在 2015 和 2013 年才被 ISO 批准。這篇文章主要介紹一下 HEIF 格式和與其他圖片格式相比的優劣。

    發展史如下:

    screenshot

    什麼是 HEIF?

    screenshot

    這張圖是 WWDC Session 511 的形容 Heif 的一句英文詩,JPEG 很大,但是 HEIF 和小。

    HEIF 全稱 High Efficiency Image Format (HEIF)。是由 Moving Picture Experts Group 制定的,儲存圖片和圖片序列的格式。

    相關的介紹位置這邊可以看到 nokiatech.github.io/heif/ ,對的,你沒有看錯,是 Nokia 的技術人員們制定的。相比 JPEG ,PNG 等傳統的圖片格式來說, HEIF 可算是相當年輕了,但是這種格式相比 JPEG 等有很多的優點。

    壓縮比高,在相同的圖片質量情況下,平比 JPEG 高兩倍。

    能增加如圖片深度資訊,透明通道等輔助圖片。(蘋果正是透過這個就能實現動態的調整圖片的景深)。

    depth

    支援存放多張圖片,類似相簿和集合。(實現多重曝光的效果)

    screenshot

    支援多張圖片實現 GIF 和 livePhoto 的動畫效果。

    無類似 JPEG 的最大畫素限制。

    支援透明畫素。

    分塊載入機制。

    支援縮圖。

    在這個 Nokia 網站上可以看到相關的例子。

    檔案組成

    在影片檔案中,容器和編碼是獨立開的,比如 mp4,mkv 等格式是容器,而 H.264,VP8 等是編碼。但是影象檔案中,像 JPEG 就是混合在一起的(所以它不好用啊,哈哈哈哈),HEIF 就把容器和編碼分開了,有用來存放單個或者多個影象的容器。

    所以基於不同的編碼器,會有不同的檔案字尾。

    Apple 裝置中預設使用的都是 HEVC 的編碼的 HEIF 格式。

    在 Apple 所編碼的 HEIF 的檔案組成大致如下圖,其 mdat - Media Data 中存放的是 exif 資訊,縮圖(320*240),和 HEVC 編碼後的圖片:

    screenshot

    HEIF 底層是預設 tiled,就是片狀的有 512x512 個,由一個個小的圖塊,組成一張大圖,這一特性有如下的優點:

    加速解碼

    縮放加快(不用載入整張圖片)

    裁剪加快

    HeifTile 和 SystemTile (CATiledLayer 等系統所提供的分塊載入)是不一樣的,但是兩者結合會有很大的提升,所以在載入和處理特大圖片時,效能有大幅度的提升。

    HEIF 所採用的熵編碼也和 JPEG 不一樣,JPEG 是用的霍夫曼編碼(Huffman),而 HEIF 使用的是基於上下文的自適應二進位制算術編碼(CABAC),編碼的是資料量更小且更快。

    相容性

    每當一個新的技術推進至工業化,相容性無疑是最重要的考量點。像 HEIF 這樣的圖片格式,並不像 JPEG / PNG 等已經被廣泛應用和適配了,估計在 Apple 推出之前,大部分開發者和我一樣應該都是不知道的。目前工業化的體系內,對 HEIF 幾乎是不相容,Windows 上無法開啟 HEIF 檔案,10.13 前的 macOS 也無法開啟。蘋果在推行這一技術的時候,在內部也是做了很多相容工作的。

    對一般使用者

    一般情況下,使用者是對這個格式無感知的,因為只有在新款支援硬解碼的 iOS 手機內部是以 heif & hevc 格式來儲存照片和影片的,而在使用者透過 Airdrop 或者資料線傳送到電腦上的時候,對不相容的裝置會自動轉換到 JPEG 的格式。所以也不會影響你使用微信,微博等軟體。

    不過在蘋果內部的 app 中,基本都已經用上了這一技術,如照片,FaceTime 等應用。意味著以後同等儲存空間能存放更多的照片和影片,同時 FaceTime 也能節省更多了流量,相同網路情況下,FaceTime 也會更加清晰。

    透過在 設定 -> 照片 選項中可以設定傳到 MAC 或者 PC 上時保持 HEIF 格式。

    screenshot

    支援的裝置

    HEIF 圖片:

    編碼:

    硬體:**A10 **及以上晶片 iOS 裝置。即只有 iPhone7 及以上是支援 HEIF 的(有雙攝像頭,才帶有深度資訊)。

    軟體:iOS11,執行 macOS 系統的 Mac 裝置。

    解碼:

    硬體:A9 及以上晶片 iOS 裝置(iPhone6s),配備 6 代及以上 Inter Core 處理(Skylake)。

    軟體:iOS11 和 macOS 支援軟解碼,但是 iOS11 鎖版本代表最低只支援到 5s

    HECV 影片:

    影片分為 **8 位 / 10 位 兩種模式。基本和圖片編解碼保持一致,唯一有區別的是 10 **位硬解碼要求是 7 代 Intel 處理器。

    總結一下,就是升到 iOS 11 之後,你的裝置就能解析新格式的圖片和影片,軟硬解碼的區別就是,硬解碼會更快並更省電。

    對開發者

    上層框架 PhotoKit

    對使用者的幾乎無感知切換的前提,肯定是上層 API 沒有變化,調整的是最底層的 API,所以一般開發者使用上層的框架時,如 PhotoKIt 是不受影響的,不同格式的圖片都抽象為了同一個物件。而且對圖片增加濾鏡和影片的調整修改,最後都會渲染為 JPEG 和 H.264。在這一級別的 API 是接觸不到圖片檔案格式轉換所帶來的變化的。

    下層框架 Image I/O

    Image I/O 中可以直接讀寫 .heic 檔案。 iOS 11 中 Image I/O 能夠直接讀取 heif 的檔案,包括讀取 exif,xmp 等資訊。

    let inputURL = URL(fileURLWithPath:Bundle.main.resourcePath! + "/IMG_0513.HEIC") let source = CGImageSourceCreateWithURL(inputURL as CFURL, nil) let image = CGImageSourceCreateImageAtIndex(source!, 0, nil)

    let options = [kCGImageSourceCreateThumbnailFromImageIfAbsent as String: true, kCGImageSourceThumbnailMaxPixelSize as String: 320] as [String: Any] let thumb = CGImageSourceCreateThumbnailAtIndex(source!, 0, options as CFDictionary)

    guard let cImage = image else { print("not support heic") return; }

    當然也可以選擇把 CGImage 寫入到 HEIC 格式,雖然這樣可以節約更多的儲存空間,實際使用的時候還是要注意轉換操作。

    let url = URL(fileURLWithPath: "/tmp/output.heic") guard let destination = CGImageDestinationCreateWithURL(url as CFURL,AVFileType.heic as CFString, 1, nil) else{ fatalError("unable to create CGImageDestination") } CGImageDestinationAddImage(imageDestination, image, nil) CGImageDestinationFinalize(imageDestination)

    Apple 提供的很多 API ,供開發者檢測裝置是否支援新的格式。提供了兩種推薦的工作場景事例。

    社交網路

    在社交軟體中,涉及到圖片分享之類的內容,是無法確定接受者是否能支援新的格式的, Apple 的策略是建議都進行轉換到 JPEG 的操作,比如傳送郵件,或者透過 extension 分享的時候,傳入其他 app 中的時候,都已經進行了轉換了。

    p2p 場景

    在該場景中,裝置和裝置間的直接連線,首先把接受者的支援格式告知傳送者,然後傳送者根據相容的情況,選擇 HEIF 或者 JPEG。比如 AirDrop 。

    同時諸如 SDWebImage 目前也正在做對 heif 的相容。

    跨平臺

    大部分的播放器已經支援了 HEVC 即 H.265 的編碼器,但是針對 HEIF 的圖片相容性還是相對較差的。 目前有的是 Nokia 提供了一個 C++ 的讀寫庫,透過該庫,支援把 HEIF 的圖片的解碼到 HEVC 的編碼資料。

    Android 相容性:

    依賴 Nokia 的庫,目前只能透過 CPU 軟解。

    據說 LG 正在研發支援硬解的手機。(raddit)

    網頁相容性:

    Nokia 提供 JS 庫。

    Windows 相容性:

    目前也沒有能直接開啟 HEIF 檔案的應用。

    對比

    常常拿來與 HEVC 來做對比的是 VP9。兩者的效能相近,但是 VP9 是開源的,而 HEVC 是需要專利費的( $2 每裝置)。 目前暫時沒有透過 VP9 進行編碼的圖片,所以這裡主要對比的是 webp 就是透過 VP8 進行編碼的圖片。 webp WebP目前支援桌面上的Chrome和Opera瀏覽器,手機支援僅限於原生的Android瀏覽器、Android系統上的Chrome瀏覽器、Opera Mini瀏覽器。

    WebP 有損支援

    Google Chrome (desktop) 17+ Google Chrome for Android version 25+ Opera 11.10+ Native web browser, Android 4.0+ (ICS) WebP 有損 / 無損 / 透明支援

    Google Chrome (desktop) 23+ Google Chrome for Android version 25+ Opera 12.10+ Native web browser, Android 4.2+ (JB-MR1) Pale Moon 26+ WebP 動畫支援

    Google Chrome (desktop and Android) 32+ Opera 19+

    下面是幾個關鍵技術點的對比,可見 HEIF 功能是最強大的。

    壓縮效率

    下面的資料均是官方提出:

    Webp 同等質量下,比 JPEG 影象小 25-34%。

    JPEG 平均需要比 HEVC 多 139% 的位元率,意味著同等質量下,JPEG 的大小是 HEVC 的 2.39 倍!

    把兩個的參考標準統一一下:

    Webp 比 JPEG 小 25-34% HEVC 比 JPEG 小 58%

    但是在我自己的本地的測試中,測試了五組圖片。webp 以 80 的質量進行壓縮,hevc 以 crf 18 (視覺無損)壓縮,同時增加一個 320x240 的縮圖。

    自己進行 HEIF 轉碼的流程是,將圖片透過 ffmpeg 編碼到 H.265,再透過 Nokia 的庫轉成 HEIC 檔案(Heif)。

    //生成主影象編碼 ffmpeg -i $1 -crf 18 -preset slower -pix_fmt yuv420p -f hevc bitstream.265 //生成縮圖編碼 ffmpeg -i $1 -vf scale=320:240 -crf 28 -preset slower -pix_fmt yuv420p -f hevc bitstream.thumb.265 //呼叫 Nokia 的工具 ./writerapp config.json

    除了一組特大圖的表現不一樣外,其他幾組圖片相比, heif 確實比 webp 壓縮效率高 10-20%。

    畢竟和 HEVC 對標的技術應該是 VP9,所以 heif 能夠領先也是情理之中。

    解碼的消耗測試

    主要測試裝置是 iPhone 6s Plus 系統 iOS 11,用的解碼方法 webp 為 Google 提供的庫,hevc 和 jpeg 用的是 CGImageSource 來解碼。 測試用圖片還是之前的五組圖片,同時對 JPEG 進行了一些壓縮,測試了 5 組平均值(去一個最高,去一個最低),估計載入的時候存在快取,所以第一次讀圖片資料的時候耗時較大。

    第一組用第一張 7.7 mb 的 jpeg 壓縮後大小 1.1mb jpeg 7.43 2.77 1.46 1.9 2.14 2.00 【佔用率 6 %】 hevc 41.0 3.45 3.35 2.62 2.92 2.66 【佔用率 6 %】 webp 216.6 216.8 217.5 261.9 195.2 【佔用率 21 %】

    第二組用第三張 1.8 mb 的 tff,轉換成 jpeg 之後大小為** 815 KB。** hevc 58.4 3.1 2.8 1.13 2.65 2.82 2.02 【 2% 】 jpeg 65.3 2.67 2.76 2.73 2.69 2.87 1.34 【 2% 】 webp 130.2 110.9 117.5 114.8 120.9 112.8 124.84 【 12% 】

    第三組用的最後一張 243KB PNG ,轉換成 JPEG 之後大小為 43 KB。

    hevc 47 3.24 2.7 3.21 2.63 1.74 【 1 %】 jpeg 16 6.70 6.97 4.46 7.2 6.76 7.08 【 1% 】 webp 20.7 20.2 12.5 22.0 19.3 19.4 【 2 % 】

    測試結果由於硬解碼的支援,jpeg 和 hevc 解碼速度和 CPU 佔用率都比 webp 快和小很多,jpeg 和 hevc 不相伯仲,可見蘋果內部對其最佳化也相當到位,才把它放到 iOS 11 中。

    總結

    相比 JPEG 來比很強大,畢竟是下一代技術,但是相容性可想而知,在“最大效率”和“最大相容”兩者中間還是要根據使用場景進行權衡,目前的優勢也只有最新的 iPhone 能體驗到,但不久的將來可能所有的手機都去支援照片深度,動態照片,更廣的色域等。HEVC 也許和推行 H.264 一樣,逐漸成為了工業界的標準,但又可能和推行 acc 的處境一樣,只是成為了蘋果的標準而已,終究還是要看市場的反應了。

  • 2 # 粒子菌

    我們知道目前網際網路廣泛應用的圖片格式為JPEG,由於JPEG優良的品質,使它在短短几年內獲得了成功,被廣泛應用於網際網路和數碼相機領域,網站上80%的影象都採用了JPEG壓縮標準。即便如此也不能掩蓋它已經25年的歷史。

    JPEG格式

    相比於JPEG,2015年完成的新圖片格式HEIF(High Efficiency Image File Format高效率圖檔格式)同樣可以用更少的容量儲存畫質更好的照片,並且在連拍、動圖和色彩變化不大的照片上效果尤其明顯。下圖可以看出,使用JPEG格式壓縮的圖片體積為2MB,轉為HEIF格式的圖片僅有1.2M,畫質方面並沒有下降。

    HEIF格式影象體積縮減一半(圖片引自9to5mac.com)

    HEVC全稱High Efficiency Video Coding(高效率影片編碼),是比H.264更加優秀的一種影片壓縮標準(也稱為H.265),與現有的影片壓縮標準H.264/AVC相比,它能將壓縮效率提高一倍以上,同時可支援4K解析度甚至8K解析度的超高畫質影片。

    圖片/影片格式發展路線圖

    更重要的是HEVC在低位元速率影片壓縮上,提升質量、減少容量和節省頻寬方面都有突出表現。一部500M左右的MPG格式的動畫片經過HEVC格式的壓縮之後僅有僅有18M,不過在畫質方面基本不會受到影響。

    兩種影片格式畫質差異不大(圖片引自9to5mac.com)

    可以看出無論透過引入HEVC和HEIF兩種格式,蘋果可以繼續提升畫質並節省儲存空間。不過蘋果並不是為了照顧16GB使用者才如此費心費力構建新的相機格式,更多的是著眼於未來,因為這意味著不僅可以節省相機應用中拍攝的照片和影片,還可以節省實時流媒體服務的頻寬。

    HEVC更加節省頻寬(圖片引自poppur)

    以影片網站為例,運營最大的支出成本就是寬頻成本。一旦採用新型影片壓縮標準以後,影片的頻寬成本將大幅降低。與此同時電影、動畫片等影片經HEVC影片壓縮服務後,手機使用者觀看線上影片不僅流量耗費大大減少,且下載速度會更快,畫質基本不會受到影響,即使線上觀看也會更流暢,不會老是卡機。

    事實上,蘋果已經開始將HEVC影片格式用在手機中,iPhone 6開始,HEVC已經是iOS影片通話中可選的壓縮格式。透過將HEVC應用於影片通話,蘋果節省了不少頻寬和流量。即便是在網路不暢的情況下,使用者也能享受到非常清晰的影片通話。與此同時,在今年的WWDC上,蘋果還展示了HEVC的去塊濾波器如何改善影象的外觀。

    HEVC改善影象質量(圖片引自9to5mac.com)

    看起來很美好的兩種相機格式其實在網際網路並不流行,蘋果使用他們構建自己的系統優勢,不過仍然面臨無法與主流裝置相容的問題,你在windows電腦上根本打不開這類檔案,即便是筆者沒有升級的macOS High Sierra的MacBook Air也無法顯示HEIF格式生成的檔案,這對蘋果來說仍然是一大阻礙。

    圖片相容性仍是問題

    不過如果你的手機已經升級到了iOS11,也能夠體驗這兩種全新的相機格式,在設定—相機—格式中同時勾選“高效”和“保留原始圖片”即可拍攝出HEIF格式的圖片。因為全新的HEIF格式對處理器的要求也很高,所以只有A9級以上處理器的iPhone才支援這一格式,所以你的手機如果是iPhone 6及以前的產品,並不會對16GB空間帶來任何最佳化。

    iOS11可以拍攝HEIF格式圖片

    正是因為相容性問題,所以即便是對已經升級了iOS11的產品來說,蘋果並沒有採用激進的策略,而是保留了JEPG格式,讓使用者根據自己的需求選擇。

    新格式並非為16GB使用者準備

    蘋果甚至可能會“重新編碼,其包括SD和HD影片,整個庫”流媒體或下載到TV或iOS裝置時,導致產生的檔案更小。這次蘋果冒著打破行業慣性的舉動,絕對不是因為16GB使用者的吶喊才改變,何況iPhone 7已經放棄了16GB版本。蘋果強力主推HEVC和HEIF,很可能是為未來tvOS的流媒體形式奠定基礎,所以,16GB版iPhone使用者,你不要多想。

  • 中秋節和大豐收的關聯?
  • 古代人家裡的嫡女和庶女的地位究竟是怎麼樣的?