Linux系の録画ツールで録画した番組をAmatsukazeで自動エンコードする方法

録画サーバー

今回はスマホやガジェット関連ではなく久々のDTV関連のお話です。

スポンサーリンク

どうしたの?

Linuxにはテレビ録画ツールは結構沢山あって、どれも完成度が高くLinuxはサーバー用途で使われることが多いので安定性も高いです。ちなみに自分はChinachuを使っています。

しかし、録画した後の処理(CMカットやMP4エンコード)をするソフトは多くありません。LinuxでCMカットができるツールはComskipくらいしかなく、そしてComskipは精度が低く完全自動化をするのは厳しいです。

現状Linux系OS単体で録画後、CMカットをしてH264なMP4を自動的に作るというのは無理があります。

結局Windowsソフトを利用することになりますが、調べても”LinuxとWindowsを使って自動でCMカットしてエンコードをしてる”という記事は見当たりませんでした。

スポンサーリンク

Windowsの録画エンコードソフトを探した

まずは市場調査というわけでWindowsのTSファイルエンコードツールを色々探しました。

個人的に便利そうだなと思ったのが、インタレストらんだむ(@rndomhack)さんの「AutoConvert」、Nekopandaさんの「Amatsukaze」の2つです。

どちらも利用してみましたが、機能性ならAutoConvertです。

が、直感的過ぎてエラーがよくわからなかったり、コマンドでキュー追加ができなさそうだったので良いソフトでしたが、利用することを諦めました。

そこで最近頻繁にアップデートしている「Amatsukaze」を利用するのが一番しっくりきたので、これを利用できないかと考えました。

スポンサーリンク

LinuxとWindows間でエンコードする方法を考える

思いついた方法は2つありました。

  • Wineを使ってAmatsukazeの追加ツール(AmatsukazeAddTask.exe)を動かす方法
  • Windows側にOpen-SSHを入れてスクリプトでうまいことやる

1つ目はAmatsukazeAddTask.exeの起動まではできましたが、いざコマンドを送るとエラーで前に進めなかったので断念。

2018年10月14日追記
Amatsukaze製作者様から引数項目の追加とmonoのみでの動作をサポートして頂けたため、LinuxでWineなしでAmatsukazeAddTask.exeが利用できるようになりました。

2つ目は意外とうまくいきそうだと思ったのでこの案を利用しました。

スポンサーリンク

やり方

AmatsukazeのアップデートでLinuxのmonoでAmatsukazeAddTask.exeが利用可能になったので下記内容はそのやり方を紹介しています。
打ち消し線の部分はアップデート前のやり方です。
削除してもいいのですが、別のソフトで応用できそうだったので残しています。

必要事項

  • Linux側でSambaを利用して録画フォルダを開放すること
  • 録画用のLinux PCと別のWindows PC(仮想にWindowsインストールでもできるかも?)
  • Windows側で最低限Amatsukazeでエンコードできることを確認

LinuxネイティブでAmatsukazeAddTask.exeが動作可能になったことによりWindows側にOpen-SSHを導入する手間や無駄で強引なスクリプトを動かす必要がなくなりました。

Windows側でやること

今回のメインである「Amatsukaze」はとりあえずサーバーモード(AmatsukazeServer.vbs)で起動します。スタートアップにショートカット作って入れとくのがオススメです。

次に今回の1つ目のポイントのバッチファイルを作成します。 今回はTS置き場を「Y:」、エンコード先を「Z:」として割り当てるとします。

そしてAmatsukaze本体は「C:」直下においています。 Windows側はこれだけです。

Linux側でやること

monoが動かないとAmatsukazeAddTask.exeが使えないのでパッケージをインストールします。

インストール方法はmono公式サイトを参考にしてください。

Download - Stable | Mono

インストールできたならAmatsukazeをLinux側の適当なフォルダに配置します。
ホームディレクトリなどが良いでしょう。
そしてAmatsukaze/exe_filesにある

mono AmatsukazeAddTask.exe

が実行できることを確認します。
正しく動けば引数に関するヘルプが出るはずです。

後は、自動化のために簡単なスクリプトを書きます。

#!/bin/bash
mono /home/hogehoge/Amatsukaze/exe_files/AmatsukazeAddTask.exe -f "$1" -ip [Windows PCのIPアドレス] -p [Amatsukazeの開放ポート、デフォルトは32768] --remote-dir "[Windows側から見えるTSファイル置き場]" -s "自動選択_デフォルト"--priority 2 --no-move -r "[WindowsのAmatsukaze本体があるフォルダまでのパス]" -o "[出力フォルダ]"

※$1はChinachuでrecordedCommandとして設定すると出力ファイルがこの変数となるので、それを利用しています。
これをrecorded.shなりで保存して録画ソフトで設定します。

注意すべき点としては[Windows側から見えるTSファイル置き場]、[WindowsのAmatsukaze本体があるフォルダまでのパス]、[出力フォルダ]をWindows PCから見える書き方でなければならないことです。

そして\(バックスラッシュ)はエスケープ文字となるので気をつけるということです。

例えば[Windows側から見えるTSファイル置き場]は今回は「Y:\」としたのでシェルスクリプト的には「Y:\\」となります。このようにWindowsでは一つの「\」だったものを「\\」にする必要があるので十分に注意してください。

以前はOpen-SSHをWindowsに入れたりと面倒ごとシンプルで使いやすくなりました。
製作者様には感謝しきれません。

スポンサーリンク

nano対応アップデート以前のやり方

必要事項

  • Linux側でSambaを利用して録画フォルダを開放すること
  • 録画用のLinux PCと別のWindows PC(仮想にWindowsインストールでもできるかも?)
  • Windows側にOpen-SSHを導入してパスを通すこと(重要!)
  • Windows側で最低限Amatsukazeでエンコードできることを確認

Open-SSHはここを参考にすれば比較的簡単に導入できます。

Windows側でやること

今回のメインである「Amatsukaze」はとりあえずサーバーモード(AmatsukazeServer.vbs)で起動します。
スタートアップにショートカット作って入れとくのがオススメです。

次に今回の1つ目のポイントのバッチファイルを作成します。 今回はTS置き場を「Y:」、エンコード先を「Z:」として割り当てるとします。

エクスプローラー上で割当の設定してもコマンド上では見えなかった不思議な挙動だったので、スクリプト内で毎回割当設定をするようにしています。

そしてAmatsukaze本体は「C:」直下においています。

net use /y z: \[サーバーIP]\[TSのあるフォルダ] & net use /y y: \[サーバーIP]\[エンコード先] "C:\Amatsukaze\exe_files\AmatsukazeAddTask.exe" -r "C:\Amatsukaze" -f %1 -ip "localhost" -p 32768 -o "Z:\エンコード済み" -s "自動選択_デフォルト" --priority 2 --no-move

今回はこれをユーザーフォルダ(C:\User\Till0196のような場所)にcommnd.batととして置くとこにしました。 Windows側はとりあえずこれだけです。

Linux側でやること

SSHのログイン自動化のために「sshpass」をインストールします。

UbuntuやDebianなら

sudo apt install sshpass

でインストールできるはずです。

インストールできたなら

'sshpass -p '[Windows側のユーザーパスワード]' ssh -t -o StrictHostKeyChecking=no [Windows側のユーザー名]@[Windows PCのIPアドレス]'

これで一度WindowsのSSHに入れるかを試しましょう。Chinachuには録画終了後にスクリプトを実行させる機能があるので、今回はこれを利用します。
他の録画ツールも同じように録画終了後にコマンドを実行させることができるので各自調べてみてください。

今回、数時間の試行錯誤の末うまく実行できたスクリプトは下記のとおりです。

#!/bin/bash
filename=`echo "$1"|sed -E 's/^(\/.*\/)*(.*)/\2/'`
filepath='Y:\'<del>new_filename="`echo ${filepath}${filename}`"
remote='sshpass -p '[Windows側のユーザーパスワード]' ssh -t -o StrictHostKeyChecking=no [Windows側のユーザー名]@[Windows PCのIPアドレス]
${remote} command.bat "\"${new_filename}"\"

もっと良いスクリプトはあるはずですが、超初心者の自分の技術ではこれが限界でした。
WindowsとLinuxでスクリプトの考え方も違うのでかなりしんどかったです。
このスクリプトの意味としては、下記のとおりです。

1行目: bash宣言
2行目: Chinachuの吐いた$1というフルパスをechoとsedを使ってファイル名のみにしてそれをfilenameと設定。
3行目: Winodows側からみたTSファイルのフォルダ場所をfilepathと設定。
4行目: filepathとfilenameを使って、Windows側から見えるTSファイルのフルパスを作る。new_filepathと設定。 5行目: sshへ入るためのコマンドをremote設定
6行目: remoteとnew_filepathを使ってコマンドを実行。

6行目の「"\"」はWindows側での「"」の解釈の違いから不具合がでるので仕方なくこうしています。

これをrecorded.shなりで保存して録画ソフトで設定します。

後は各自で煮るなり焼くなり

自分の環境ではとりあえずこれでうまく行ってます。
録画終了したら自動的にキューに入ってエンコードってなってるので多重起動してエンコードが進まなくなることもないので、すごく快適です。

もちろん環境によってうまくいかない場合もあるかもしれません。

スポンサーリンク

総括的な何か

めちゃくちゃ疲れました。
ただ、Amatsukazeめっちゃ便利です。

※アイキャッチが雑で見にくくてすいません。慌てて作ったので、いつか変えるかもしれません。

コメント