大多数浏览器和
Developer App 均支持流媒体播放。
-
高效图像文件格式
了解全新高效图像文件格式 (HEIF) 的基本详情,并探索 Apple 平台使用了哪些功能。深入探索容器结构、它可处理的媒体和元数据类型,以及这种新标准带来的许多其他益处。
资源
相关视频
WWDC18
WWDC17
-
下载
大家好 欢迎大家 来到 513 号会议 本场会议中 你们将了解到 全新的高效率图像文件格式 即 HEIF 中的一些底层细节 同时还会了解到 这种全新的文件格式 带来的诸多好处 我是 Davide Concion 在 Apple 负责管理 图像压缩团队 本次会议中 我们会简要介绍 目前图像压缩 使用的事实标准 也就是大家所熟知的 JPEG 格式 我们还会介绍 在 Apple 看来 一种新的 图像格式应当满足 哪些需求
还会解释 为什么我们认为 HEIF 满足这些需求 同时还会介绍 HEIF 所采用的 一些功能灵活的工具 这之后 我们会介绍 为什么 Apple 认为 HEIF 格式应当 采用 HEVC 编解码器 我们先来谈谈 JPEG
JPEG 仍是最流行的 图像压缩技术 可以用于网页上的图片 也可以用于消费级 电子产品 例如数码单反相机 傻瓜相机 和手机 云服务也使用 JPEG 因为它的兼容性 十分强大
但 JPEG 也有很多局限 其中之一就是 压缩效率较低 过去几年 人们开发了 一些新的压缩算法 可以实现比 JPEG 更高的压缩率 同时还能保持 图像的画质和观感 没有大的变化
而辅助图像 例如透明度 和深度则很难得到 JPEG 支持
并且 近年来也开发了 很多呈现和显示 动态图像的方法 Apple 的 Live Photo 便是其中之一 不幸的是 JPEG 并不支持动态图像 我们看一下 JPEG 和 ITU/MPEG 所提出的压缩标准的 历史沿革
JPEG 在当初 确实成果显著 尤其是在压缩效率方面 即便与现在相比 进步也相当显著 如幻灯片所示 JPEG 最终定型 成为标准 是在 1992 年 已经是 25 年前了
自那之后 人们提出了一些 新的压缩标准 最新提出的标准 是 HEVC 作为比较 这是 HEIF 在时间线上的位置 它于 2015 年定型 Apple 花了大量时间 寻找接替 JPEG 的标准 也评估了很多选择 我们的需求十分广泛 新的文件格式要能支持 JPEG 现有的所有功能 但与此同时 性能表现要更为出色 不仅要兼容 专业摄影工具 还要兼容网页和云 新格式还要具备 高度灵活性和可扩展性 来适应日新月异的 摄影生态环境 这张表列举了 Apple 认为 是重中之重的一些特性 压缩要达到顶尖水平 无论是有损压缩 还是无损压缩 它既要能应对 图像文件 也要能压缩 文本和图形 这种格式要适用于 现代 CPU GPU 和 ESP 具有的硬件加速 和编解码过程 性能和表现 在我们的要求中 权重是相当大的 它还要支持高深度 和广色域这些 消费级设备拍摄的照片上 最先进的技术
要能够压缩 4:4:4 的色彩采样 也要能描述 HDR 内容 包括 HDR 元数据 传递函数 和色彩空间定义
至于辅助图像 例如透明度和深度 也需要在图像文件中 有通用的定义空间 新的编辑工具才能 应用辅助数据来 提供全新的呈现 和编辑体验 近几年 人们也开发了 新的方式来呈现 和显示动态图像 Apple 推出的 iPhoto 便是其中一例 iPhoto 既能呈现 动态内容 也能呈现 静态图像
新的通用格式要 能够高效存储 动态图像信息 理想状态下 要使用帧间压缩技术 还要能指导播放器 进行呈现 例如 呈现循环的序列
新格式还应该 支持同一文件内 存储多个图像 例如一组多重曝光的图像 或是立体图像 这样便可以 为开发和应用 新的计算摄影算法 提供帮助
以多种方式呈现 同一图像文件的功能 也非常重要 例如 多分辨率呈现 这涉及到不断地 增加细节层次 或是能够呈现 由不同编解码器 编码的同一图像
图块也是新格式 必须采用的一项功能 这样便可以对任意大小的图片 采取可缩放的操作 图块相关的内容 会在稍后提到
新格式还要支持 文件中每个图像 相关的丰富元数据 同时也要支持时间数据 例如 一组照片序列 包含的时间数据
新格式还需要 能够包含 其他种类的元数据 例如音频或文本 最后一点 新格式 要有灵活性和可扩展性 为未来开发和应用 打下坚实基础 我们相信 HEIF 能够满足 以上所有需求
什么是 HEIF HEIF 是 高效图像文件 的英文缩写
第一版技术参数 与 2015 年六月成为 ISO 标准
第二版也会 迅速面世 HEIF 的 C 类参考样板 已经公布 可以通过 访问这个链接获得 参考样板可以 指导 HEIF 的应用 也能帮助了解 相关技术参数 顺便一提 开源项目 GPAC/MP4Box 已于最近 针对 C 类文件 提供了基本功能 视频行业很久以前 就认识到 容器 和编解码器是不同的实体 将二者分开 有很多好处 但图像行业过去认为 容器和编解码器 应当紧密结合 JPEG 也不例外 图像行业也要做出这样的区分 这合情合理 因为这样才能 最大化灵活性 这正是 HEIF 所做的 它指定了一种结构格式 可以成为单张图像的容器 也能用于图像序列
它的基础是广泛应用的 ISO 基本媒体文件格式 这种格式又基于 Apple 的 QuickTime 技术
它还应用并改进了 在 MP4 的技术参数 和 MPEG-21 的技术参数中 指定的结构 各种序列 例如连拍快照和动画 是以轨道 或基于时间的媒体存储的 类似 MP4 标准 编码图像和衍生图像 则以项目的形式存储 类似 MPEG-21 标准 任何压缩编解码器 都能包含在 HEIF 容器中 HEIF 的技术参数中 直接提及了 HEVC H.264 和 JPEG 的扩展名 主类 以及解码器配置
HEIF 文件的基本构成部分 类似 ISO 基本媒体文件格式 这种数据格式 称为框 框由一个 四个字符的类构成 比如在右边的例子中 有 ftyp 框 元框和 mdat 框
框的大小由 框的字节数和载荷 所决定 元框完整描述了 这一文件内 包含的全部内容 元框的处理器类型 如果有人熟悉 ISO 基本媒体文件格式的话 应该清楚 元框的处理器类型 是 PICT 读取器便理解为 这个元框处理的是图像 在深入探讨 HEIF 文件 的结构之前 先来谈谈 文件的扩展名
标准明确规定 HEIF 文件的扩展名 依压缩单张图片 或图片序列 的编解码器而定 所有可能的扩展名 都能在这张表中找到 iOS 11 可以拍摄并存储 HEIF 图像 使用的 是 HEVC 编解码器 因此 你们经常遇到的扩展名 会是 .HEIC
在 iOS 11 和 macOS 10.13 中 我们支持全部三种 HEIF 文件的解码 以及显示 请注意 如果 HEIF 文件 包含序列 那么 它的扩展名 会与只包含单张图像 的 HEIF 文件有所不同 我们现在就来详细了解 HEIF 文件及其结构 首先先来谈谈 项这个概念
HEIF 文件中 每一个元素 就是一个项
项包括编码项 如 HEVC 编码的帧 或图块
还有派生项 如图像叠加 或图像栅格
也有元数据项 例如 EXIF XMP 或 MPEG-7 的元数据 每个项也有 与之相关联的 几个属性 由此 一切联系都通过 将项与其他项或属性 相互连接的结构 来实现
图像也是项 又因为多张图片 能存储在一个文件内 HEIF 标准通过 分配不同角色将其区分 HEIF 标准规定了一些角色 这些角色都能在 这张表中找到 主图像 或称封面图像 是一个文件的 代表图像
主图像应当在 播放器无法获取 或解码其他信息 的时候显示 一个 HEIF 文件 只能存在一个主图像 HEIF 文件中 其他的原分辨率图像 称为原图像
文件的缩略图 即是低分辨率的 原图像 一个 HEIF 文件 可以存储多个 不同尺寸的缩略图 这对超高分辨率图像的 渐进解码 以及显示 大有帮助 辅助图像是指 补充原图像的图像 例如透明度层 或深度映射 辅助图像可以在 辅助显示原图像 但一般不显示 隐藏图像是指 永远不应显示的图像 它可以在文件中 以输入图像 或派生图像的形式存在 iOS 11 对 HEIF 的应用中 大量使用了隐藏图像 称为图块 每个图块都用来 显示最终的原图像或成品图像 派生图像 是指对特定输入图像 进行特定操作 渲染得到的结果 例如 此前提到的 成品图像便是 拼接不同图块后 渲染得到的
等价图像是指 可用于替换的图像 可以用不同的编解码器编码得到 服务器可以将 相同的输入内容 分发给解码能力不同的 播放器 一旦每张图片 都有了对应的角色 便可赋予其相关联的属性
属性可以是描述性的 也可以是编辑性的 可以是必需的 例如编解码器的 初始化信息 也可以是非必需的 这张表列举了了 HEIF 文件中 图像具有的 部分描述性属性 这里可以找到 最常见的一些信息 例如图像尺寸 颜色信息 辅助图像 如透明度和深度 还有 编解码器初始化的 一些配置参数 这张表中 则列举了部分 编辑性属性 这些属性 能够告诉 HEIF 分析器 图像需要经过 一些额外修改 才能最终显示 例如 清除光圈 这一属性会告诉 HEIF 读取器 必须先裁剪图像 再对图像进行 最后渲染 每张图像的所有属性 都包括在同一个 名为属性框的项目中
借此 每张图片 都可以通过属性框 来关联属性 我们会用一个例子 来描述关联属性 是如何工作的
左边的 HEIF 容器 表示这个文件 包括一个主图像和一个缩略图 主图像又由 四个图块组成 项属性框 即 ipco 框 包含所有解码器配置 还包含着 主图像 图块
和缩略图的尺寸数据 请注意 这个框中 顺序是有意义的 右边的关联框 即 ipma 框 将所有属性 按照位置 与文件中的项 ID 关联 如前所述 这个文件中共有六个项 一个图像 四个图块 和一个缩略图
项 1 至 4 是图块 是隐藏图像 属性是位置 1 即解码器配置 和位置 2 即尺寸 为 500 x 500 像素 项 5 为 主图像
只具有尺寸属性 因为这是一个 派生图像 它的尺寸 为 1000 x 1000 像素
接下来 我们会简要谈一下 HEIF 中的图像序列 嵌入序列的 HEIF 文件 包含 moov 框 和 moov 框的分框 等框体
moov 框的完整定义 包含在 ISO MP4 文件格式 的技术参数中 HEIF 便是由此而来
每个图像或取样的序列 都由 trak 框描述 其中包含了播放轨道 所需要的一切 时间信息
HEIF 规定了一个全新的 处理图像的轨道处理器 称为 pict. 主要区别在于 音频或视频 包含的时间信息 能够用于同步播放进度 图像序列轨道 包含的时间信息则能够代表 连拍快照的拍摄时间 或是派生幻灯片中 每个单张图像 建议的显示时间
也可以为图像序列 指定角色 例如 HEIF 文件 内嵌缩略图轨道 或辅助图像轨道 并与原图像轨道 相关联
HEIF 最重要的特性之一 就是能在文件中 嵌入创造者的指令 并以此来实现 对播放的控制 例如 编辑列表 能够改变每个采样的 播放顺序和速度
HEIF 还允许 编辑列表的重复 可以实现循环动画等功能
重复的次数 可以为特定值 也可以无限重复 由于 HEIF 中 轨道符合 ISO 标准 便可以实现帧间预测 帧间预测是指 移除部分编码信息 而通过此前 或之后的相似帧 来进行预测 并生成当前帧 这一点 对于压缩 意义非凡
帧间预测也能 延缓解码时间 因为必须 先解码前一帧 才能够解码 当前帧
HEIF 允许帧间预测 但也在文件中 限制了帧与帧的 相互依赖 比方说 每一个预测生成的图像 都只能指向已经预测生成的图像 即内部帧 如此一来 解码序列中 每一帧的时间 就可以预先确定 最后一点 HEIF 图像 可以分割成不同图块 图块是指图像中的 长方形区域 它们在 HEIF 文件中 是完全独立的项 尺寸可以相同 也可以不同 如果尺寸不同 那么相对位置属性 便可以描述它们 在最终图像中所处的位置 如果尺寸相同 那么最终图像便会以 栅格的形式描述 因为以下几点 图块使得 HEIF 高度灵活 播放器可以充分利用并行处理 缩减解码时间 比方说 每个图块 都可以分别 且单独解码
图块可以降低改变图片尺寸 所需的内存大小 因为无需解码 整张图片之后 再进行操作 每个图块 都能单独解码 并改变大尺寸 再置于 较小的缓存中进行渲染 裁剪图像速度也很快 因为播放器不需要 解码整个图像 再提取特定区域 这一属性 在缩放操作中也格外有用 例如 一张数十亿像素的图像 可以轻而易举地解码 显示 放大 而不需要 解码整张图像 并占用数十亿位的 缓存 同时 图块还可以 用作编码工具 智能编码器 可以根据图块内容的不同 做出不同选择 Apple 在使用 HEIF 的过程中 大量使用了图块 但要注意 HEVC 的技术参数 同样支持 将每帧分成图块 用作并行处理 Apple 对图块的应用 并非按照 HEVC 的规定 而是每个图块 都是一个完整的 HEVC 帧 我们称其为系统图块
接下来 我们谈谈 HEVC 也是 Apple 用来压缩 HEIF 照片的编解码器 选择 HEVC 有两大原因 首先 HEVC 是压缩标准领域 最先进的技术 在画质相同的情况下 HEVC 的压缩率平均 是 JPEG 压缩率 的两倍 第二 HEVC 开始得到 绝大多数 CPU 和 GPU 的硬件支持 例如 Intel 的第六代 Core 处理器就包含 对 HEVC 的 硬件支持 这意味着 表现出众 而不需要牺牲续航时间
一些帧内编码工具 也加入到了标准之中 使得 HEVC 的表现超过了 JPEG 接下来的几张幻灯片 会提到一些 你会注意到 我们总会讲到灵活性 首先是区块尺寸 JPEG 将图像分割成 由 8 x 8 像素的区块构成的栅格 接下来 这些区块被描述 转化和量化 HEVC 的灵活性 使其能将图像 划分为大至 64 x 64 像素 小至 4 x 4 像素的区块 也可以在区块内部 灵活转换尺寸 标准新增了 离散尺寸转换功能 作为可选项 还为编码系数的编组 增加了三种可用的 扫描顺序 接下来是区块预测
JPEG 支持预测 8 x 8 大小区块 左上角的系数 这一系数又称 DC 分量 或恒定分量 依据则是这一区块 左侧的区块 HEVC 又增加了 在区块内部预测每一个像素值 的功能 角度预测范围 最多可达 35 种 还可以运用 相邻区块中 包含的相似信息 来消除冗余信息 这也是 HEVC 内置的 高效工具之一
下一项是熵编码
JPEG 使用 Huffman 编码 作为统计编码的引擎 这是为了将 可变长编码 赋值给输入的系数
赋给系数的长编码 长度越短 效率也越高
而 HEVC 则是采用 一种算法编码器 称为 CABAC 是 上下文参考 二进制算术编码 的缩写 CABAC 因 压缩率显著高于 其他大多数熵编码算法 而知名
下一项是量化 量化是一项有损 压缩技术 通过 压缩一个取值范围 为单一量化值而实现 JPEG 对每个 8 x 8 的区块使用全局 量化矩阵
HEVC 则在量化矩阵之上 增进了灵活性 添加了 为每个区块 赋不同的量化参数 的功能 这样一来 智能编码算法 就能压缩更多 图像上更多的区域 而人类视觉系统 就更难捕捉到人为差异 例如 频率高的 内容 再接下来是去除区块边界 这项工具仅有 HEVC 支持
人工边界是指 区块边缘可见的 不连续区域 HEVC 包含去区块滤波器 这种滤波器应用于 区块边缘的像素 使过度更平滑 视觉效果也更好 SAO 也就是 取样自适应偏移 是 HEVC 中一道额外的滤波器 应用于去区块滤波器 作用的结果 来进一步 改善图像质量 这是一种局部滤波器 能够 减弱边缘振荡效应 在图片的某些区域 改变取样密度 以提升画质
这两项技术都能 使图像更赏心悦目 尤其是压缩率很高 的时候
我们已经讲了很多 HEIF 和 HEVC 的特性 和工具 我想再花一点时间 讲一讲 iOS 11 拍摄的 HEIF 文件 的一些特点 首先 iOS 11 上 拍摄的图像 扩展名 为 .HEIC 因为使用了 HEVC 作编解码器
用于压缩图像的 HEVC 配置文件 是主静止配置 我们还使用 HEVC 的 单色配置文件处理深度数据
图像使用 512 x 512 像素 的区块进行编码 区块以栅格的形式 进行定位 覆盖 整个图像 缩略图为 320 x 240 像素 的图像 用 HEVC 编码
是常见 160 x 120 像素大小 JPEG 缩略图的四倍 这有助于在高像素密度 的现代显示屏上 显示图像时 呈现 更高的缩略图画质
EXIF 元数据也包含在 HEIF 文件中 像 JPEG 一样 以确保向后兼容性
深度数据以 辅助图像的形式存储 相关元数据存储在 与深度图像相关联的 XMP 载荷中 最后 讲一下 文件生成
HEIF 标准没有 读取器在文件顶层 读取框体的 顺序 但我们 发现 排列成特定顺序 能够极大帮助 分析器和解码器 比方说 让缩略图排位靠前 可以分析并显示 大量 HEIF 图像 而不需要先分析 整个文件
为实现高速传输 或网页应用 一旦接受到元框 那么就可以获取 文件的全部信息 读取器就可以 配置解码器和 显示过程 而不需要 获取完整的编码数据
让我们来总结一下 今天讲到的内容 摄影界需要一种 更好的图像文件格式 来取代垂垂老矣的 JPEG 我们逐一分析了 Apple 认为 寻找 JPEG 替代品 最为重要的 一些要求 我们相信 HEIF 能够满足全部这些要求 它灵活性极高 能高效 简洁地 运用 iOS 11 技术上的进步 它的可扩展性又能 让 HEIF 为未来开发运用 打下坚实基础 我们后来分析了 HEIF 标准的 一些特性
最后 我们介绍了 让其成为不二之选的 HEVC 工具 既包括 提升压缩效率的 还包括 对硬件架构友好 能够提升表现 和性能的 要了解更多信息 请访问第 513 号会议 “High Efficiency Image File format(高效率图像文件格式)” 的网址
如果你继续参与 WWDC 我们欢迎你参加 与 HEIF 和 HEVC 有关的 两场会议 感谢观看本场会议 祝你在 WWDC 2017 过得愉快
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。