Open6
録画実験サーバ on Docker on N100 でハードウェアエンコーディングで VP9 を使いたい
ファイルサイズを小さくしたいのでデフォルトであった設定と記憶している H.264 から変更する
N100 のハードウェアエンコーダー
chatGPT に相談したら H.265 (HEVC) か VP9。
基本的には H.265 (HEVC) がおすすめだけれど、VP9 は止めはしない(ロイヤリティフリーだし、オープンソースとか好きなら使えば?)って感じだった。
天邪鬼なので VP9 を使う。
もういちいち調べながらやるのはめんどくさいので、chatGPT に相談してコピペ→エラーが出たら調べる方式。
ライセンス等々問題があるかも知れないので自己責任でお願いします(でも問題あるってことは教えていただけると嬉しいです)。
ホストへ依存パッケージのインストール
ホスト OS は arch linux なので以下インストール:
yay -S intel-media-driver libva-utils
VP9 のハードウェアエンコーディングができるか確認:
$ vainfo | grep 'VAEntrypointEncSlice'
error: can't connect to X server!
(中略)
VAProfileVP9Profile0 : VAEntrypointEncSliceLP
VAProfileVP9Profile1 : VAEntrypointEncSliceLP
VAProfileVP9Profile2 : VAEntrypointEncSliceLP
VAProfileVP9Profile3 : VAEntrypointEncSliceLP
(後略)
Dockerfile の編集
epgstation の Dockerfile を編集する
Dockerfile
RUN apt-get update && \
apt-get -y install $DEV && \
apt-get -y install yasm libx264-dev libmp3lame-dev libopus-dev libvpx-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 && \
+ apt-get -y install libcrypto++8 vainfo intel-media-va-driver && \
\
#ffmpeg build
mkdir /tmp/ffmpeg_sources && \
※ libcrypto++8
は元々追加していたので念のため残しているが、何のために入れたか今となっては不明
コンテナ内で VP9 ハードウェアエンコーディングが利用できるか確認する
↑の Dockerfile
の編集が済んだら、以下実行:
docker compose up -d --build --force-recreate
エラーが出なければ 👌
早速コンテナ内でハードウェアアクセラレーションの確認をする:
$ docker compose exec epgstation bash
root@9dd3581dba46:/app# vainfo | grep 'VAEntrypointEncSlice'
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: can't connect to X server!
libva info: VA-API version 1.17.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_17
libva info: va_openDriver() returns 0
(中略)
VAProfileVP9Profile0 : VAEntrypointEncSliceLP
VAProfileVP9Profile1 : VAEntrypointEncSliceLP
VAProfileVP9Profile2 : VAEntrypointEncSliceLP
VAProfileVP9Profile3 : VAEntrypointEncSliceLP
(後略)
なんかエラーとか出ているけれど、きっと大丈夫
ffmpegのVAAPIサポートの確認
引き続きコンテナ内で作業:
root@9dd3581dba46:/app# ffmpeg -encoders | grep vaapi
ffmpeg version 7.0 Copyright (c) 2000-2024 the FFmpeg developers
(中略)
V....D vp9_vaapi VP9 (VAAPI) (codec vp9)
とても良さそう