安装libavif-avifenc工具进行图片压缩转换
libavif是一个用来把其他格式的图片转换成avif格式的命令行工具,项目源地址是:https://github.com/AOMediaCodec/libavif
尽管转换avif还有其他工具,例如squoosh:
但是squoosh提供的命令行工具,我在windows上使用的时候一直会报错,为了使用命令行工具来进行图片的批量转换,我最终还是选择了使用libavif,事实证明,我的选择是正确的。
下面就是libavif的安装与使用
在centos系统上安装
我所安装的centos系统是centos7,其余的centos系统没有试过。
首先,根据libavif库作者所述:
For now, it is recommended that you check out/use tagged releases instead of just using the master branch. I will regularly create new versions as bugfixes and features are added.
我们在libavif库的release页面下载最新的tar.gz包并进行解压:
1 | wget https://github.com/AOMediaCodec/libavif/archive/refs/tags/v0.10.1.tar.gz |
安装必要的软件:
1 | yum install cmake ninja-build yasm |
进入解压后的文件夹,准备开始编译:
1 | cd libavif-0.10.0/ext/ |
编译aom库
我在centos7中进行编译的时候,首先遇到了git clone项目失败的问题,于是只能根据aom.cmd文件的内容一条一条手动执行了
首先到aom项目下载了压缩包直接上传解压,下载页面:https://aomedia.googlesource.com/aom/+/refs/tags/v3.4.0-rc1
跟clone效果是一样的,只是要注意,下载的压缩包解压时,先创建aom文件夹,再把压缩包移动到文件夹中解压:
1 | rz |
继续按照aom.cmd中的代码进行编译:
1 | mkdir build.libavif |
然后又出现了这样的错误:
1 | CMake Error at CMakeLists.txt:11 (cmake_minimum_required): |
原来系统中安装的cmake版本不对,安装正确版本即可:
1 | yum install epel-release cmake3 |
继续编译:
1 | cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 .. |
看到这样的输出就是编译成功了:
1 | -- Configuring done |
然后再继续:
1 | ninja |
编译libavif收尾
完成aom库编译后,最后两步就可以完成aviflib编译了:
1 | mkdir build # 这里是在libavif-0.10.0文件夹下面 |
在ubuntu20.04上面安装
基本过程是一致的,只是在过程中遇到了其他报错:
1 | -- libavif: Enabling warnings for GCC |
根据提示安装libyuv 依赖:
1 | git clone https://chromium.googlesource.com/libyuv/libyuv |
make最后一步会出现这样的错误:
1 | CMake Error at /usr/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake:822 (message): |
这是因为 debian 系列系统不支持 rpm 包,也没有相关构建工具,只需要把目录中的libyuv-0.0.1823-linux-amd-64.deb包进行安装即可:
1 | dpkg -i libyuv-0.0.1823-linux-amd-64.deb |
然后补充编译依赖,继续编译:
1 | apt install libjpeg-dev libpng-dev |
安装后会在 /usr/local/bin 下生成两个可执行文件avifdec和 avifenc 两个文件,分别是解码器和编码器
在windows上安装
windows上的安装相对简单,可以直接下载别人编译好的二进制文件:
进入链接:https://ci.appveyor.com/project/louquillio/libavif
直接下载两个exe文件,然后将其移动到系统path中的某个目录,或者移动到某个目录,在系统path中添加此目录,就可以开始使用了
使用avifenc进行图片转换
avifenc具体的参数可以查看https://github.com/AOMediaCodec/libavif/blob/main/doc/avifenc.1.md
或者运行
1 | avifenc -h |
在实际使用中,我通常使用两种参数,一种是将图片进行缩小的同时,保持视觉质量的基本不变:
1 | avifenc #input -o # output --min 0 --max 24 -a end-usage=q -a cq-level=12 -a tune=ssim -a deltaq-mode=3 -a sharpness=3 --jobs 8 |
另一种是制作缩略图,因此图片的视觉质量可以有所下降:
1 | avifenc #input -o # output --min 0 --max 63 -a end-usage=q -a cq-level=39 -a tune=ssim -a deltaq-mode=3 -a sharpness=3 -y 420 --jobs 8 |
–jobs 8的作用是开启多线程,根据cpu数量进行调整即可,可以显著提升速度。
安装libavif-avifenc工具进行图片压缩转换