さくらのレンタルサーバーでもAVIFが作れたらいいよねというのでやってみた。

前提

  • シェルにzshを使っている。さくらのレンタルサーバーのデフォルトシェルはcshなので注意されたし。
  • ~/binにパスが通っている

やり方

  1. アセンブラのビルド

    cd ~
    wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/nasm-2.16.03.tar.xz
    tar xf nasm-2.16.03.tar.xz
    cd nasm-2.16.03
    ./configure --prefix=$HOME
    gmake -j4 && gmake install
    
    export PATH=$HOME/bin:$PATH
    nasm -v
    
  2. libavifのビルドとゴミ掃除

    cd ~
    git clone -b v1.2.1 https://github.com/AOMediaCodec/libavif.git
    sed -i '' 's|^static_assert(sizeof(off_t) == sizeof(int64_t), "");|/* & */|' libavif/src/io.c
    cmake -S libavif -B libavif/build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF \
    -DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=LOCAL -DAVIF_LIBSHARPYUV=LOCAL \
    -DAVIF_JPEG=LOCAL -DAVIF_ZLIBPNG=LOCAL -DAVIF_BUILD_APPS=ON
    cmake --build libavif/build --parallel 1
    cp ~/libavif/build/avifenc bin/
    rm -Rf libavif nasm-2.16.03 nasm-2.16.03.tar.xz
    
  3. avifを作る
    avifenc -q 65 -y 420 -s 6 --ignore-xmp src.jpeg out.avif
    

あとがき

これを活用すればさくらのレンタルサーバーでもavifを作れるようになるので、任意のCMSから蹴ればサムネイルの軽量化とかができるかもしれない。注意点としてコマンドライン呼び出しになるため任意コマンドが実行されないように注意する必要はある。

ビルドはnice不要で、avifの生成についても4000x3000のJPEGをAVIFにするのはniceなしで行けた。

レンタルサーバーにないバイナリをソースコードからビルドして使うという意味で、本記事はさくらのレンタルサーバーにNode.jsをインストールするの親戚記事である。