EPGStation+VA-API+Docker
DockerでEPGStationを動かす(VA-APIが有効なFFMpegつき)
docker-mirakurun-epgstation の Dockerfile を大いに参考にしている。
これを使えば、Dockerの中のEPGStationでVA-APIによるハードウェアエンコードが使えるようになる。
今回作成した Dockerfile は以下の通り。 個人的に使う用で作ったため、VA-APIとは直接関係ない機能(SVT-AV1とか)も含めているので、いらなければ適宜削減してほしい。
apt レポジトリにある VA-API 関連のパッケージはバージョンが古いので、
ppa:kisak/kisak-mesa を使って新しいバージョンのライブラリを入れるようにしている。
FROM l3tnun/epgstation:debian
RUN apt-get update && \
apt-get install -y software-properties-common python3-software-properties python3-launchpadlib && \
add-apt-repository ppa:kisak/kisak-mesa && \
apt-get update && \
apt-get install -y git mesa-va-drivers libgl1-mesa-dev libgl1-mesa-glx libgl1-mesa-dri
## ffmpeg build
ENV DEV="make gcc g++ automake curl wget autoconf build-essential yasm libaom-dev libass-dev libcodec2-dev libdrm-dev libfreetype6-dev libopus-dev libsdl1.2-dev libsvtav1enc-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libvpx-dev libx264-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev"
RUN apt-get update && \
apt-get install -y $DEV && \
apt-get install -y libasound2 libass9 libaom3 libopus0 libcodec2-1.0 libsvtav1enc1 libvdpau1 libva-x11-2 libva-drm2 libvpx7 libx264-164 libxcb-shm0 libxcb-xfixes0 libxcb-shape0 libvorbisenc2 libtheora0 libaribb24-dev && \
mkdir /tmp/ffmpeg_sources && \
cd /tmp/ffmpeg_sources && \
curl -fsSL http://ffmpeg.org/releases/ffmpeg-7.0.2.tar.bz2 | tar -xj --strip-components=1 && \
./configure \
--prefix=/usr/local \
--disable-shared \
--pkg-config-flags=--static \
--enable-gpl \
--enable-stripping \
--enable-libaom \
--enable-libaribb24 \
--enable-libass \
--enable-libcodec2 \
--enable-libdrm \
--enable-libfreetype \
--enable-libopus \
--enable-libsvtav1 \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-nonfree \
--enable-version3 \
--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/*
コンテナを立ち上げるときは /dev/dri をリダイレクトするのを忘れないように。
以下は、VA-API を利用して HEVC でリアルタイムエンコードしてストリーミングするコンフィグの例である。 音声部分については、libopus を使っているので、好みに応じて変更してもらいたい。
- name: 720p
cmd:
'%FFMPEG% -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -re
-dual_mono_mode main -i pipe:0 -vf format=nv12|vaapi,hwupload,scale_vaapi=w=1280:h=720
-c:v hevc_vaapi -rc_mode CQP -qp 35 -b:v 0 -c:a libopus -b:a 96k -deadline realtime -f mp4
-movflags frag_keyframe+empty_moov pipe:1'
録画したデータをエンコードするコンフィグも、だいたい同じようなノリで書けると思う(試していない)。
投稿一覧にもどる