JpegからAVIFへ変換するためのコマンドラインツールSquoosh, sharp, cavif
WebPとAVIFの比較をしようとLinux向けの変換ツールを調査しているときの覚書。
環境: CentOS Stream 8, Node.js v14.18.2 -> v18.9.1
AVIFの対応状況
Edge以外は対応している。
Node.jsをv18に変更
開発環境のNode.jsがv14だったので最新のv18にアップグレードする。
確認
# dnf module list nodejs
v14からv18に変更
# dnf module reset nodejs
# dnf module enable nodejs:18
# dnf --allowerasing distro-sync
確認
# node --version
v18.9.1
Squoosh CLI
Chrome teamが開発している画像圧縮ウェブツール「Squoosh 」をコマンドラインで使えるようにしたもの。
Globalでインストール
# npm i -g @squoosh/cli
AVIFに変換してみる。
$ squoosh-cli --avif '{quality: 30}' key-visual.jpg
TypeError: Failed to parse URL from /usr/local/lib/node_modules/@squoosh/cli/node_modules/@squoosh/lib/build/imagequant_node-a4aafbae.wasm
エラーになった。
ウェブアプリ版のSquooshでAVIF変換したら問題なく完了した。
Quality: 30
Effort: 4
ファイルサイズ比較
Jpeg: 281KB
WebP: 70KB
AVIF: 26KB
Jpegの10分の1でWebPの半分なのにGoogle Chromeで表示して並べてみても違いが分からない。
とりあえずsquoosh-cliはアンインストール。
# npm uninstall -g @squoosh/cli
そのうち直っていることを期待。
Squooshをnpm runで使えるように書こうかな…。
sharp
検索して見つけたNode.js製画像変換ツール「sharp」。
これもcliバージョンを使う。
Globalでインストール
# npm install -g sharp-cli
AVIFに変換してみる。
$ sharp --format avif --input key-visual.jpg --output key-visual.avif
出来た。
30KB。
squooshと同じオプションで再実行
$ sharp --format avif --input key-visual.jpg --output key-visual.avif --quality 30 --effort 4
17KBまでなったけど比較してみると荒い。
--qualityはデフォルトの80にするとほぼWebPと同じ。
$ sharp --format avif --effort 4 --input key-visual.jpg --output key-visual.avif
Squooshと比較すると3KB大きい。
cavif
Rust製のAVIF変換ツール
まずはRustとパッケージマネージャーのcargoをインストールする。
# dnf install rust cargo
確認
# rustc --version
rustc 1.62.1 (Red Hat 1.62.1-1.module_el8.7.0+1211+277be900)
# cargo --version
cargo 1.62.1
cavifをインストール。
# cargo install cavif
error: failed to run custom build command for `rav1e v0.5.1`Caused by:process didn't exit successfully: `/tmp/cargo-installUMiRXy/release/build/rav1e-3031b01eff10ff9f/build-script-build` (exit status: 101)--- stdoutcargo:rustc-cfg=nasm_x86_64--- stderrthread 'main' panicked at 'Couldn't find NASM, make sure NASM installed and in PATH or disable "asm" feature', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/rav1e-0.5.1/build.rs:296:7note: run with `RUST_BACKTRACE=1` environment variable to display a backtracewarning: build failed, waiting for other jobs to finish...error: failed to compile `cavif v1.4.0`, intermediate artifacts can be found at `/tmp/cargo-installUMiRXy`
nasmが見つからないというのでnasmをインストールする。
参考: GitHub - xiph/rav1e: The fastest and safest AV1 encoder.
# dnf search nasm
# dnf install nasm
cavifを再インストール
# cargo install cavif
warning: be sure to add `/root/.cargo/bin` to your PATH to be able to run the installed binaries
PATHへの追加は保留。
AVIFに変換してみる。
# /root/.cargo/bin/cavif key-visual.jpg
99KBで生成された。
オプションを指定して再変換。
# /root/.cargo/bin/cavif --quality 80 --speed 1 key-visual.jpg
結構な時間が掛かった。1分ぐらい?
92KBで生成された。
WebPが70KBなので意味がない。