まずは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