Mirakurunの地デジ/BS/110度CS対応チャンネルスキャン

 少し前にMirakurunのチャンネルスキャンを行う自作スクリプトを作ったけど、TSファイルからチャンネル名などを求めるtschput.cを標準入力からTSファイル読み込んで、直接Mirakurunのチューナー設定の書式で出力するようにすれば、ワンライナーでチャンネルスキャン出来ると気付いたので、tschput.cを元に作り直したtsmkput.cを作ってみた(2021/10/18に更新してtsmkputの引数を入力ファイル名、チャンネル、放送種別に変更した。2022/06/29に更新してARIB文字処理ミスによるチャンネル名の文字化けバグを修正した。)
2024/03/15にtsmkput、tschput、tssdoutに相当するバグ修正版プログラムのtsnameとservicenameを作成した。)
 まずはtsmkput.cのコンパイルに必要なgccと、tsmkputのシフトJIS出力をUTF-8に変換するために必要なnkfをインストールした後、tsmkput.cをダウンロードして、コンパイルする。

sudo apt-get install -y gcc nkf
wget http://www.areanine.gr.jp/~nyano/archives/nikki/tsmkput.c
gcc tsmkput.c -o tsmkput

 チャンネルスキャンは地デジ、CATV、BS、110度CSごとに次のコマンドで行える。
 地デジは13~62、CATVはC13~C63、BSはBS01_0~BS23_2の奇数チャンネル、110度CSはCS2~CS24の偶数チャンネルで繰り返して、4秒間録画したものを、tsmkputでMirakurunの書式で出力、UTF-8に変換、地デジ/CATVはサービスごとのチャンネル設定が不要なので先頭の3行のみを抽出、これをチャンネル設定ファイルに追記出力している。

for ch in `seq 13 62`; do recfsusb2n ${ch} 4 - | ./tsmkput /dev/stdin ${ch} GR | nkf --ic=CP932 | head -n 3 | tee -a ch.txt ; done
for ch in `seq 13 63`; do recfsusb2n C${ch} 4 - | ./tsmkput /dev/stdin C${ch} GR | nkf --ic=CP932 | head -n 3 | tee -a ch.txt ; done
for ch in `seq -f %02g 1 2 23`; do for cl in `seq 0 2`; do recfsusb2n BS${ch}_${cl} 4 - | ./tsmkput /dev/stdin BS${ch}_${cl} BS | nkf --ic=CP932 | tee -a ch.txt ; done; done
for ch in `seq 2 2 24`; do recfsusb2n CS${ch} 4 - | ./tsmkput /dev/stdin CS${ch} CS | nkf --ic=CP932 | tee -a ch.txt ; done

 チャンネル設定ファイルはch.txtに追記作成するので、既にch.txtがある場合は削除しておく。このch.txtをMirakurunのチューナー設定ファイルに上書きすれば出来上がり。

sudo cp ch.txt /usr/local/etc/mirakurun/channels.yml

 録画コマンドはrecfsusb2nの例で書いてるけど、recpt1やrecdvbの場合はコマンド名を変えるだけで動作する。
 dvbv5-zapを使う場合は「recfsusb2n」を「dvbv5-zap -a 1 -c /usr/local/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf -r -P」等のように「4 -」を「-t 4 -o -」に書き換えれば動作するかと思う。もちろん、-aオプションのアダプタ番号や、-cオプションのチャンネル設定は、チューナーに合わせて適切に指定する必要がある。
 当然ながらチャンネルスキャンはMirakurunが停止していて、チューナーの録画コマンドが自由に使える状態で行う必要がある。