妄想日記 by 妄想エンジン


EPGStation と Amatsukaze を連動させる。

EPGStation 使っていっぱい録画していると、だんだんHDDを圧迫していきます。
エンコードして圧縮してあげればいいですが、FreeBSD でハードエンコが動かないので*1とりあえず別のWindowsマシンでエンコードしていました(過去形

ところで、最近の<以下同文>

あとは組み合わせるだけでした。

**追記あり(2018/12/03)**
**追記あり(2018/12/08)**

ということで、用意するもの。

EPGStation の環境
ハードエンコできるようなWindowsマシン
電気代。

とりあえず、Amatsukaze でエンコードできるようになっていることは前提として。
別のWindowsマシンからAmatsukazeAddTask が動くようにしておきましょう。別のWindowsマシン無い?あるよね?
録画されたファイルはSMBで共有されているものとします。ここで、エンコサーバ側からは、Y:\epgstation として見えるように
してあります。

EPGStation マシン側では、mono が動くようにしておきます。

# pkg install mono

あとは、Amatsukaze の配布物から、AmatsukazeAddTask.exe と、AmatsukazeServer.dll をコピーしておきます。

パスの通ったらフォルダに 下記のようなスクリプトを作って実行属性を与えておきます。
このスクリプトはEDCB用録画後実行バッチで作成したものをベースに手を加えてあげるとよいでしょう。
NVEnc_h264_small_deinterlace はエンコサーバのAmatsukaze で作ったプロファイルを指定します。この辺は
それぞれの環境に合わせてqsvだったりx265だったり、お好みで。

#!/bin/sh
mode=${1}

if [ ${mode} == "mp4" ] ; then
/usr/local/bin/mono /root/tmp/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.0.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace_mp4" --priority 3 --no-move
else
/usr/local/bin/mono /root/tmp/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.0.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace" --priority 3 --no-move
fi

touch "${OUTPUT}"
chmod ag+rw "${OUTPUT}"

最後の touch のあたりがキモで、これがないとエンコ後のファイルがEPGStation の管理下に入りません。実はこれにも問題があって、ファイルサイズが0になってしまうのですが、ファイルサイズ以外問題ないので、とりあえずこれで。
本当は実際にエンコおわるまでスクリプトの終了を待つようにすればいいらしいのですが、試してはいません。

ここで一旦テストして、Amatsukaze側にキューが登録されることを確認しておきましょう。
エンコサーバ側では AmatsukazeServer を実行して待ち受けておきます。

あとは、EPGStation で録画時に洗濯できるように config/config.json を修正します。

"recorded": "/home/epgstation/EPGStation/recorded/epgstation",

"encode": [
{
"name": "H264",
"cmd": "/bin/bash /home/epgstation/bin/AmatsukazeAddTask.sh mp4",
"suffix": ".mp4",
"default": true
},
{
"name": "MKV",
"cmd": "/bin/bash /home/epgstation/bin/AmatsukazeAddTask.sh mkv",
"suffix": ".mkv"
}

],

これで、EPGStationで録画を指定した場合や、エンコードを指定するさいに、Amatsukazeに投げることができるようになります。

と、思っていたら、そうはイカのきん(以下略

Amatsukaze はエンコード後に、成功した場合は Successedフォルダに、失敗した場合は --no-move を指定しないと failed フォルダに ts ファイルを移動してしまいます。
手動でエンコキューに入れている際は「テストモード」にすることによってそれを防げたのですが、AmatsukazeAddTask から登録する場合にはその設定がありません。
で、それだと EPGStation の管理外になってしまうので、自動エンコードする際に指定するプロファイルのなかで、実行後バッチをしていしてあげましょう。
エンコサーバ側の、Amatsukaze フォルダの下のbatの中に、実行後_move.bat というファイルを作ります。中身は

@echo off

for /f "delims=" %%a in ("%IN_PATH%") do set IN_DIR=%%~dpa
move /Y %IN_DIR%*.ts %IN_DIR%..\

その後、プロファイルの設定で、実行後バッチにこれを指定して[適用]します。
これで、移動されたファイルをもとに戻してくれます。

最後になりましたが、いろいろと便利なソフトを公開してくれている作者の方々に感謝。

参考リンク:
EPGStation の github
https://github.com/l3tnun/EPGStation

Amatsukaze の github
https://github.com/nekopanda/Amatsukaze

Linux系の録画ツールで録画した番組をAmatsukazeで自動エンコードする方法
https://till0196.com/post4149

追記(2018-12-03)
手抜きでスクリプト書いてたらやっぱりダメだったので修正。
touch でごまかしていると、TSファイルを保存しなかったり実行後に削除するにチェックを入れていると、キューに登録されただけで終わったとEPGStationに誤解されて消されてしまうので、ファイルができるまでloopして待つことにします。

#!/bin/sh
mode=${1}

if [ ${mode} == "mp4" ] ; then
/usr/local/bin/mono /home/epgstation/bin/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.100.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace_mp4" --priority 3 --no-move
else
/usr/local/bin/mono /home/epgstation/bin/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.100.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace" --priority 3 --no-move
fi

while [ ! -f ${OUTPUT} ] ; do
sleep 30
done

とりあえずこれで、エンコ後にTSを消すにチェックを入れても大丈夫になったが、キューが積み重なってしまった場合どうなるか微妙かも。
なお、この修正で、ファイルサイズの表示が0になってしまう件も解決。

追記その2
「解決!」じゃないや。これ、エンコード失敗して、ファイルが作られなかったらループそのまんまじゃん。
エンコ失敗したら、再エンコするからそれまで待たせておけばいいじゃんて話になるかもしれないけど、やっぱりあまり良くないよなあ。
なんかこう、ちょっとスクリプト書いて解決、みたいなかんじではいかないかなー。
エラー処理考えないならいいんだけど、できれば録画系は私がいなくても、5年くらいはそのままで運用できるようになっててほしいなあ。

追記その3(2018-12-08)
結局スクリプトはこうなった。

#!/bin/sh
mode=$"{1}"

if [ -f "${OUTPUT}" ] ; then
# echo "file exist. abort." >> /tmp/ama.log
exit 1
fi

if [ ! -f "${OUTPUT}" ] ; then
if [ ${mode}_ == "mp4_" ] ; then
/usr/local/bin/mono /home/epgstation/bin/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.100.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace_mp4" --priority 4 --no-move
else
/usr/local/bin/mono /home/epgstation/bin/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${INPUT}" -ip "192.168.100.98" -p 32768 -o "y:\\epgstation\\" --remote-dir "y:\\epgstation\\" -s "NVenc_h264_small_deinterlace" --priority 4 --no-move
fi

while [ ! -f "${OUTPUT}" ] ; do
sleep 60
done
fi

ツイート
|top |アフィリエイト |windowsネタ |料理メモ |コンタクト |twitter |
さわやかなエロスを目指す--妄想エンジン ©1996-2022
コンテンツ配信