mNEFOのメモ帳

ツイッターとかに書ききれなかったメモの集まり

docker-mirakurun-epgstationでSVT-AV1エンコードする

まずはdocker環境内のffmpegでSVT-AV1を使えるようにする。
debian.Dokcerfileのapt-get にlibsvtav1enc-dev(パッケージ名注意)を追加、ffmpegのビルドオプションに--enable-libsvtav1を追加

FROM l3tnun/epgstation:master-debian

ENV DEV="make gcc git g++ automake curl wget autoconf build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev"
ENV FFMPEG_VERSION=7.0

RUN apt-get update && \
    apt-get -y install $DEV && \
    apt-get -y install yasm libx264-dev libmp3lame-dev libopus-dev libvpx-dev libsvtav1enc-dev && \
    apt-get -y install libx265-dev libnuma-dev && \
    apt-get -y install libasound2 libass9 libvdpau1 libva-x11-2 libva-drm2 libxcb-shm0 libxcb-xfixes0 libxcb-shape0 libvorbisenc2 libtheora0 libaribb24-dev && \
\
#ffmpeg build
    mkdir /tmp/ffmpeg_sources && \
    cd /tmp/ffmpeg_sources && \
    curl -fsSL http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 | tar -xj --strip-components=1 && \
    ./configure \
      --prefix=/usr/local \
      --disable-shared \
      --pkg-config-flags=--static \
      --enable-gpl \
      --enable-libass \
      --enable-libfreetype \
      --enable-libmp3lame \
      --enable-libopus \
      --enable-libtheora \
      --enable-libvorbis \
      --enable-libvpx \
      --enable-libx264 \
      --enable-libx265 \
      --enable-libsvtav1 \
      --enable-version3 \
      --enable-libaribb24 \
      --enable-nonfree \
      --disable-debug \
      --disable-doc \
    && \
    make -j$(nproc) && \
    make install && \
\
# 不要なパッケージを削除
    apt-get -y remove $DEV && \
    apt-get autoremove -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /tmp/*

gitlab.com
よりコーデックが選べるenc.jsを拝借

const codecs = ['libsvtav1', 'libx264', 'libx265', 'h264_vaapi', 'hevc_vaapi'];
中略
// 各コーデック固有の設定
(async () => {
    const vaapiDeviceArgs = []; // -i input より前に挿入される引数
    const useCodecArgs = [];    // 指定コーデック固有の引数

    // ソフトウェアエンコード(libx264, libx265)
    if (/libx/.test(useCodec)) {
        // ビデオフィルタ インターレス解除
        useCodecArgs.push('-vf', 'yadif');

        // 品質
        useCodecArgs.push('-preset', 'veryfast', '-crf', '26');
    }
   // libsvtav1エンコード
    if (/libsvtav1/.test(useCodec)) {
        useCodecArgs.push('-vf', 'yadif');
        useCodecArgs.push('-preset', '6', '-crf', '35');
    }

config.yml

encode:
    - name: SVT-AV1
      cmd: '%NODE% %ROOT%/config/enc.js libsvtav1'
      suffix: .mp4
      rate: 4.0
    - name: H.264
      cmd: '%NODE% %ROOT%/config/enc.js'
      suffix: .mp4
      rate: 4.0

あとは

docker-compose down
docker-compose build
docker-compose up -d