前两天,公司新入职的小胡跑过来问:为啥HEIF文件在Windows上无法打开呀?手动“黑人三个问号”表情包。
打开肯定是工具不对呀,来我试试,自己上网查了一些HEIF测试文件,测试图片下载路径:
https://trac.ffmpeg.org/attachment/ticket/6521
感觉应该是没有插件的意思,于是上Microsoft Store上更新HEIF图像扩展,如下:
然而,喔嚯,仍然无法打开,哎呦喂,怎么意思呢?不过有提示语如下:
在HEIF描述中有这样一段话,说明了该问题:
所以继续安装HEVC的扩展一下:
需要付费才可以用,劝退,劝退
不过作为一个码农和小胡眼中的“大佬”还是不甘心,所以继续查找其他方法,执行如下命令,直接按照命令安装即可:
start ms-windows-store://pdp/?ProductId=9n4wgh0z6vhq
之前的文件即可正常打开了,这下小胡崇拜的看着自己,感觉整个人都是金碧辉煌的样子。
既然可以正确打开,那就顺手学一下HEIF图像格式吧,一方面解决小伙伴的疑惑,另一方面积累一些图像格式基础知识。经过下班时间一通搜索,查找一些资料,
https://nokiatech.github.io/heif/
https://github.com/nokiatech/heif
HEVC标准于 2013 年完成,同年开始将其用于静态图像存储。由此产生的高效图像文件格式 (HEIF) 标准提供了具有竞争力的图像数据压缩率,以及支持图像序列和非破坏性编辑等其他一些功能,这就是HEIF文件产生的背景。
HEIF 基于 ISOBMFF 标准,可以存储根据 HEVC 标准编码的图像数据。与其他几种图像文件格式相比,基于 ISOBMFF 的 HEIF 非常灵活。HEIF 被设计用于存储一个或多个图像和图像序列。图像和图像序列之间的基本区别在于,图像序列还可以包含时序信息,并且允许它们使用 HEVC 帧间编码。相反,图像和图像集合没有时间结构,只允许帧内编码。
在 HEIF 文件中保存有关图像和图像序列的信息以不同的方式完成。静止图像(称为图像项)存储为 ISOBMFF 项,其文件大概结构如下:
如果对于MP4封装格式有所了解的童鞋,看到这个结构,是不是感觉非常亲切,因为MP4的类似结构组成:
HEIC 表示 HEIF 结构中的单个平面图像。HEIF 是一种非常复杂的格式,它可以包含多个不同颜色空间的子图片,它们相互叠加,动画等等。HEIC 不是 HEIF 的官方有限子集,但其想法是,除了更好的 jpeg 之外不期望任何东西的解码器仍然可以处理它。毕竟,这只是一张照片,而不是拼贴画。
https://mpeg.chiariglione.org/standards/mpeg-4/iso-base-media-file-format
至于HEIF和其他格式的优缺点对比,在下面的链接中有介绍,大家自行查阅即可:
https://nokiatech.github.io/heif/technical.html
另外在看一个公众号时候,codec大佬也分享过类似知识,还介绍了一些开源库的内容,大家可以学习和关注一下:
个人查看完之后感觉:HEIF图像格式在相同的压缩体积下,编码质量最好,而且可以提供单帧图像,多帧图像序列等种类的编码,同时HEIF可以兼容16位配色方案,对于其他类似HDR场景就比较适合了。不过目前看兼容性比较不好,毕竟一些专利的限制比如HEVC的专利风波,导致不是所有的厂商和播放器可以支持的,缺乏与各种系统和设备联动。
以上是这次的学习过程。
彩蛋:自己讲图像传输到华为手机上时,竟然可以打开,说明Android手机可以支持,然后翻看代码,在framework中有类似解析过程,那新的一篇文章尝试走读一下该部分内容,做到真正掌握HEIF的目的。


我是一枚爱跑步的程序猿,很多内容属于自学内容,文中难免会出现一些错误或者不准确的地方,恳请大家批评指正。
继续阅读
阅读原文