Raspberry Pi 4BとPX-W3U4で録画マシンの構築 (2)スケジュール録画とエンコード設定

この記事の続きです.

 

 
Raspberry Piで録画ができることを確認しましたが,このままでは番組表もなければスケジュールで録画することもできず,今放映中の番組を見ることも叶いません.そこで,録画チューナーサーバであるMirakurunと,そのクライアントであるChinachuを導入します.
 

6. Mirakurunのインストール

・MirakurunはNode.jsを必要とします.必要なNode.jsのバージョンを確認しておきます.
 
Node.js ^10.15.0 < 11 || ^12 || ^14 とのことでした.Node.jsのバージョンを確認すると,現在は12がLTSで対応しているようなので,これをインストールします.
 

当初は14にしたのですが,Mirakurunが動いても後述のChinachuが動かなかったので,無難にLTSにしました.Nodejsはバージョン変更がapt-getだとめんどくさいので,nodejsのバージョン管理システム"n"を使います.

$ sudo apt-get install nodejs npm 
$ sudo npm install –g n 
$ sudo n lts 

もし事前にapt-getでNode.jsをインストールしていた場合削除しておきます. 

$ sudo apt-get purge nodejs npm 
$ sudo apt-get autoremove 

バージョンを確認すると,今回はv12.18.3でした 

$ node –v 

 

・タスク管理ソフトのPM2をインストールします.

$ sudo npm install pm2 -g 

・Mirakurun本体をインストールします.

sudo npm install mirakurun -g --unsafe --production 
sudo npm install rivarun -g 
sudo npm install arib-b25-stream-test -g –unsafe 
$ sudo pm2 status 

pm2のステータスでMirakurun-serverがonlineになっていればOKです.

 

・録画チューナー設定を書き換えます.前回の記事で,4つのビデオデバイスが使えるようになったので,以下のようにチューナーを使うコマンドを設定します.

$sudo EDITOR=nano mirakurun config tuners 
- name: PX4-S1 
  types: 
    - BS 
    - CS 
  command: recpt1 --device /dev/px4video0 --lnb 15 <channel> - - 
  decoder: arib-b25-stream-test 
  isDisabled: false 
  
- name: PX4-S2 
  types: 
    - BS 
    - CS 
  command: recpt1 --device /dev/px4video1 --lnb 15 <channel> - - 
  decoder: arib-b25-stream-test 
  isDisabled: false 
  
- name: PX4-T1 
  types: 
    - GR 
  command: recpt1 --device /dev/px4video2 <channel> - - 
  decoder: arib-b25-stream-test 
  isDisabled: false 
  
- name: PX4-T2 
  types: 
    - GR 
  command: recpt1 --device /dev/px4video3 <channel> - - 
  decoder: arib-b25-stream-test 
  isDisabled: false 
Mirakurunを再起動しておきます.
$ sudo mirakurun restart 
 
・チャンネル設定
Mirakurunは標準で地上波のチャンネル設定ができますが,BSは手動で入力する必要があります.以下のサイトにPerlのチャネル設定スクリプトが公開されていますので,ありがたく使わせてもらいます.
 

epgdumpをインストールします.

$ git clone https://github.com/stz2012/epgdump 
$ cd epgdump 
$ make 
$ sudo make install 

次にPerlスクリプトをダウンロード します.

$ wget https://www.jifu-labo.net/files/mcconfig.pl.gz 
gzip -d mcconfig.pl.gz 
sudo install -m 755 mcconfig.pl /usr/local/bin/ 
sudo apt-get install libxml-libxml-perl libyaml-perl 

Mirakurunを停止し,ダウンロードしたチャンネル設定スクリプトを実行します. 

$ sudo mirakurun stop 
$ sudo mcconfig.pl -f

チャンネル設定を確認してMirakurunを再起動すれば完了です.

$ sudo nano /usr/local/etc/mirakurun/channels.yml 
$ sudo mirakurun restart 

・録画動作が正しく動くか確認しておきます.

$ rivarun --b25 --mirakurun localhost:40772 --ch GR/27 15 /home/video/test2.ts 

・Mirakurunはログを多く記録するので,ログローテーション設定をします.

pm2のlogrotateをインストールします.

$ sudo pm2 install pm2-logrotate 
$ sudo nano /etc/logrotate.d/mirakurun 

以下の内容を記載して保存し,mirakurnを7日周期で圧縮して保存する動作と設定します.

/usr/local/var/log/mirakurun.stdout.log 
/usr/local/var/log/mirakurun.stderr.log 
/{ 
  daily 
  compress 
  rotate 7 
  missingok 
  Notifempty 
} 

Mirakurunを再起動して完了です.

$ sudo mirakurun restart 

 

7. Chinachuの導入

・以下のコマンドでインストールします.

$ git clone -b gamma git://github.com/kanreisa/Chinachu.git 
$ cd Chinachu 
$ sudo ./chinachu installer 

・設定ファイルを作成します.

$ echo "[]" > rules.json 
cp config.sample.json config.json 
$ nano config.json 

 

内容を以下の3行変更しておきます.

"uid":"userid", 
"recordedDir":"/home/video/", # 録画先ディレクト
"wuiOpenHost": "0.0.0.0", 

・ログローテーション設定

Mirakurunと同様にPM2によるログローテーション設定をしておきます.

$ sudo nano /etc/logrotate.d/chinachu 
/usr/local/var/log/chinachu-operator.stderr.log 
/usr/local/var/log/chinachu-operator.stdout.log 
/usr/local/var/log/chinachu-wui.stderr.log 
/usr/local/var/log/chinachu-wui.stdout.log 
{ 
  weekly 
  compress 
  rotate 4 
  missingok 
  notifempty 
} 

・起動設定

Chinachuをインストールしたディレクトリで以下を実行し,Chinachu本体が起動するか試します.

$ ./chinachu service wui execute 

うまく起動するようならインストールはうまく行っています.Ctrl+Cで落とし,PM2による自動起動設定をします.ただし,PM2で起動しようとするとNode.jsにパスが通ってないと怒られたため,先にNode.jsにシンボリックリンクを貼っておきます.

$ ln -sf /usr/bin/node .nave/node 
$ ln -sf /usr/bin/npm .nave/npm  

pm2で自動起動設定をします.

$ sudo pm2 start processes.json 
$ sudo pm2 save 

ChinachuからMirakurunを使ってEPG取得テストをします.うまく動いていれば成功です.

$ ./chinachu update 

http://[RPiのIPアドレス]:20772/にアクセスするとChinachuにアクセスでき,録画スケジュールや検索が可能になります.

 

8. 動画エンコード設定

録画した動画はm2tsのままですと30分3GB程度の容量になり,HDDを圧迫しますので,できればエンコードして容量を小さくしておきたいところです.Raspberry Pi 4BはH.264のハードウエアエンコーダを持っており,それを使えばCPUに負荷をかけず高速にエンコードできます.

手順としては以下の通りです.

ffmpegをインストールします.

$ sudo apt install ffmpeg 

・ハードウエアエンコーダ"h264_omx"があるか確認します.

$ ffmpeg-codecs 

エンコードを以下のコマンドで試します.

$ ffmpeg -i /home/video/test.ts -codec:v h264_omx -b:v 3000k /home/video/test.mp4 

 

ただし,今回はOSとしてUbuntu 64bitを用いたのですが,このOSではハードウエアエンコーダは現状使えないとのことでした.

ffmpeg h264_omx encoding on RPi 4 running Ubuntu not working... where does the problem lie? · Issue #1366 · raspberrypi/firmware

 

H264_v4l2m2mが使えるという記載がありますが,試したところエンコード後の画像が緑がかってしまい,うまく行きませんでした.ffmgegを自前でビルドすれば行けるかとも思ったのですが,ビルドもうまく通らず,諦めています.おとなしく最初からRaspbian 32bitとしておき,余ったメモリはRAMディスクにでもしたほうが良かったと思います.

 

まあ速度は遅いもののソフトウエアエンコードは可能であるため,ソフトウエアエンコードをスケジュールします.

まず,引数に与えたディレクトリに存在する".m2ts"ファイル全てにffmpegのコマンドを適用するシェルスクリプト"m2ts2mp4.sh"を作成します.

#!/bin/bash 
#第一引数がなければ終了 
[ "x$1" = "x" ] && exit 1 
# 引数にファイルパスを代入 
DIR=$1 
# ディレクトリ直下の"*.m2ts"ファイル全てに対しエンコード
for file in `\find $DIR -maxdepth 1 -name '*.m2ts'`; do 
  ffmpeg -dual_mono_mode main -i $file -vcodec libx264 -crf 25 -s 1280x720 -aspect 16:9 -acodec aac -strict experimental -q:a 0.8 -ac 2 -vf yadif -f mp4 $DIR/mp4/${file##*/}.mp4 
done 

これをCronを使って定期的にプログラム実行する設定をします.

参考:Ubuntuでのcronの使い方 - 知的好奇心

$ sudo cp /etc/crontab /etc/cron.d/cron_edit 
$ sudo nano /etc/cron.d/cron_edit

# 毎日10時に実行する設定を追加

 

00 10 * * *  user_name  /home/video/m2ts2mp4.sh 

これで安定した録画サーバを比較的安価に構築することができました.

 

前の記事:

dededemio.hatenablog.jp