libavif-toolsをインストールしてJpegからAVIFへ一括変換。
AVIFを導入しているときの覚書。
AVIFがベースライン(すべての主要なブラウザ エンジンで安全に使用できる)になったのは2024年1月。
環境: CentOS Stream 9
今ならコマンドラインエンコーダavifencで簡単に変換できる。
- AVIF を使用してサイト上の画像を圧縮する | Articles | web.dev
- GitHub - AOMediaCodec/libavif: libavif - Library for encoding and decoding .avif files
1.dnf経由でインストール
dnf上にあったのでインストールする。
# dnf install libavif-tools
ただしdnf上はv0.11.1だった。
# dnf info libavif
Name : libavifVersion : 0.11.1Source : libavif-0.11.1-5.el9.src.rpmFrom repo : epel
実行してみる。
# avifenc key-visual.jpg key-visual.avif
ファイルサイズを比較するとJpeg: 309KB, Webp: 76KB, Avif: 49KB
一括で変換するコマンドはこちら(Gemini 1.5 Proに教えてもらった)
サブディレクトリのファイルも変換する。
# find . -name "*.jpg" -print0 | xargs -0 -I {} sh -c 'f="{}"; avifenc "$f" "${f%.*}.avif"'
2.ソースからビルド
最新ライブラリを使うとどうなるか試してみる。
dnf経由をアンインストール。
# dnf remove libavif-tools
記事通りにやってみる。
参考: AVIF を使用してサイト上の画像を圧縮する | Articles | web.dev
ビルドに必要なツールとライブラリをインストール。
# dnf install cmake ninja-build
# dnf install zlib-devel libpng-devel libjpeg-devel
git clone
# cd /opt/software/
# git clone -b v0.9.1 https://github.com/AOMediaCodec/libavif.git
# cd libavif/
# git tag
# git checkout v1.1.1
libaom を取得してビルド
# cd ext/
# ./aom.cmd
エラー
--- aom_configure: Detected CPU: x86_64CMake Error at build/cmake/aom_configure.cmake:178 (message):Unable to find assembler. Install 'yasm' or 'nasm.' To build withoutoptimizations, add -DAOM_TARGET_CPU=generic to your cmake command line.Call Stack (most recent call first):CMakeLists.txt:73 (include)
yasmをインストールして再実行。
# dnf install yasm-devel
# ./aom.cmd
avifenc をビルド。
# cd ../
# mkdir build
# cd build
# cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DAVIF_CODEC_AOM=1 -DAVIF_LOCAL_AOM=1 -DAVIF_BUILD_APPS=1 ..
エラー
-- Package 'libyuv', required by 'virtual:world', not foundCMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find libyuv (missing: LIBYUV_LIBRARY LIBYUV_LIBRARIESLIBYUV_INCLUDE_DIR) (found version "")Call Stack (most recent call first):/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)cmake/Modules/Findlibyuv.cmake:52 (find_package_handle_standard_args)CMakeLists.txt:210 (find_package)CMakeLists.txt:229 (check_avif_option)
libyuvをインストールして再実行。
# dnf install libyuv-devel
# cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DAVIF_CODEC_AOM=1 -DAVIF_LOCAL_AOM=1 -DAVIF_BUILD_APPS=1 ..
WARNINGが出た。
CMake Warning at CMakeLists.txt:582 (message):libavif: No decoding library is enabled.
デコードだから関係ないのかな?
ビルド実行。
# make
変換実行。
# ./avifenc key-visual.jpg key-visual.avif
エラー
Encoding with codec 'none' speed [6], color quality [60 (Medium)], alpha quality [100 (Lossless)], tileRowsLog2 [0], tileColsLog2 [0], 4 worker thread(s), please wait...ERROR: Failed to encode image: No codec available
バージョンが最新だからかな?
記事の通りv0.9.1にして再実行してみる。
# cd ../
# git clean -f
# rm -rf build/
# git checkout v0.9.1
# cd ext/
# ./aom.cmd
# cd ../
# mkdir build && cd build
# cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DAVIF_CODEC_AOM=1 -DAVIF_LOCAL_AOM=1 -DAVIF_BUILD_APPS=1 ..
# make
変換実行。
# ./avifenc key-visual.jpg key-visual.avif
Directly copied JPEG pixel data (no YUV conversion): key-visual.jpgSuccessfully loaded: key-visual.jpgAVIF to be written: (Lossy)* Resolution : 1920x1200* Bit Depth : 8* Format : YUV444* Alpha : Absent* Range : Full* Color Primaries: 2* Transfer Char. : 2* Matrix Coeffs. : 6* ICC Profile : Present (3144 bytes)* XMP Metadata : Absent (0 bytes)* EXIF Metadata : Absent (0 bytes)* Transformations: NoneEncoding with AV1 codec 'aom' speed [6], color QP [24 (Medium) <-> 26 (Medium)], alpha QP [0 (Lossless) <-> 0 (Lossless)], tileRowsLog2 [0], tileColsLog2 [0], 1 worker thread(s), please wait...Encoded successfully.* Color AV1 total size: 57406 bytes* Alpha AV1 total size: 0 bytesWrote AVIF: key-visual.avif
変換出来た。
もう一度v1.1.1でcmakeしてみる。
(コマンド省略)
# cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DAVIF_CODEC_AOM=1 -DAVIF_LOCAL_AOM=1 -DAVIF_BUILD_APPS=1 ..
-- libavif: libyuv (1766) found; libyuv-based fast paths enabled.-- libavif: some libyuv optimizations require at least version 1813 to work.
libyuvを最新にすればいいのかもしれない。
dnf経由でインストールしたのを使うことにした。