大概从2010年开始,每一代视频压缩标准会有它对应的静态图像格式,比如VP8的WebP,H.265的HEIC,AV1的AVIF等。
如果从编解码角度来看这个现象,实际上也比较容易理解。一张静态图片实际上是利用对应的视频编码格式,且只用帧内编码一帧得到码流。而一张动图是使用对应的视频编码格式,使用帧内或帧间技术编码多帧得到的码流,或者再额外给码流加上metadata数据和ISOBMFF封装格式。
今天要说的AVIF图片,就是使用了AV1视频编码格式的新一代图片类型。
从2019年诞生之后,图片类应用相关从业者们已经陆续介绍过这种新型图片格式,如下所示:
但所谓”外行看热闹,内行看门道”,作为视频编解码从业者,AVIF和老一代图片格式的压缩率对比测试并不是关注重点,我们应从图片压缩技术本身和底层原理去分析和理解,AVIF图片格式为什么会有更好的图片压缩率收益。
要研究压缩收益,首先需要有一个合适的源码。正如AV1视频编码标准和源代码由AOM开源一样,AVIF图片格式标准也是由AOM开源。
1.编码得到avif图片
github上目前有2个avif相关的开源项目可使用,分别是libheif和libavif。前者我在之前介绍HEIF格式的时候提到过,不再赘述,而后者则属于是AOM的官方项目。
对比这两个项目不难发现其相同之处,都支持使用libaom/svt-av1/rav1e这几个开源AV1编码器项目来完成avif编码,使用开源dav1d解码器项目完成图片解码。因而也可以认为,avif图片实际上就是av1编码器库和解码器库的应(套)用(壳)。
下面以libavif这个开源项目为例,介绍如何得到一些AVIF格式图片。
源码下载以后,我使用的编译命令如下:
cmake -DCMAKE_BUILD_TYPE=Release -DAVIF_LOCAL_SVT=1 -DAVIF_CODEC_DAV1D=1 -DAVIF_CODEC_SVT=1 -DBUILD_SHARED_LIBS=0 -DAVIF_BUILD_APPS=1 -DAVIF_BUILD_EXAMPLES=1 ../ make -j 10
其中AVIF_LOCAL_SVT=1表示使用本地checkout的SVT-AV1代码作为avif的编码器,而AVIF_CODEC_DAV1D=1表示avif图片解码使用dav1d。
这里AVIF_BUILD_APPS=1表示编译并生成avif图片的编码和解码可执行程序。而AVIF_BUILD_EXAMPLES=1是要求编译libavif提供的example。最终编译得到如下程序:
接着运行avifenc -help可看到生成avif编码器和解码器版本以及它的使用说明。
尝试用avifenc编码一张avif图片,目前它支持直接输入JPEG/PNG图片,如下:
这里提示原图是YUV444颜色格式,而目前编译得到的avifenc只支持YUV420。那就强制输出YUV420格式的avif,如下:
上面得到的avif图片如下所示。在macOS Ventura上可直接预览播放。
目前能支持AVIF图片显示的操作系统如下图所示,(iOS16和macOS Ventura都是2022年发布的):
如果你的系统还不支持AVIF图片,可以用avifdec解码avif图片以后再查看内容。
2.分析avif图片码流
对于我来说,更关心是否能够用码流分析软件来获取AVIF图片更多信息,比如图片里每个块的编码模式,块划分,qindex的大小信息等等。
如何将一张avif图片转成av1的码流呢?
其实使用ffmpeg就可以,不过前提是你的ffmpeg在编译时开启了dva1d,使用ffmpeg命令如下:
ffmpeg -i rally.avif -c:v copy rally.ivf
在得到avif图片对应的ivf格式码流以后,就可以使用码流分析软件来查看了。
这里给大家对比一下avif图片和它对应的ivf码流的差异,可以看到,主要是AV1的裸码流封装上的差异。
然后可以用Elecard软件打开这个avif图片对应的ivf码流,如下图所示:
这样我们便可以对avif图片的编码器去做进一步分析和优化了。
3.小结
不管是HEIC还是AVIF图片格式,当我们把它们对应的HEVC和AV1编码器和解码器性能优化好以后,这些图片格式也就手到擒来了。AVIF图片格式并没有新的东西,对于图片使用者来说,从体验感上这和JPEG没什么区别;从它所用到的编解码技术来说,比AV1视频就更简单了,而且它还完全是和HEIF封装格式兼容。
至于说AVIF图片的工程和业务落地,那是另外一个话题了,如果有兴趣,可以去看看今年B站发的AVIF落地文章。不过我看他们文章的作者里面好像没有看到编解码相关人员,那这个AVIF的落地效果和收益是不是要打个问号了呢?
最后,关于AVIF图片格式推荐大家阅读这篇博客:
https://netflixtechblog.com/avif-for-next-generation-image-coding-b1d75675fe4
如果对新的图片类型感兴趣,欢迎大家加群讨论。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。