【064】11周 iOS 11 中的 HEIF 与 HEVC 是什么 | 科普

子不语Rex
2017年10月19日

iOS 11 中的 HEIF 与 HEVC 是什么 | 科普

| 本文为付费栏目文章,您已订阅,可阅读全文 |
iOS 11 中,苹果为图像和视频推出了全新的技术。根据苹果在 WWDC 上的说明,采用了 HEIF 文件格式的图片,在保持同等质量的前提下,体积最多可以压缩到只有传统 JPG 图片的 50%。而使用了 HEVC 编码方式的视频,相比上一代 H.264 技术,可以节省最多 40% 的存储空间。
为了让你有更直观的感受,可以看一下这两张同样是 iPhone 7 Plus 拍摄的样张。前者使用了最新的 HEIF 格式,后者则是传统的 JPG 格式,可以看到,体积的确小了近一半。

样张由 phonearena 拍摄,在这里下载更多样张对比原图

为什么要使用 HEIF 和 HEVC?

新的 HEIF 和 HEVC 技术,可以使同等质量的图片和视频,占用更少的体积,这自然只是优势的一方面。随着图片和视频的捕获、编辑和分享,在我们的日常生活中越来越普遍,作为整个生态系统掌握者的苹果,不得不开始考虑这几个问题:
  • 图片的形式开始越来越多样:从连拍到 Live Photo 再到人像模式,照片的定义已经从一张静态的图像,变得越来越宽泛。它可能是一组照片,也可能是照片+小视频,或是照片+景深信息。照片的存储变得越来越零散,不得不分成好几个文件。同时,和外界的分享也没有统一的格式和标准,例如分享一张 Live Photo 到第三方平台,如果第三方没有针对苹果的 Live Photo 做出专门的适配,最终往往只会留下静态的 JPG 图片。
  • 传统技术无法支持更好的图像质量:JPG 作为 1992 年制定的技术标准,除了无法支持当前日益丰富的图片形式,在质量上也力不从心。对透明 α 通道、宽色域、HDR 10 等技术的支持,都需要新的载体。
  • 4K 时代与带宽限制间的矛盾:4K 的时代已经来临,每个人都追求更好的画质。然而,也由此产生了存储空间与带宽传输间的矛盾。用 iPhone 录制一分钟的 4K 视频,使用传统 H.264 技术往往需要占用 300-400M 空间,在上传、分享、投屏时,也多受带宽的限制。
正是在这样的时代背景下,HEIF 和 HEVC 诞生了。

HEIF 与 HEVC 是什么关系?

HEIF 的全称是 High Efficiency Image Files (Format),即高效率图像文件格式。HEVC 则是 High Efficiency Video Coding(又名 H.265),即高效率视频(图像)编码。
从名字上你也看出来了,两者并不是对等的。实际上 HEIF 是一种图片文件格式,是一种容器。而 HEVC 则是更底层的一种图像和视频编码方式,它决定了图像和视频是如何被编码和解码的。
就像 .avi 作为一种文件格式(容器),里面的视频可以使用 MPEG-4、DV、Flash Video、H.264 等编码技术。对于使用 HEIF 格式的图像文件,苹果选用了 HEVC 编码来存储其中的图像。当然,这不是 iOS 11 中唯一运用 HEVC 编码技术的地方,新系统中的视频文件 .mov,也使用了 HEVC 作为编码方式,才有了 40% 的空间节省。而早在 iPhone 6 时代,FaceTime 视频通话也使用了 HEVC 编码。

HEIF 作为一种图像容器

HEIF 并不是苹果私有的一项技术,而是 MPEG 组织在 2015 年推出的一项标准。它的出现,正是为了解决前文中提到的「图片形式多样化」和「图像质量提升」这两个问题。一个 HEIF 格式的图像,可以存储:

  • 单张或多张静态图像;
  • 连拍照片;
  • 静态图像和视频的结合(如 Live Photo);
  • 动图(类似 GIF 的效果);
  • 原图像的衍生图像,如经过编辑后的图片(如旋转后的图片);
  • 对焦和曝光信息;
  • 其它相关信息,如音频、字幕等元素;
之所以如此多能,是因为 HEIF 本质上是一种容器,在它的定义下,一个容器里面,包含了这些部分:

  • 文件基础信息:包含了文件类型、编码方式等基础信息;
  • 元数据:主要包含了「媒体区」和「图像序列区」中,每个元素存放的位置及彼此间关系等信息。例如,媒体区中存放的两张图片,其中一张是由另一张旋转后得到的,这个关系就可以在元数据中记录;或者,使用 iPhone 7 Plus 拍摄得到的景深信息,也会记录和生成图片之间的关系;
  • 媒体区:这里面可以放置多个媒体文件。以最常见的图像来说,主要包含了 EXIF、缩略图、原始图片等信息。按照苹果的定义,缩略图的大小为 320*240,而图片则会被切割成 512*512 大小的区域分别存储。
  • 电影盒子:苹果称之为 Movie Box,其中存放着视频、音频或没有时间关系的一组图片。与媒体区不同的是,电影盒子中的各个文件之间,是存在着编码上的依赖关系的。例如一组时间序列的图像文件(可以理解成 Live Photo),这些图像是被当作一个整体使用 HEVC 编码的,而媒体区中的多个不同的图像文件,则是各自独立使用 HEVC 编码,不存在依赖关系;

以一张景深照片为例,在媒体中区,景深信息、原始照片、合成后的照片是三个不同的元素,而在元数据中,记录了彼此之间的关系。这样,你只需要把这样一张 HEIF 格式的文件分享出去,第三方 app 就能根据需要,自行读取其中的景深信息和原始照片,创造出更多好玩的效果。

HEVC 作为一种编码方式

HEIF 大大扩展了一张图片的可能性。不过,之所以它能获得比传统 JPG 更小的体积,则是得益于采用的 HEVC 编码技术。通过它,图片和视频在不损失质量的前提下,可以缩小 40-50% 的占用空间,那么,HEVC 到底是如何做到的呢?这就需要我们对压缩有一个基本的认识。
先从一张静态的图片开始说起。比如这张蓝天的图片,我们想要压缩它,有哪些办法呢?让我们从一个小的着眼点开始,从右上角取四个像素点。

你可以看到,这四个像素点,就是四个蓝格子,上面的数字是蓝色的颜色值。如果我们按每一行每一列的方式,来标记这些格子,左上角是 1.1,右下角是 2.2,依此类推,那么要完整的记录这四个格式的信息,可以表示为:

  • 1.1:#001768
  • 1.2:#001668
  • 2.1:#001768
  • 2.2:#001567
这时候我们想要压缩这段信息,该怎么办呢?
一个最先蹦上我们大脑的想法,就是这些蓝色在我们肉眼看来差不多,何必要区分这么多色号呢?不如认为这四个格子的颜色,都是 #001768。那不如我们这样表示:
  • 1.1:蓝色
  • 1.2:蓝色
  • 2.1:蓝色
  • 2.2:蓝色
  • 蓝色:#001768
这样,虽然我们丢失了一点颜色上的小差异,但现在简单多了,只剩下了一种蓝色。这种丢失一部分颜色和细节的压缩方式,就是有损压缩。在实际的运用中,会更复杂地使用颜色抽样、频率转换等一些算法,我们就不展开细节了。
那好,既然都成为了同一种蓝色,还有没有办法进一步简化呢?我们现在是按一个一个格子单独表示的,但现在既然这块区域都是同一种蓝色,为什么我们不转换成一种更高效的表达方式呢?让我们定义 1.1-2.2 这样的写法,就表示这四个格子,那么,现在就可以描述成:

  • 1.1-2.2:#001768
在这个过程中,没有任何信息的损耗,仅仅通过定义一种更高效的表达方式,我们就进一步节省了空间。这样的压缩,就是无损压缩,所有的原始信息都可以被还原回来
直到现在,我们都在尝试压缩一张图片,那如果这是一段拍摄蓝天白云的视频,我们如何继续把这段视频压缩下去呢?
现在,就让我们把思考方式,从怎么压缩一张照片,转换到怎么压缩一系列连续的图片。显然,蓝天如果作为一个静止的背景,在动的只有白云。如果我们能把蓝天固定下来,只在视频中描述白云的运动情况,视频的体积不就可以减小了吗?
这种在一个视频的不同帧之间,只追踪运动部分的轨迹的方法,就叫做运动压缩。通过算法,我们先确定下来一个视频当中的「原始帧(Intra Frame)」,然后,原始帧之间的图像,我们要不插入「单向预测帧(Predicted Frame)」,要不插入「双向预测帧(Bi-directionally Predicted Frame)」。前者通过上一个最近的帧预测得到图像,后者则是通过左右最近的两帧预测得到图像。

总的来说,几乎所有的压缩,都脱离不了这些思路。而具体到 HEVC(H.265),相比起上一代的 H.264 编码技术,最显著的一项改进,就是加强了帧的分隔能力,专业术语叫做 CTU(Coding Tree Units)。在上一代 H.264 中,你最多只能把图像分隔成 16*16 大小的区域,而在 HEVC(H.265) 中,则支持最大到 64*64 的分隔大小。

图片来自于 cnet

HEIF 与 HEVC 的支持与兼容情况

设备支持情况

苹果是当前科技巨头中,首个全面拥抱 HEIF 与 HEVC 技术的。这意味着,在最新的 iOS 11 和 macOS High Sierra 中,你可以浏览 HEIF 的图片和 HEVC 的视频。其中,图片会存储为 .heic 扩展名的文件,视频的扩展名依旧是 .mov
不过,如果想要拍摄 HEIF 的照片和 HEVC 编码的视频,则不是所有的视备都支持。想一想,如果压缩大法这么好,能把文件体积减小到这么少,为什么不早早采用呢?实际上,这样的做法是有牺牲的,是一种典型的用时间换空间的策略。被压缩得越厉害,意味着还原的时候需要解码的过程越漫长,相应的也更需要硬件设备的能力支持。
因此,在 iOS 设备中,只有 A10 Fuison 及以上的芯片,才支持拍摄 HEIF 的照片和 HEVC 编码的视频。这包含了今年新的 iPhone、去年的 iPhone 7/7 Plus 系统,以及 2017 版的 iPad Pro 10.5 寸及 12.9 寸。
此外,虽然支持最新系统的设备都能查看最新格式的文件,但也存在着速度和具体参数的差异。在 iOS 设备中,只有 A9 芯片及以上的设备,是通过硬件解码,其余设备则是软件解码。而在 Mac 上,采用了第六代及以后的 Intel 处理器的设备为硬件解码,其余则是软件解码。从实际体验来看,仅为软件解码的老款 Mac 上使用 Preview 查看一张传统的 JPG 图片,几乎是秒开。而要打开 .heic 文件,则会有 0.5-1 秒的 loading 时间。另外,在支持的文件参数上,老设备也多有折扣,具体可以参见少数派的这篇文章

兼容情况

在最新的操作系统中,原生级的应用都已经支持了 HEIF 和 HEVC。不过,对于大量的第三方 app,或者从手机传输到 PC 上的情形,都是如何处理的呢?

当接收的目标设备或第三方 app 不支持最新格式的图片和视频时,iOS 11 和 macOS High Sierra 会自动将图片降级为传统的 JPG 文件,视频降级为上一代 H.264 编码方式,以确保目标设备的兼容。而当苹果发现目标接收方支持时,如最新适配的 Camera+、Pixelmator 等,则会将新格式的文件直接传输过去。
此外,iOS 设置中还保留了两处可供你选择的权利。

在「设置 - 相机 - 格式」中,「高效」则会使用 HEIF/HEVC 来拍摄照片和视频,或选择「兼容性最好」回滚到上一代的 JPG 和 H.264 编码。此外,如果你想在 iPhone 8 或 iPhone X 上拍摄最新的 60fps 4K 视频或 240fps 1080P 视频,则必须开启「高效」模式。
在「设置 - 照片」的最底部,你可以切换到「保留原始照片」,而强制在从手机向 Mac 或 PC 传输的时候,使用最新格式的照片。

上一期
Power+ 第 11 周预告 & 话题讨论
下一期
App Store 首页题图很好看,把它们下载来当壁纸 | Workflow 定制 004
 
精选评论(1) 我的评论
  • 涨汤
    目前向不兼容设备传输视频时的体验还非常不好,耗时长而且容易失败,在等待转换过程中也不知道该做些什么,233

    不过还是十分看好这两项技术的未来。
    2017年11月09日 1