chinachu と amatsukaze を連動させる。

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

ところで、最近のWindowsのエンコ環境として、Amatsukaze というものがあります。 解凍して、実行して、そこに ts ファイルをドロップしてあげると、よきに計らってCMカットやらロゴ消しやらデインタレースやらやってくれるという とてもらくちんな環境があり、さっそくそれを導入してみましたが、Windowsマシンの NVEnc で、快適にエンコードをしてくれることがわかりました。

「機械でできることはなるべく機械にやってもらう」がモットーの私としては、できれば録画したらすぐに自動でエンコードしてくれたらいいのですが、 マシンが別のため、いちいち手動でドラッグ&ドロップしてやっていました。

ところで、Amatsukaze には AmatsukazeAddTask.exe という、「エンコサーバのキューにエンコを積む」という素敵なプログラムがあります。 これ、拡張子見てわかるように、Windows のプログラムですが、mono で動くように作者様が対応してくれたため、Windows以外の環境でも 動くようになりました。

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

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

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

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

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

# pkg install mono

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

> mono ~/bin/AmatsukazeAddTask.exe /home/chinachu/bin/AmatsukazeAddTask.exe <オプション> -f オプション -f|--file <パス> 入力ファイルパス -s|--setting <プロファイル名> エンコード設定プロファイル -b|--bat <バッチファイル名> 追加時実行バッチ --priority <優先度> 優先度 -ip|--ip AmatsukazeServerアドレス -p|--port <ポート番号> AmatsukazeServerポート番号 -o|--outdir <パス> 出力先ディレクトリ -d|--nasdir <パス> NASのTSファイル置き場 -r|--amt-root <パス> Amatsukazeのルートディレクトリ(サーバ起動用) --remote-dir <パス> サーバから入力ファイルにアクセスするときのディレクトリパス サーバからだとパスが異なる場合に必要 ファイル名部分は入力ファイル名からコピーされるのでディレクトリパスのみ入力すること NASにコピーするときはコピー先のディレクトリをサーバからアクセスするときのパスを指定すること 例) \\rec-pc\share\rec Bash等から打つときは\(バックスラッシュ)がエスケープ文字となることがあるため注意 --no-move NASにコピーしたTSファイルをtransferedフォルダに移動しない --clear-succeeded NASにコピーする際、コピー先のsucceededフォルダを空にする --with-related NASにコピーする際、関連ファイルも一緒にコピー・移動する --subnet <サブネットマスク> Wake On Lan用サブネットマスク --mac Wake On Lan用MACアドレス

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

#!/bin/sh /usr/local/bin/mono /home/chinachu/bin/AmatsukazeAddTask.exe -r "C:\DTV\Amatsukaze" -f "${1}" -ip "192.168.0.98" -p 32768 -o "y:\\" --remote-dir "y:\\" -s "NVenc_h264_small_deinterlace" --priority 3 --no-move

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

あとは、chinachu で録画後に自動実行されるように config.json に追記します。

"recordedCommand": "/home/chinachu/bin/AmatsukazeAddTask.sh",
おしりのカンマに注意。 これで、chinachu で録画後に、自動的にエンコサーバのエンコードキューに登録されるようになります。めでたしめでたり。

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

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

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

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

参考リンク: chinachu プロジェクトサイト https://chinachu.moe/

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

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

タグ: Amatsukaze FreeBSD Chinachu