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'

録画したデータをエンコードするコンフィグも、だいたい同じようなノリで書けると思う(試していない)。


投稿一覧にもどる