JpegからAVIFへ画像変換のためにvipsを調査

前の記事でAVIFがWebPの半分くらいになると分かったので、もっと簡単にJpegから変換できないかと調べているときの覚書。
参考: JpegからAVIFへ変換するためのコマンドラインツールSquoosh, sharp, cavif

環境: CentOS Stream 8(仮想マシン), ImageMagick 6.9.12-67

Node.js製「sharp」はlibvipsを内部で使っているというのでvipsについて調べる。

パッケージ管理にあるというので検索してみる。
# dnf search vips

ない。。。

remiリポジトリをインストールしてみる。
参考: Remi's RPM repository
# dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

検索
# dnf search vips

あった。

vips-devel.x86_64 : Development files for vips
vips-heif.x86_64 : Heif support for vips
vips-magick-gm.x86_64 : Magick support for vips using GraphicsMagick
vips-magick-im6.x86_64 : Magick support for vips using ImageMagick6
vips-magick-im7.x86_64 : Magick support for vips using ImageMagick7
vips-openslide.x86_64 : OpenSlide support for vips
vips-poppler.x86_64 : Poppler support for vips
vips-tools.x86_64 : Command-line tools for vips

ん?ImageMagick6で使えるようになるのかな?と思いインストールしてみる。
(怖かったのでスナップショットを取ってから)
# dnf install vips-magick-im6

ImageMagickの対応フォーマットの確認
# convert -list format | grep AV

ない。
よく分からない。

vipsをコマンドラインを使うツールをインストール。
# dnf install vips-tools

確認
# vips -h
# vips --version

vips-8.13.3-Tue Nov  1 09:09:54 UTC 2022

# vips --vips-config

HEIC/AVIF load/save with libheif: yes (dynamic module: yes)

AVIFに対応しているみたい。

試す
$ vips copy key-visual.jpg test.jpg
$ vips copy key-visual.jpg test.webp
$ vips copy key-visual.jpg test.avif

VipsForeignSave: "test.avif" is not a known file format

失敗する。

公式サイトのIssueを見ながら調べる。
Cannot get VIPS to export AVIF · Issue #2324 · libvips/libvips

# vips -l | grep _target

          VipsForeignSaveCsvTarget (csvsave_target), save image to csv (.csv), priority=0, mono
          VipsForeignSaveMatrixTarget (matrixsave_target), save image to matrix (.mat), priority=0, mono
          VipsForeignSaveVipsTarget (vipssave_target), save image to target in vips format (.v, .vips), priority=0, any
          VipsForeignSavePpmTarget (ppmsave_target), save to ppm (.ppm), priority=0, rgb
          VipsForeignSaveRadTarget (radsave_target), save image to Radiance target (.hdr), priority=0, rgb
          VipsForeignSaveCgifTarget (gifsave_target), save as gif (.gif), priority=0, rgba-only
          VipsForeignSaveDzTarget (dzsave_target), save image to deepzoom target (.dz, .szi), priority=0, any
          VipsForeignSavePngTarget (pngsave_target), save image to target as PNG (.png), priority=0, rgba
          VipsForeignSaveJpegTarget (jpegsave_target), save image to jpeg target (.jpg, .jpeg, .jpe), priority=0, rgb-cmyk
          VipsForeignSaveWebpTarget (webpsave_target), save image to webp target (.webp), priority=0, rgba-only
          VipsForeignSaveTiffTarget (tiffsave_target), save image to tiff target (.tif, .tiff), priority=0, any

libheifがないから?
# pkg-config libheif --print-variables

Package libheif was not found in the pkg-config search path.
Perhaps you should add the directory containing `libheif.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libheif', required by 'virtual:world', not found

vips-heifなるものをインストールしてみる。
# dnf install vips-heif

Error:
 Problem: cannot install the best candidate for the job
  - nothing provides libheif.so.1()(64bit) needed by vips-heif-8.13.3-1.el8.remi.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

libheifのビルドが必要らしいけど、パッケージ管理できないのは使いにくいので諦めた。

スナップショットでインストール前に戻した。
remiリポジトリも削除しておく。
# dnf list installed | grep remi
# dnf remove remi-release


【関連記事】