先日、EPGStation v2に移行する方法について解説しました。
この度、EPGStation v2に移行しましたので、改めてvaapiエンコード設定をしました。
基本的には以下の記事と同じ手順ですが、若干修正がありましたので内容を更新しておきます。
Contents
EPGStation v2コンテナへのvaapi導入手順
前提
本手順はDockerにてEPGStation v2が導入されていることを前提とします。
私は以下の記事の手順で導入しました。
docker-compose.ymlの修正
VAAPIをdockerコンテナ内で利用するために、ホストのデバイスをコンテナと共有します。
ホストのデバイスをコンテナと共有するために、docker-compose.ymlを修正します。
1 2 |
cd ~/docker-mirakurun-epgstation-v2 emacs docker-compose.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
version: '3' services: mirakurun: container_name: mirakurun-3.5.0 build: context: Mirakurun dockerfile: docker/Dockerfile image: chinachu/mirakurun cap_add: - SYS_ADMIN - SYS_NICE ports: - "40772:40772" - "9229:9229" volumes: - /etc/localtime:/etc/localtime:ro - ./Mirakurun/config/:/app-config/ - ./Mirakurun/data/:/app-data/ environment: TZ: "Asia/Tokyo" devices: - /dev/px4video0:/dev/px4video0 - /dev/px4video1:/dev/px4video1 - /dev/px4video2:/dev/px4video2 - /dev/px4video3:/dev/px4video3 - /dev/px4video4:/dev/px4video4 - /dev/px4video5:/dev/px4video5 - /dev/px4video6:/dev/px4video6 - /dev/px4video7:/dev/px4video7 - /dev/bus:/dev/bus restart: always logging: driver: json-file options: max-file: "1" max-size: 10m mysql: container_name: mysql-epgstation-v2 image: mariadb:10.4 volumes: - mysql-db:/var/lib/mysql environment: MYSQL_USER: epgstation MYSQL_PASSWORD: epgstation MYSQL_ROOT_PASSWORD: epgstation MYSQL_DATABASE: epgstation TZ: "Asia/Tokyo" command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --performance-schema=false --expire_logs_days=1 restart: always logging: options: max-size: "10m" max-file: "3" epgstation: container_name: epgstation-v2 build: epgstation volumes: - /etc/localtime:/etc/localtime:ro - ./epgstation/config:/app/config - ./epgstation/data:/app/data - ./epgstation/thumbnail:/app/thumbnail - ./epgstation/logs:/app/logs - /media/tv_record:/app/recorded devices: - /dev/dri:/dev/dri environment: TZ: "Asia/Tokyo" depends_on: - mirakurun - mysql ports: - "8888:8888" - "8889:8889" #user: "1000:1000" restart: always volumes: mysql-db: driver: local |
修正箇所は以下です。
66~67行目:devicesを追記
参考:Intel(VAAPI)ドライバ
今回もIntelのi965-va-driverを使用します。
幸いなことに、i965-va-driverはUbuntuでは現在標準ドライバとなっていて、自分でインストールする必要はありません。
Dockerfileの修正
VAAPI対応のffmpegをビルドするために、Dockerfileを修正します。
1 |
emacs epgstation/Dockerfile |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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=4.2.4 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 && \ echo "deb http://http.us.debian.org/debian stable main contrib non-free" | tee -a /etc/apt/sources.list && \ apt update && \ apt-get -y install i965-va-driver-shaders && \ \ #ffmpeg build \ mkdir /tmp/ffmpeg_sources && \ cd /tmp/ffmpeg_sources && \ wget http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 -O ffmpeg.tar.bz2 && \ tar xjvf ffmpeg.tar.bz2 && \ cd /tmp/ffmpeg_sources/ffmpeg-* && \ ./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-nonfree \ --disable-debug \ --disable-doc \ --enable-vaapi \ && \ 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/ffmpeg_sources |
修正箇所は以下です。
- 11~13行目:i965-va-driver-shadersのpkgをインストール
- 39行目:ffmpegのビルド時にvaapiを有効化
ここまで
コンテナ起動
実行中のEPGStationのDockerコンテナを停止して、再ビルドします。
1 |
docker-compose build --no-cache epgstation && docker-compose up -d epgstation |
ハードウェアエンコード
コンテナ内では、VAAPIエンコードが可能な状態になっています。
エンコードのサンプルとして、./recorded/hogehoge.m2tsを./recorded/hogehoge.mp4にハードウェアエンコードしてみます。
試しに以下のコマンドでエンコードしてみます。
コンテナ内で以下のコマンドを実行します。
1 2 3 4 5 |
# コンテナに侵入 docker exec -it epgstation-v2 bash # vaapiエンコード実行 ffmpeg -vaapi_device /dev/dri/card0 -hwaccel vaapi -hwaccel_output_format vaapi -i ./recorded/hogehoge.m2ts -vf 'format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=1280:h=720' -c:v h264_vaapi -c:a ac3 -qp 20 ./recorded/hogehoge.mp4 |
もしくは、ホストから以下のコマンドで実行します。
1 |
docker exec -it epgstation-v2 ffmpeg -vaapi_device /dev/dri/card0 -hwaccel vaapi -hwaccel_output_format vaapi -i ./recorded/hogehoge.m2ts -vf 'format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=1280:h=720' -c:v h264_vaapi -c:a ac3 -qp 20 ./recorded/hogehoge.mp4 |
パラメータはお好みで追加してください。
しばらく待って、./recorded/hogehoge.mp4が生成されていたらOKです。
せっかちな方は実行中にtopコマンドなどでffmpegの実行プロセスを確認してみてください。
もし、エンコード時にエラーを吐くようなら、コマンドの-vaapi_device /dev/dri/card0の部分を-vaapi_device /dev/dri/renderD128としてみてください。
まずはここまで
まとめ
この記事では、EPGStation v2のコンテナをVAAPIエンコード可能にする方法について紹介しました。
EPGStation v2のGUIからエンコードする方法は、以下の記事で解説したいと思います。
もはや趣味の世界で需要は無いと思いますが・・・。
参考になれば幸いです。
コメント