epgrecの使い方

Early Version(日経Linux誌掲載分)から変っている分を中心に説明します。

Early Version(0.1)と現行版のおもな違い

 日経Linux誌8月号に掲載したEarly Versionと現行版(現時点では7月8日版)との違いは次の通りです。

細部の見直し

 Early Versionでは時間の都合もあり予約するスクリプトが2つあったり整理されていませんでしたが全体を整理しています。結果、場合によってgetepg.phpの実行と録画の実行がぶつかるといった不具合が直っています。また、黒Friioも恐らくは使えるようになっていると思います(実機を持っていないので確認はしていませんが恐らく)。

キーワード自動録画の追加

 番組検索の追加機能として、キーワードにヒットした番組を自動的に予約する機能を付けました。番組タイトルなどを登録しておくと、以後、自動的に予約されるようになり結構便利です。

録画モードの追加

 do-record.sh内で${MODE}変数を見て処理を変えることができる録画モード機能を追加しました。shellスクリプトが書ける人にとっては便利だと思います。

その他

 録画済み一覧にサムネールを入れられるようにしています(要ffmpeg)。また、連続した番組を予約するときに自動的に時間を調節する機能(config.phpの設定が必要)や、VLCを用いたタイムシフト再生対応など細かなところを改善しています。

番組表について

番組表のレイアウトや利用法はEarly Versionからほとんど変っていません。

epgrec01.png

番組表が見えないときは

番組表が見えずエラーらしきメッセージが表示されるときは、EPGの初回受信に失敗しています。getepg.phpの実行をやり直してください。

録画予約

 現行版では新たに、録画モードが追加されています(config.phpで$RECORD_MODEを設定しdo_record.shでモード事の録画が行えるよう設定されている場合)。簡易予約は今のところモード0に固定されています。

予約一覧の自動IDについて

 予約一覧の自動ID欄に数字がある予約は、キーワード自動録画によって自動的に予約された番組です。表ヘッダの自動IDをクリックすると自動録画キーワード管理に飛ぶことができますの、自動的に予約された内容が気に入らないときには、そのキーワードを変えるといいでしょう。

追っかけ対応

 epgrecは手動で予約された録画に関しては、その番組の放映時間が変更されても、それに合わせて自動的に録画時間を変えるといった動作は行いません。手動で行った予約は、手動で操作するという前提で作られています。
 放映時間の変更に合わせて、自動的に録画時間も変更したいのなら、後述の新機能キーワード自動録画?を使ってみてください。

録画済みの番組を再生する

 epgrecは、マイクロソフトが定義し広く利用されている簡易動画ストリーミングASF(Advanced Streaming Format)を用いた録画番組の再生に対応しています。この機能を使うと、巨大なファイルを転送せずにクライアントでの再生が(もちろんサーバー上での再生も)可能ですが、ブラウザ側に若干の設定変更が必要になります。
 通常、ブラウザではASFの再生に何らかのプラグインを利用するよう設定されていることが多いはずです(WindowsではWindows Mediaプラグインが設定されている場合が多いでしょう)。ASFに対応するプラグインの多くはMPEG2-TSのストリームに対応できません。
 ASFの再生にプラグインではなく、外部ソフトとしてVLCを対応させることで、MPEG2-TSストリームの再生が可能になります。Firefoxの場合、設定パネルのアプリケーションを開き、Content Type欄からASF(video/x-ms-asf)を探し、そのアクションとしてVLCを登録してください。

epgrec08.png

なお、この設定パネルにASFが無い場合、そのブラウザではASFとプラグインが関連づけられていませんので、設定する必要はありません。ASFを再生するアプリケーションを聞いてきたときにVLCなどを指定すれば良いだけです。

 番組表上部にある「録画済一覧」をクリックしてください。

epgrec09.png

 タイトルや内容欄が動画ストリーミングへのリンクになっています。クリックすると、VLCが起動し、その番組が再生できるはずです。早送り、巻き戻し、一時停止なども可能ですから、そこそこ便利に再生できます。
 なお、この画面で「削除」を実行するとデータベースから番組情報が消えますが、ファイルは消されません。

ASFのタイトルやAbstractについて

 ASFの外部ツールとしてVLCを設定した場合、VLCがASF中の多バイトコードのタイトルやAbstract(概要)に対応していないため、プレイリスト上でタイトルなどを正常に表示できません。これはVLC側の制限です。
 Windows Media Playerはタイトルと概要を正常に表示できますが、MPEG2-TSの多くに対応できないようです(一部には対応できるようですが…)。

タイムシフト再生について

タイムシフト再生できると便利なので少し調べてみましたが、いろいろ難しいです。

VLCの場合

VLCはASFに含まれる<DURATION VALUE>(番組の長さ)を無視し、Content-Lengthヘッダのほうで番組の長さを判断しているようです。録画中のデータを再生しようとすると、再生を始めた時点でのContent-Lengthを見てしまうので再生を始めたときの録画の末端で再生が終わってしまいます。
 そこで、嘘のContent-Lengthを返すsendsteram.phpというスクリプトを作ってみたところ、うまいことタイムシフト再生には成功しましたが、早送りができなくなってしまいました(嗚呼)。いまのところ、sendstream.phpを使っての再生を行うようにしてますが評判が悪いようならやめます。

Windows Media Player

 こちらはさすがMicrosoft純正だけあってASFの<DURATION VALUE>をきっちり見てくれるようで何もしなくてもタイムシフト再生ができます。
 ただ、MPEG2-TSの多くに対応できない(どうやら複数の番組PIDがあるTSがダメっぽい)ので設定しても不自由なだけです。また、sendstream.phpを使うとWindows Media Playerは何かがおきに召さないらしく再生できなくなってしまいます。というわけなので現状、Windows Media Playerには対応しないということにします。

録画データの削除(7月15日テスト版~)

 録画済一覧で削除ボタンをクリックすると次のようなダイアログが出ます。

epgrec-filedelete.png

この録画を本当に削除するをクリックすると録画情報のみが削除されます。また、録画ファイルも削除するにチェックを入れておくと、同時に録画ファイルも削除されます。削除後の後戻りはできませんのでよく考えてからクリックしてください。

サムネールのカスタマイズ(7月29日版~)

環境設定でサムネールを使うに設定しているのにサムネールが表示されなかったり、サムネールの大きさを変えたいという場合、サムネール生成スクリプトgen-thumbnail.shをカスタマイズすることで解決できるかもしれません。

#!/bin/sh

# サムネールを取る時間をFORMER_TIME+αだけずらします
# お好きな時間だけずらしてください

offset=`expr ${FORMER} + 2`

${FFMPEG} -i ${OUTPUT} -r 1 -s 160x90 -ss ${offset} -vframes 1 -f image2 ${THUMB}

gen-thumbnail.shはうえのようなスクリプトでデフォルトではffmpegを使って160x90ドットのサムネール画像を作成しています。ffmpegはバージョンによってオプションが違ったりするため、デフォルトのままではサムネールが作成されないというようなケースがありえます。
また、ffmpegではそもそもサムネールが作成できないという場合もあるかもしれません。
そのような場合、gen-thumbnail.shを自分の環境に合わせて書き換えてください。環境変数${OUTPUT}の動画ファイルから、環境変数${THUMB}にサムネール画像(JPEG形式のみ)を出力すればOKです。それぞれフルパスが入っています。
なお、${FORMER}には番組開始までのオフセット時間(秒)が入っていますので、例のようにexprを使ってお好きな時間だけずらすと、ほどよく番組のサムネールが取れるでしょう。逆にずらさないとCMだったり前の番組だったりのサムネールが生成されて役に立たないでしょう。このあたりの調節はお好きなようにどうぞ。

mediatomb連係機能を使う(7月15日テスト版~/option)

 この機能はまだテスト中です

 視聴にDLNAサーバーmediatombを利用している人は多いと思います。mediatombは標準ではタイトルとしてファイル名を使用します。FILENAME_FORMATの設定を用いるとファイル名にタイトルが入れられるものの、DLNAクライアントから拡張子等も見えてしまうのであまり格好がいい物ではありません。
 epgrecは録画が終了すると同時に、mediatombのDBを書き換えて番組タイトルと概要をmediatombのDBに反映させる機能を持っています。DLNAクライアントから、ファイル名ではなくタイトルが見えるわけです。この機能はオプションで、mediatombを使用していない方は設定する必要はありません。

mediatomb側の設定

 まず、mediatombの設定ファイルconfig.xmlを変更して、SQLiteからMySQLにデータベースを変更する必要があります。config.xmlの書き換え箇所は次の通りです。

…
     <sqlite3 enabled="no"><!-- noにする -->
       <database-file>sqlite3.db</database-file>
     </sqlite3>
     <mysql enabled="yes"><!-- yesにする -->
       <host>localhost</host><!-- epgrecのDB_HOSTと同一に -->
       <username>yourname</username><!-- epgrecのDB_USERと同一に-->
       <database>yourdbname</database><!-- epgrecのDB_NAMEと同一に-->
       <password>yourpass</password><!-- epgrecのDB_PASSと同一に-->
     </mysql>
   </storage>
…

 その他、.tsがvideo/mpegとして扱われる設定等が必要ですが、これらは通常のmediatomb+デジタル放送録画の設定と変りません。
 config.xmlを変更したらmediatombを再起動させ、epgrecのSPOOLフォルダをmediatombのスキャンディレクトリに設定します。そのとき、スキャン方法をInotifyに必ず設定しておくひつようがあります。

mediatomb01.png

 以上で、mediatomb側の設定は終了です。

epgrec側の設定

 epgrecのconfig.phpの適当な場所に次のような行を追加します。

define( "MEDIATOMB_UPDATE", true);

 そしてmediatomb.phpを1度だけ実行ます。

$ /var/www/epgrec/mediatomb.php

 mediatomb.phpは既存の録画済みデータのタイトルとdescriptionをmediatombのテーブルに反映させるスクリプトです。
 以降、録画が終わったらmediatombのDBも自動的に書き換えられるようになり、DLNAクライアントからはタイトルが見えるようになります。

番組検索/キーワード自動録画

 現行バージョンでは番組検索に正規表現が使えるようになりました。"正規表現を使用"にチェックを入れると、検索語句欄に正規表現が使えます。ただ、MySQLには、正規表現では多バイトコードをうまく扱えないという問題がありますから、期待通りには動かないかもしれません。これはMySQL側の制限です。正規表現を使ってみて変だなあと思ったら、"MySQL 正規表現"などの語句をGoogleあたりで検索して調べてみてください。

epgrec10.png

キーワード自動録画(Experimental)

 この機能はテストが不十分で多分に実験的です。

 絞り込みを実行すると、表の下に「この絞り込みを自動録画キーワードに登録」というボタンが表示されます(※300件以上がヒットした時には表示されません)。

epgrec11.png

 2010年2月25日版以降ではキーワードごとに録画モードを設定できるようになっています。

epgrec_20100201.png

ボタンをクリックすると、自動録画キーワード管理にジャンプします。

epgrec12.png

epgrecは、ここに登録されている絞り込みにヒットする番組を自動的に予約します。毎週見ている番組のタイトルなどを登録しておくと、毎週自動的に予約されるので便利に使えるでしょう。
 なお、この画面でキーワードを削除すると、このキーワードによって自動的に設定された予約はすべてキャンセルされます
 また、手動で予約を取り消した番組については、自動録画の対象番組からはずされ、キーワードでヒットしても予約されません。手動でキャンセルされた番組は要らない番組にマークされたという判断ですので、改めて予約する時には手動で行うようにしてください。

キーワード自動録画の注意点

 自動的に実行された予約は、ある程度、放映時間の変更に追随するはずです。ただ、追随するのはgetepg.phpの実行時ですから、直前になって時間が変更されたりしたときには追随できないことが多いでしょう。もちろん、放映中(録画中)に放送時間が伸びたりしても対応できません。
 また、放送局によっては頻繁に番組の放映時間を変更しています(NHK BS1が極端に変更が多く、たぶんメジャーリーグの関係?かなにかじゃないかと)。そのような局では、EPGの取得タイミングによってある時間帯の番組表がすっぽりとなくなってしまっているときもあります。こうしたケースはごくまれで、NHK BS以外ではほとんど見かけたことが無いですが、こういう状況になると録画そのものが行われないといったことも起こり得ます。

 さらに、予約の重複が検出された番組も自動予約は行われません。キーワードをたくさん登録してバリバリ録画したいという方は複数チューナーの使用が前提になるでしょう。FORCE_CONT_RECの設定を有効にしておくと少ないチューナー数でもそこそこの自動録画に対応できると思います。

 もうひとつ、epgrecはハードディスクの残り容量は感知しません。キーワードによって、大量の予約が自動的に行われハードディスクが目一杯になってしまうと録画できなくなりますし、その他にも大量の不具合が生じると思いますが、こうした点については利用者自身で管理するようお願いします。

チャンネル情報の編集

(この機能は2010年2月25日版以降)
番組表でチャンネル名をクリックするとチャンネル情報ダイアログが開きます。

epgrec_20100202.png

サービスID欄に、そのチャンネルに設定したいサービスIDを設定し「変更」をクリックするとサービスIDの情報が更新されます。設定したサービスIDは、do-record.sh内で環境変数SIDとして参照、利用できます。

サービスIDの設定例

設定例を紹介しておきます。

config.phpの$RECORD_MODE

次のように録画モード1を使えるようにします。

$RECORD_MODE = array(
        // ※ 0は必須で、変更不可です。
        0 => array(
                'name' => 'Full TS',    // モードの表示名
                'suffix' => '.ts',      // ファイル名のサフィックス
        ),

        1 => array(
                'name' => 'Minimum PID',
                'suffix' => '_tss.ts',
        ),
       /* 
       2 => array(
               'name' => '12Mbps MPEG4',
               'suffix' => '.avi',
       ),
       */
);

do-record.sh

PT1/2+現在のドライバの設定例です。

#!/bin/bash

RECORDER=/usr/local/bin/recpt1

if [ ${MODE} == 0 ]; then
   $RECORDER --strip --b25 $CHANNEL $DURATION ${OUTPUT}
elif [ ${MODE} == 1 ]; then
   $RECORDER --strip --b25 --sid $SID $CHANNEL $DURATION  ${OUTPUT}
fi

サービスIDの変更

デフォルトのhdから別の変更したのは次の局です

放送大学 full
NHK BS1 101
NHK BS2 102
WOWOW1 191
WOWOW2 192
WOWOW3 193

これら以外はデフォルトのままで問題ありません。
放送大学は、複数チャンネルの放送をやっているので念のためfullにします。NHK教育もやってる時があるようです。
CSを設定する場合はさらに複雑になるでしょう。

サイト内検索

AND OR