安装libavif-avifenc工具进行图片压缩转换

安装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
2
wget https://github.com/AOMediaCodec/libavif/archive/refs/tags/v0.10.1.tar.gz
tar -xvf v0.10.1.tar.gz

安装必要的软件:

1
yum install cmake ninja-build yasm

进入解压后的文件夹,准备开始编译:

1
2
cd libavif-0.10.0/ext/
./aom.cmd

编译aom库

我在centos7中进行编译的时候,首先遇到了git clone项目失败的问题,于是只能根据aom.cmd文件的内容一条一条手动执行了

首先到aom项目下载了压缩包直接上传解压,下载页面:https://aomedia.googlesource.com/aom/+/refs/tags/v3.4.0-rc1

跟clone效果是一样的,只是要注意,下载的压缩包解压时,先创建aom文件夹,再把压缩包移动到文件夹中解压:

1
2
3
4
5
rz
mkdir aom
mv aom-8229270b8700cacdd2c5e66733ebeeee162a8573.tar.gz ./aom/
cd aom
tar -xvf aom-8229270b8700cacdd2c5e66733ebeeee162a8573.tar.gz

继续按照aom.cmd中的代码进行编译:

1
2
3
mkdir build.libavif
cd build.libavif
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 ..

然后又出现了这样的错误:

1
2
3
4
5
CMake Error at CMakeLists.txt:11 (cmake_minimum_required):
CMake 3.6 or higher is required. You are running version 2.8.12.2


-- Configuring incomplete, errors occurred!

原来系统中安装的cmake版本不对,安装正确版本即可:

1
2
3
yum install epel-release cmake3
yum remove cmake
ln -s /usr/bin/cmake3 /usr/bin/cmake

继续编译:

1
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 ..

看到这样的输出就是编译成功了:

1
2
3
-- Configuring done
-- Generating done
-- Build files have been written to: /root/libavif-0.10.1/ext/aom/build.libavif

然后再继续:

1
2
ninja
cd ../..

编译libavif收尾

完成aom库编译后,最后两步就可以完成aviflib编译了:

1
2
3
4
5
mkdir build  # 这里是在libavif-0.10.0文件夹下面
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DAVIF_LOCAL_AOM=1 -DAVIF_CODEC_AOM=1 -DBUILD_SHARED_LIBS=0 -DAVIF_BUILD_APPS=1 ../
make -j4
make install

在ubuntu20.04上面安装

基本过程是一致的,只是在过程中遇到了其他报错:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- libavif: Enabling warnings for GCC
-- Checking for module 'libyuv'
-- No package 'libyuv' found
-- libavif: libyuv not found; libyuv-based fast paths disabled.
-- libavif: Codec enabled: aom (encode/decode)
CMake Error at /usr/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:458 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.18/Modules/FindJPEG.cmake:100 (find_package_handle_standard_args)
CMakeLists.txt:486 (find_package)


-- Configuring incomplete, errors occurred!

根据提示安装libyuv 依赖:

1
2
3
4
5
6
7
git clone https://chromium.googlesource.com/libyuv/libyuv
cd libyuv/
mkdir out
cd out
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
make package

make最后一步会出现这样的错误:

1
2
3
4
5
6
7
8
9
10
CMake Error at /usr/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake:822 (message):
RPM package requires rpmbuild executable
Call Stack (most recent call first):
/usr/share/cmake-3.22/Modules/Internal/CPack/CPackRPM.cmake:1968 (cpack_rpm_generate_package)


CPack Error: Error while execution CPackRPM.cmake
CPack Error: Problem compressing the directory
CPack Error: Error when generating package: libyuv
make: *** [Makefile:71: package] Error 1

这是因为 debian 系列系统不支持 rpm 包,也没有相关构建工具,只需要把目录中的libyuv-0.0.1823-linux-amd-64.deb包进行安装即可:

1
dpkg -i libyuv-0.0.1823-linux-amd-64.deb

然后补充编译依赖,继续编译:

1
2
3
4
5
apt install libjpeg-dev libpng-dev
cd libavif/build
cmake -DCMAKE_BUILD_TYPE=Release -DAVIF_LOCAL_AOM=1 -DAVIF_CODEC_AOM=1 -DBUILD_SHARED_LIBS=0 -DAVIF_BUILD_APPS=1 ../
make -j4
sudo make install

安装后会在 /usr/local/bin 下生成两个可执行文件avifdec和 avifenc 两个文件,分别是解码器和编码器

在windows上安装

windows上的安装相对简单,可以直接下载别人编译好的二进制文件:

进入链接:https://ci.appveyor.com/project/louquillio/libavif

点击Artifacts

直接下载两个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数量进行调整即可,可以显著提升速度。

作者

Haoran

发布于

2022-06-06

更新于

2022-06-06

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×