*

Mirakurunのチャンネル設定更新スクリプトを作ってみた

  最終更新日:2019/02/12

Mirakurunチャンネル設定更新スクリプト

Mirakurunチャンネル設定更新スクリプト

 Mirakurunのチャンネル設定を更新するスクリプトを作ってみました。

スポンサーリンク

はじめに

 Mirakurunのチャンネル設定は地デジのみ自動設定が可能ですが(2019年2月10日現在)、BSとCSは手作業で設定を記述する必要があります。

 2018年に4K放送開始の影響で既存のBS/CSの放送局の帯域再編があり、そのたびに設定を変更するのは面倒だなと感じていました。

 そこで今回、地デジ、BS、CSのチャンネル設定を更新するPerlスクリプトを作りました。

 ただし、スクリプト単体では動作せず、epgdumpコマンドを使用する必要があります。epgdumpはデジタル放送のストリーミングであるMPEG2-TSからEPGデータを取得するためのコマンドです。

 なお、Mirakurunにもmirakurun-epgdumpと言うコマンドが付属します。しかし、残念ながら出力する情報が番組情報のみで放送局の情報が取得できないため、今回は利用できませんでした。

 今回作成したスクリプトを動かすには、以下の項目を完了している必要があります。

  • Mirakurunがインストール済みである(未設定でも可)
  • 録画コマンド(recpt1)が利用可能な状態である

 Mirakurunのインストール方法等については、当ブログの以下の記事を御覧ください。

 それでは、以降でepgdumpコマンドのインストール方法とスクリプトの使い方を説明します。

epgdumpインストール

 epgdumpコマンドは様々な亜種が存在しますが、今回はいわゆるSTZ版と呼ばれるものを使用します(必要なのはEPGデータをXML出力する機能なので、他の亜種でも使えるかもしれません)。

 以下を実行してインストールします。

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

Ubuntuの場合)
$ sudo make install

CentOS, Debian等の場合)
$ su
$ make install

チャンネル設定更新スクリプトのインストール

 当初はスクリプト名を”mirakrun-channels-config.pl”と考えていましたが、長いので”mcconfig.pl”にしました。

 それでは、スクリプトを当ブログからダウンロード、インストールします。以下のコマンドを実行します。2つPerlモジュールを必要とするため、そちらもインストールします。

$ wget https://www.jifu-labo.net/files/mcconfig.pl.gz
$ gzip -d mcconfig.pl.gz

 スクリプトで使用するrecpt1コマンドとepgdumpコマンドはスクリプトの13、14行目にフルパス名を書いています。もし2つのコマンドのインストール先が異なるようであれば、スクリプトをviエディタなどで書き換えて下さい。

my $Recpt1_Cmd   = "/usr/local/bin/recpt1";
my $EPGDump_Cmd  = "/usr/local/bin/epgdump";

 当ブログの記事を参考にPLEXチューナーの設定をした場合、13行目をrecpt1_px4に変更します。

$ vi mcconfig.pl

必要なら13行目を書き換える

 以降、ディストリビューションによって異なります。

Ubuntuの場合)
$ sudo install -m 755 mcconfig.pl /usr/local/bin/
$ sudo apt-get install libxml-libxml-perl libyaml-perl

CentOSの場合)
$ su
$ install -m 755 mcconfig.pl /usr/local/bin/
$ yum install perl-XML-LibXML perl-YAML

Debian等の場合)
$ su
$ install -m 755 mcconfig.pl /usr/local/bin/
$ apt-get install libxml-libxml-perl libyaml-perl

スクリプトの使用方法

 スクリプトはMirakurunのチャンネル設定ファイルのchannels.ymlを書き換えるため、rootユーザーで実行して下さい。

 channels.ymlの書き込み許可が、rootユーザーだけになっているためです。一般ユーザーも書き込み可能にして誰でも実行可能にするのも手ですが、それは自己責任でお願いします。

 また、このスクリプトは設定ファイルを更新するだけなので、Mirakurunに設定を反映するためにはスクリプト実行後にMirakurunを再起動して下さい。

 以降はUbuntu基準で書いているため、sudoコマンド実行箇所はrootユーザーで実行して下さい。

初回実行

 Mirakurunを停止後、スクリプトを実行します。初回は設定を全更新するため”-f”オプションを付けています。完了まで約13分かかります。

$ sudo mirakurun stop
$ sudo mcconfig.pl -f

実行結果例 - 東京近郊の場合)
13: rec fail
14: rec fail
15: rec fail
16: empty epg
17: rec fail
18: rec fail
19: rec fail
20: rec fail
21: フジテレビ
22: TBS1
23: テレビ東京1
24: テレビ朝日
25: 日テレ1
26: NHKEテレ1東京
27: NHK総合1・東京
28: rec fail
29: rec fail
(中略)
60: rec fail
61: rec fail
62: rec fail

BS01_0: OK
BS03_0: OK
BS05_0: OK
BS07_0: rec fail
BS09_0: OK
BS11_0: OK
BS13_0: OK
BS15_0: OK
BS17_0: rec fail
BS19_0: OK
BS21_0: OK
BS23_0: OK

CS2: OK
CS4: OK
CS6: OK
CS8: OK
CS10: OK
CS12: OK
CS14: OK
CS16: OK
CS18: OK
CS20: OK
CS22: OK
CS24: OK

 地デジはチャンネル13から63、BSとCSの各チャンネルをそれぞれ10秒ずつ録画し、XML出力したEPGデータからチャンネル情報を取得しています。

 実行結果例で”rec fail”とあるのは必ずしもエラーではありません。存在しないチャンネルを録画した場合にも表示しています(上記例の”rec fail”は問題なし)。ただし、”rec fail”しか表示されないようなら、TVチューナーの設定を確認して下さい。

 ”empty epg”が表示された場合、該当のチャンネルの録画はできたがEPGデータが取得できなかったことを意味します。テレビ信号が弱い場合などに表示されます。

 EPGデータが取得できなかったチャンネルは個別に再設定することも可能です。上記例では地デジの16チャンネルが取得できていないので、録画時間を20秒に伸ばして試してみます。

$ sudo mcconfig.pl -c 16 -t 20

実行結果例)
16: TOKYO MX1

 BS、CSなども同様に”-c BS15_0”、”-c CS12”のように指定すれば、個別に再設定可能です。

 スクリプトの実行が完了したら、最後に設定内容を確認し、Mirakurunを起動して終了です。

$ sudo mirakurun config channels
$ sudo mirakurun start

チャンネル設定更新

 このスクリプトで一番実現したかったことはBSとCSのチャンネル設定更新です。

$ sudo mcconfig.pl -bs -cs

 上記のように実行すればBSとCSの設定のみを更新できます。この時、地デジの設定は既存のものをそのまま使用します。

 地デジのみを更新したい場合、”-gr”を指定すれば可能です。

チャンネル受信拒否設定

 スクリプトで設定したチャンネルを受信したくない場合、以下のようにチャンネルごとに設定を編集して下さい。

- name: ショップチャンネル
  type: CS
  channel: 'CS8'
  serviceId: 55
  isDisabled: true

 受信したくないチャンネルは、上記例の5行目のように”isDisabled: true”を追加します。

 ”isDisabled”の設定は、スクリプトで”-f”を指定しない限り、設定を引き継ぎます。逆に”-f”を指定すると”isDisabled”の設定を消します。

注意点

 Mirakurunのチャンネル設定をスクリプトで直接書き換えるため、実行途中にCtrl+Cなどで強制終了すると設定が中途半端な状態で保存されます。

 そのような場合、”-f”オプションを付けて全設定を更新し直して下さい。

$ sudo mcconfig.pl -f

 または、古い設定が”/usr/local/etc/mirakurun/channels.yml.old”に残っているので、そちらを使って復旧して下さい。

 その他の細かいスクリプトの使い方は”-h”オプションでヘルプが表示されるので、そちらを御覧ください。

$ mcconfig.pl -h

実行結果)
# Usage:
#   Mirakurunのチャンネル設定を更新する
# 
# 詳細
#   ・/usr/local/etc/mirakurun/channels.ymlを更新する
#   ・設定を反映するにはMirakurunの再起動が必要
#   ・指定ファイルに設定を出力することも可能
#   ・更新前のisDisabled設定を引き継ぎ可能
#   ・地デジ、BS、CSのチャンネル情報を個別に更新可能
#   ・個別更新した場合、それ以外のチャンネルは古い設定を引き継ぐ
#   ・更新前の設定はchannels.yml.oldファイルとして保存
#
# 書式
#   $script_name [options]...
#
# オプション
#   -h, -help 本内容の表示
#
#   -t, -time <sec>      チャンネル情報を取得するための録画秒数(デフォルトは10秒)
#
#   -gr                  地デジのチャンネル設定を更新する
#
#   -bs                  BSのチャンネル設定を更新する
#
#   -cs                  CSのチャンネル設定を更新する
#
#   -c, -channel <ch>    指定したチャンネル設定のみを更新する
#                        本オプション指定時、-gr, -bs, -cs, -fを無視する
#
#   -f, -force-update    設定を新規にやり直す
#                        -gr, -bs, -cs指定と組み合わせすると個別に新規設定する
#                        isDisabled設定は削除した状態で設定する
#
#   -o, -output <file>   指定ファイルに設定を出力する
#
#   -d, -debug           デバッグ情報を標準出力に表示する
#
# 注意事項
#   ・本スクリプトを強制終了した場合の動作は保証しない
#   ・強制終了時、設定途中の情報を保存するため、最悪空ファイルになる恐れがある
#