Raspberry Pi 4とChinachu γで(なるべく安く)録画サーバーを建てて自動エンコードするまで

#はじめに
Raspberry Pi4が手に入って、ちょっと気になっていた録画サーバをセットアップしたので主に備忘録として書いてます. 

各種ドライバーやソフトのセットアップについては下記の参考記事含め、豊富な情報があるのでここでは<b>機材(?)の選定や運用について</b>共有できればいいなと考えてます.

参考記事

>
Raspberry Pi 4+Chinachu v0.10.1-gamma.0 地デジ録画サーバー構築
https://qiita.com/tomtwinkle/items/99fe34140fa5b1a70e7b
chinachu と amatsukaze を連動させる。
http://www.mousou.org/node/456

##運用
・ラズパイは録画と配信を担当

・予約操作にはChinachu γ,　視聴にはPlex Media serverを用いる

・エンコードはマシンパワーを稼げるメインPCが行うが、常時起動ではないのでラズパイ側で起動させる

・エンコード時にAmatsukazeを用いてCMカット等必要な編集も合わせて行う

##機材
・Raspberry Pi4 (2GB)
Aliexpressでケース,ファン,電源等コミコミで6000円弱のセットが売られていたので購入
この構成でもファンレスだと70度超えるのでファンは必須.(PWM制御入れると低負荷時静かです)
メモリーは4GB modelもありますが、2GB modelでも1/4も使っていないのでこれでいいと思います

・チューナー  ISDB-T GENIATECH S270 (通称MyGica S270)
TS抜きシングルチューナーで有名(?)な <b>PX-S1UD V2.0</b>のOEM元製品らしい
Aliexpressで2700円だったので海外通販に抵抗がなければおすすめ
複数買ってもかなり安いのでダブル,トリプルチューナーにもしやすい

ドライバーは下記でPX-S1UDのものをそのまま当てたら動いた()

```
$ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
$ unzip PX-S1UD_driver_Ver.1.0.1.zip
$ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
```
・B-CAS リーダー SCR3310/v2.0
安心と信頼のリーダー、挿せば認識してくれるのでありがたい
某フリマサイトで官公庁のリースアップ品が900円だったので購入

・B-CASカード
スマホの普及でお役御免になったDVDレコーダから拝借
SoftCAS使えばリーダーもB-CASも要らないんですけど、グレーが黒になりそうなので.....

・2TBのHDD
家に転がってたやつ

##Chinachuの導入まで
チューナーのドライバー, recdvb, Mirakurun, Chinachuと下から重ねるようにいれていけば大丈夫です.

※Nodejsのバージョンでハマったのでnパッケージを用いる等してバージョンを細かく指定してあげるといいと思います...(当方はver12のシリーズで動作しました)

細かい導入手順については先述の参考記事始め豊富な情報がありますので、今回は割愛します.

##自動エンコードの導入(Amatsukaze, Chinachu連携)
Chinachu γ導入後の仮定

・Chinachuで録画したTSは `/mnt/hdd/recorded`に保存
・TSファイルはエンコードPCから`\\192.168.1.2\raspberrypi\recorded\`でアクセス可能

以上の環境を前提として進めていきます.

##Amatsukazeの導入(エンコードPC)
以下からダウンロードしてお好きな場所に解凍(今回は`C直下`とします)
>
https://github.com/nekopanda/Amatsukaze
>

1.<b>Amatsukaze.vbs </b>を起動してプロファイルを作成します
ここでエンコードやCMカットの設定を行いますが設定手順については今回省略し、プロファイル名を`Raspberry_Pi`として保存したとします.

以下のサイトを参考に設定
>
AmatsukazeでTS全自動エンコード
https://enctools.com/amatsukaze/
>

2.<b>AmatsukazeServer.vbs</b> をスタートアップに登録
このままだとAmatsukazeServerのWindowが毎回出てくるので、動作確認が済んだら以下のように書き換えて最小化で起動させると鬱陶しくないです.

```Amatsukazeserver.vbs
'変更前
Return = WshShell.Run(".\exe_files\AmatsukazeGUI.exe -l server -p 32768", 0, true)

'変更後
Return = WshShell.Run(".\exe_files\AmatsukazeGUI.exe -l server -p 32768", 6, true)

```
###WAke On LANの設定
エンコードPCをラズパイ側から起動できるようにする仕組みとして `Wake On Lan` を使用します
BIOSの設定が必要なのでここで方法を書くことは難しいのですが、電源断後もPCIやネットワークカードに電源供給をResumeするといった項目があれば、当たる可能性が高いと思います...

これでラズパイ側から起動パケットを送出することで必要に応じてエンコードPCを起動しエンコードキューに追加することができます.

###AmatsukazeServerの設定
AmatsukazeServerが起動した状態で`AmatsukazeClient.vbs`を起動し、エンコード後の挙動を<b>シャットダウン</b>に設定します.

##Amatsukazeの導入(RaspberryPi)
エンコードPCで展開したものをラズパイに丸ごとコピーして `~/Amatsukaze` に配置

###monoの導入
AmatsukazeServerのキューにタスクを追加する `AmatsukazeAddTask.exe`は.NETで動作するので`mono`を導入

```
$ sudo apt install mono-devel
$ mono ~/Amatsukaze/exe_files/AmatsukazeAddTask.exe

~/Amatsukaze/exe_files/AmatsukazeAddTask.exe <オプション> -f <input.ts>                                                

オプション
  -f|--file <パス>        入力ファイルパス
  -s|--setting <プロファイル名> エンコード設定プロファイル
  -b|--bat <バッチファイル名> 追加時実行バッチ
  --priority <優先度>     優先度
  -ip|--ip <IPアドレス>   AmatsukazeServerアドレス
  -p|--port <ポート番号>  AmatsukazeServerポート番号
  -o|--outdir <パス>      出力先ディレクトリ
  -d|--nasdir <パス>      NASのTSファイル置き場
  -r|--amt-root <パス>    Amatsukazeのルートディレクトリ（サーバ起動用）
  --remote-dir <パス>     サーバから入力ファイルにアクセスするときのディレクトリ                                                     
  --no-move               NASにコピーしたTSファイルをtransferedフォルダに移動しない                                                      
  --clear-succeeded       NASにコピーする際、コピー先のsucceededフォルダを空にす                                                      
  --with-related          NASにコピーする際、関連ファイルも一緒にコピー・移動する                                                      
  --subnet <サブネットマスク>  Wake On Lan用サブネットマスク
  --mac <MACアドレス>  Wake On Lan用MACアドレス

```

###スクリプトの導入
上記のオプションに合わせて録画後スクリプトを書きます

```AddTask.sh
mono /home/pi/Amatsukaze/exe_files/AmatsukazeAddTask.exe #実行ファイルパス \ 
--subnet 255.255.255.0 #起動パケットを送出するネットマスク \
--mac AA:BB:CC:DD:EE:FF #エンコードPCの物理アドレス \
-r "C:\\Amatsukaze" #エンコードPCのAmatsukazeのパス
-f "$1" #エンコード対象TSファイルのパス(Chinachuが$1に録画ファイルのフルパスを代入してくれる) \
-ip 192.168.1.1 #エンコードPCのIPアドレス \
-p 32768 #AmatsukazeServerのポート(デフォは32768) \
--remote-dir "\\\192.168.1.2\RaspberryPi\recorded" #エンコードPCから見える録画フォルダのパス(\の数に注意) \
-s "Raspberry_Pi" #プロファイル名 \
--priority 3 #優先度 \
-o "\\\192.168.1.2\RasberryPi\recorded\encoded" #エンコードファイルの出力パス(\の数に注意)
```

スクリプトをChinachuの録画後スクリプトとして登録します

```
  "uid": "pi",
  "gid": "video",
  "mirakurunPath": "http+unix://%2Fvar%2Frun%2Fmirakurun.sock/",

  "recordedDir" : "/mnt/hdd/recorded/",
  "recordedCommand": "~/Amatsukaze/addtask.sh",
```

##動作確認
エンコードPCの電源を切った状態で、Chinachuで録画予約をし録画後、自動的にエンコードPCが起動しAmatsukazeServerのキューに登録されれば成功です。

####起動しないとき
Wake On Lanの設定を見直して見ましょう
`Wake ON Lan for Windows`等が便利です
>
https://www.vector.co.jp/soft/winnt/net/se500992.html
>

####エンコードが始まらないとき
エンコードPCで`AmatsukazeClient.vbs`を起動し、キューの状態を確認しましょう
パスの設定でハマりやすいので要チェックです()
<b>デフォルトでは局ロゴがないとエンコードが開始されません</b>

##最後に
ラズパイサーバ、思った以上にパワフルかつ安定性も高いのでおすすめです(エンコードは流石に厳しいですが...)