先日、Mirakurunコンテナ内でハードウェアエンコード(vaapi)する環境を構築する手順を紹介しました。
エンコード環境を整えたので、今回はEPGStation v2と連携してvaapiでエンコードができるようにしてみたいと思います。
EPGStation v1の手順は以下で解説しています。
Contents
EPGStation(録画環境)の構築
まずは、EPGStation v2とMirakurunで録画環境を構築しておきます。
ここまでで正常に予約録画ができることを確認しておきます。
VAAPIエンコード環境の構築
続いて、VAAPIエンコードができるようMirakurunコンテナ内でffmpegをビルドします。
DockerでEPGStationを構築した方は、前回の記事を参考にして下さい。
以下のコマンドで適当な動画が正常にエンコードで来ていることを確認します。
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.m2tsと./recorded/hogehoge.mp4は適当な値に修正してください。
圧縮されあ動画ファイルが生成されていればOKです。
エンコード時に使うデバイス(-vaapi_device)は環境に合わせて調整してください。
EPGStation v2の設定
config.ymlの修正
DockerでEPGStation v2を構築している場合は、プロジェクトディレクトリ配下のepgstation/config/config.ymlを修正します。
修正するのはencodeの部分です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
: (省略) encode: - name: H.264(vaapi) cmd: '/bin/bash %ROOT%/config/enc_vaapi.sh main' suffix: -vaapi.mp4 rate: 4.0 - name: H.264 cmd: '%NODE% %ROOT%/config/enc.js' suffix: .mp4 rate: 4.0 (省略) : |
この修正により、EPGStationのエンコードのメニューにH.264(vaapi)を追加します。
エンコードする際は、%ROOT%/config/enc_vaapi.shにmainという引数を添えて実行します。
一応、副音声でのエンコードができるように引数でmainをしていますが、副音声でのエンコードは不要なのでconfigには追記していません。
enc_vaapi.shの作成
vaapiエンコード時のコマンドを記述しておきます。
1 |
emacs enc_vaapi.sh |
私の環境では、こんな感じです。
そのままコピーしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/bin/bash ffprobe_cmd=/usr/local/bin/ffprobe ffmpeg_cmd=/usr/local/bin/ffmpeg mode=$1 if [ "$mode" = "" ]; then mode="main" fi if [ "$AUDIOCOMPONENTTYPE" = 2]; then aoption="-dual_mono_mode ${mail}" fi function getHeight() { echo `$ffprobe_cmd -v 0 -show_streams -of flat=s=_:h=0 "$INPUT" | grep stream_0_width | awk -F= '{print \$2}'` } if [ `getHeight` -gt 720 ]; then $ffmpeg_cmd $aoption -vaapi_device /dev/dri/card0 -hwaccel vaapi -i "$INPUT" -vf 'format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=1280:h=720' -c:v h264_vaapi -c:a ac3 -qp 20 -ac 2 "$OUTPUT" else $ffmpeg_cmd $aoption -vaapi_device /dev/dri/card0 -hwaccel vaapi -i "$INPUT" -vf 'format=nv12|vaapi,hwupload,deinterlace_vaapi,scale_vaapi=w=720:h=480' -c:v h264_vaapi -c:a ac3 -qp 20 -ac 2 "$OUTPUT" fi |
エラーが出るようなら、-vaapi_deviceを環境に合わせて修正してください。
設定は以上です。
EPGStation v2で録画&エンコードしてみる
番組表から録画予約する場合
番組表から録画予約するときに、下のようにエンコードメニューが追加されるのでH264(vaapi)を選択して予約すると、録画後に自動エンコードされます。
ルール/検索で録画予約する場合
ルールまたは検索で録画予約する場合は、ルール設定画面でエンコード方法を指定します。
録画した番組を後からエンコードする場合
録画した番組をエンコードする場合は、ホーム画面の録画一覧メニューから⊕encodeを選択します。
設定からH264(vaapi)を選択して「追加」します。
エンコードリストに追加されて、順次エンコードが始まります。
まとめ
EPGStation v2からvaapiエンコードする方法について記事にしてみました。
これで録画番組が貯まっても、ストレージに優しくなりますね。
ちなみに、EPGStation v2では録画しながら追っかけ再生もできるようですが、私は使っていません。
追っかけ再生する場合も、vaapiでリアルタイムエンコードすればネットワークに優しい使い方になるかもしれません。
まぁ、見て消えるだけならvaapiでエンコードする必要はありませんが。
参考になれば幸いです。
コメント