必要ハードウェアfoltiaのしくみインストール操作概要おわりに・foltiaとは何か?foltiaは主にアニメを効率良く失敗なく録画するために開発された、Linux上で動く録画システムです。番組名と放映局を指定しておけばあとはなにもせずに毎回録画されます。しょぼいカレンダーというアニメ番組表サイトと強く連係することで、野球中継で時間がずれても毎回期待通り録画されます。外部オプションを取り付けることで外付けチューナのコントロールも実現します。録画した番組は自動的にMPEG4に変換され、iPodに自動転送することが可能です。PSPに転送して視聴することも可能です。録画番組は自動的にiPodに転送されて視聴可能状態となる。RAMのスペックで30分番組のMPEG4(XviD)変換が22分程度で完了しています。ivtvドライバで動作するビデオキャプチャカード:foltiaの機能を引きだすためには複数のエンコーダを搭載するのがおすすめです。GV-MVP/RXを2枚、RX2Wを1枚で計4チャンネル同時録画環境にしています。画質の点からは複数エンコーダが一枚のカードに載ったRX2Wよりも1エンコーダのGV-MVP/RX2の方が多少有利なようです。Tira-2.1(オプション):外部チューナコントロール機能を使う場合必要です。・foltiaのしくみfoltiaは「しょぼいカレンダー」というユーザ参加型アニメ番組表から取得した番組表をもとに、録画予約されている番組の放送予定をatキューに入れることで動作しています。以下に詳しい流れをみていきます。foltiaのセットアップが終わった状態で、foltiaのデータベースはしょぼいカレンダー由来の番組情報とXMLTV由来の番組情報をそれぞれ持っています。通常は番組IDと放送局を指定した自動予約を利用します。番組の録画を予約するために、放映予定ページから番組IDである[TID]を選択します。放映テレビ局とビットレートを選択する画面に移動するので内容を確認して予約ボタンを押します。番組の録画予約は番組ごとに一度するだけで全話自動で録画することが可能です。予約ボタンを押すとデータベースの録画予約テーブル[foltia_tvrecord]に番組IDと放送局、録画ビットレートが追加されます。その後、キュー入れプログラム[addatq.pl]を呼びます。addatq.plは番組IDと局IDを受け取り48時間以内の放映予定を探し、それぞれの放映ごとに録画準備のためのプログラム[folprep.pl]を放送予定時刻の5分前にキュー入れします。予約番組の放送予定時刻の5分前になると、準備プログラム[folprep.pl]が実行されます。1分前に録画プログラム[recwrap.pl]が走るようにキューを入れます。5分前に準備プログラム[folprep.pl]をキュー入れします。放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行うキャプチャプログラム[tvrecording.pl]を呼び出します。キャプチャプログラム[tvrecording.pl]はivtvドライバに付属のrecord-v4l2.plをベースに拡張したもので、搭載されている録画デバイスの空き状況を調べて、空いてる適切なデバイスを利用します。foltiaは特に指定をしない場合、同時録画する場合、地上波録画をキャプチャデバイスの若い番号から順番に、外部入力を一番大きいデバイスから順番に使用していきます。例としてキャプチャカードが4枚入っている場合、地上波録画は/dev/video0から、外部入力録画は/dev/video3から使われていきます。空きデバイスがない場合は、一番若い番号を持つビデオデバイスをつかんでるプロセスを止め、そのデバイスを利用します。録画は前後に10秒程度の余分な録画を行おうとするため、同一のチャネルで連続している番組を指定した場合であっても可能であれば2チューナ使用する形となります。tvrecording.plの録画チャンネルの引数に0を指定した場合はS入力が、-1を指定した場合はコンポジット入力が録画されます。外部入力はデフォルトで一番番号の大きいデバイスを利用します。録画が終了するとデータベースの放送情報テーブル[foltia_subtitle]に録画したMPEG2ファイル名を記録して親プロセスに戻ります録画プログラムが終了すると、親プロセスのrecwrap.plはMPEG4への変換(トラコン)の必要があるか確認して、必要な場合変換スクリプト[vfr4psp.sh]か[ipodtranscode.pl]が呼び出されます。変換フォーマットや品質は設定ファイルであらかじめ設定しておきます。MPEG4ファイルは、MPEG2ファイル保存ディレクトリの下に番組ごとに整理されます。具体的には[TID].localized/mp4/の形を取ります。XのFinderでマウントすると「魔法少女リリカルなのはA's」と表示されます。MPEG4への変換が終わるとpsp用MPEG4オプティマイザ[mp4psp]でタイトル入れとヘッダ組み立てをして最適化したあと、mplayerとImageMagickを利用してサムネールを作成します。サムネールはPSPの仕様に準拠して120x160で拡張子が.THMのjpegファイルです。データベースの放送情報テーブル[foltia_subtitle]に変換ファイル名を書き込んで録画の一連の流れが終了します。図に示すとこうなります。定期的な作業として、毎時間ごとに番組データ更新と録画キューの更新を行います。cronが一時間ごとに定時確認プログラム[schedulecheck.pl]を呼びだし、それが番組表の更新プログラム[getxml2db.pl]を呼びだしデータベースを更新したあと、予約されてる番組の数だけキュー入れプログラム[addatq.pl]を読み出します。Podcast機能を使うことで実現します。Podcast-Folcastは、トラコンが終わった番組からXMLを組み立ててRSSを作ります。このRSSをiTunesに登録することでiPodへの自動シンク機能を実現します。foltiaはデータベースに次のようなテーブルを作ります。foltia_program:「魔法少女リリカルなのはA's」のように番組名の情報を格納するテーブルです。番組ごとにトラコンのオン/オフを切り替えることも出来ます。はじまりは突然になの」のような個別番組の放映情報を持つテーブルです。foltia_station:放送局の情報を持つテーブルです。受信環境によって設定が必要になります。foltia_tvrecord:録画予約の情報を持つテーブルです。foltia_epg:XMLTV由来のEPG番組表のデータを持つテーブルです。foltia_m2pfiles:録画されたMPEG2ファイルの情報をキャッシュ的に持つテーブルです。foltia_mp4files:変換されたMPEG4ファイルの情報をキャッシュ的に持つテーブルです。現在はデータベースエンジンにPostgreSQLを採用していますが、将来的には扱いが容易なSQLiteへの切りかえも検討しています。・インストールfoltiaの動作にはLinux,Apache,PHP,Perl,PostgreSQLとビデオキャプチャ用ivtvドライバなどが必要です。インストールはおおまかにOS,Apache,ivtvドライバ、PostgreSQL、foltiaの順で進めて行くとよいでしょう。phpPgAdminやSambaなども必要に応じて入れておくと便利かもしれません。foltiaのダウンロードは公式ページまたはSubversionで入手することが可能です。Subversionを使う場合は下記のコマンドで最新versionを入手できます。foltiaまたインストールについては「foltiaインストールマニュアル」も参考になります。・配線あらかじめキャプチャカードを取り付け、に外部チューナを外部入力端子につないでおきます。Coreを使っています。一通りインストールを終えたらfoltiaを動作させるアカウント「foltia」を作ります。・ApacheインストールApacheは2.2以降が2GBを越えるファイルの転送にも対応していて便利です。typeをimage/jpegにする設定を追加することです。使う」のrpmパッケージを使用すると早いです。tuner=46,46と、エンコーダの数だけ「46」を書き足します。/dev/video*でroot以外でも利用できるようにパーミッションを変更します。・PostgreSQLインストールポイントは文字コードをEUC-JPでデータベースをつくることです。foltiaという名前でデータベースを作ったら、foltiaパッケージ付属のmktable.txtでテーブルを作成します。・各種ツールインストール以下のアプリケーションを利用します。インストールされてなければyumやaptなどからインストールして下さい。・各種Perlモジュールのインストール以下のPerlモジュールを利用します。インストールされてなければCPANなどからインストールして下さい。Time::HiResSchedule::AtDBD::PgJcodeDevice::SerialPort(Tira2を使う場合のオプション)・XMLTVインストールEPG番組表取得に必要なXMLTV日本語版をぱ研よりインストールします。H.264/AVCを作れる拡張をされたffmpegをインストールします。ffmpeg2.ここにあるiPodパッチをあてるhttp://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2006-March/009814.html3.メイクする手もとでは下記オプションでビルドしています。--enable-pthreads・foltia本体installディリクトリの中にある「perl」と「php」をそれぞれ適当なところに配置します。手もとの環境では/home/foltia/perl/と/home/foltia/php/に配置しています。・mp4pspMPEG4のトラコンに利用しているツール「mp4psp」をインストールします。」によるLinux版をベースにしたツールです。PSP用にタイトルを入力してATOMヘッダを組み立てて最適化するのに使用します。ファーストスタート形式にも最適化します。Tira-2.1を利用することにより、外部チューナのコントロールを行うことが可能です。シリアルプロトコル(の意訳)」より、サンプルプログラムのcapture.plとtransfer.plをダウンロードしてfoltiaのperlディレクトリの下のirdaディレクトリに実行権限を付けてインストールして下さい。Tira2を接続して/dev/ttyUSB0が使える状態になったら、パーミッションを666に変更しておきます。設定はperl設定php設定と録画局設定に大きく分かれています。録画局設定は[foltia_station]テーブルで行います。・設定1:perl/foltia_conf1.plperl/foltia_conf1.pl.templateをコピーして設定ファイルを作ります。'/home/foltia';「perl」ディレクトリがあるパス。'4';搭載エンコーダの数。GV-MVP/RX2Wを一枚刺しの場合は2になります。0;UHF帯なら0、CATVなら1を指定します。それぞれivtvのntsc-bcast-jpとntsc-cable-jpに対応します。1;1なら削除ファイルは「mita」ディレクトリに移動、0なら即時削除します。mitaディレクトリはゴミ箱のように機能しますが自動的に削除はしません。らくちんな運用をしたければ0、安全のため保存しておきたければ1でよいでしょう。numperを指示します。それぞれ、チューナ入力、S映像入力、コンポジット入力を指定します。GV-MVP/RX,RX2,RX2Wカードで利用できる設定となっています。--device=/dev/video0などで可能です。1;Tira-2<http://www.home-electro.com/tira2.php>をつないでいるときに1,なければ0を指定します。;古いPSPを利用している場合のみ1を指定します。2;MPEG4変換の品質を指定します。デフォルトはH.264/AVCの中画質となっています。3の高画質はファイルサイズは小さく画質もよいのですが処理時間がかかりすぎているのでデフォルトには指定していません。手もとのCeleron2.6GHzのパソコンで、3の設定で実尺の3.4倍、2の設定で1.1倍、1の設定で0.77倍位の処理時間で完了しています。300kbpsそのほか、データベース設定もありますが環境に応じて設定して下さい。・設定2:php/foltia_config2.phpphp/foltia_config2.php.templateをコピーして設定ファイルを作ります。;「php」ディレクトリがあるパス。この場合/home/foltia/php/と設置されている状態になります。'/home/foltia/php/tv';録画ファイルの保存先のパス。'/tv';ブラウザから見える録画ファイルのある位置。この場合http://localhost/tv/を表します。・設定3:foltia_stationテーブル録画の重要な設定となる項目です。インストールが無事に終了してれば首都圏の放送局設定サンプルが入っていますのでそれを参考に設定して下さい。foltia_stationテーブルのそれぞれの項目について説明します。stationid:ユニークなID値です。stationname:しょぼいカレンダーと共通の放送局名です。stationrecch:周波数チャンネルです。外部入力の場合はS映像入力の場合に0、コンポジット入力の場合に-1を指定します。stationcallsignue:放送局略称を記入します。stationuri:放送局公式URIを記入します。tunertype:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。tunerch:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。device:放送局によって録画デバイスを固定するときに用います。BS-2専用チューナを常に/dev/video2につないでいるような場合「/dev/video2」と指定します。ontvcode:XMLTVで用いる放送局識別コードを記入します。foltia_epgにデータがインポートされていて3.foltia_stationテーブルのontvcodeフィールドにfoltia_epgテーブルのontvchannelフィールドと同じ放送局識別名が記入されている局になります。デフォルトで関東キー局とBS、BSデジタル局、CS局が設定されています。・Tira2準備(オプション)USBトランスミッタであるTira2を動作させるために必要な準備を行います。perl/irda/にインストールされたcapture.plを利用して、チューナリモコンからボタンを学習させていきます。foltiaではひとつのキー表現するファイル名に「一文字.dat」というルールを使用しています。手もとのデジタルチューナをコントロールするのに必要だったキーは0-9の数字と地上デジタル切り替え、BSデジタル切り替え、CATV切り替え、放送局番号入力キーの14キーでした。それぞれのキーに対応するリモコンデータファイル名を0.dat-9.dat,u.dat,b.dat,c.dat,X.datとしました。これらをcapture.plと同じ階層に置きます。完了したらチューナコントロールが行えるか動作確認をします。0.datと実行することでリモコンで0キーを押した状態を再現します。全てのキーがうまく動作したら、データベースのfoltia_stationテーブルのtunertypeフィールドとtunerchフィールドにチャンネルコマンドを記入します。BS-hiに切り替える場合、BSデジタル切り替え、チャンネル番号入力、1,0,3と5つのキーを押します。これを再現するにはb.dat,X.dat,1.dat,0.dat,3.datの5つのファイルを送出することになります。これをデータベースに書くと「bX103」となります。tunertypeフィールドとtunerchフィールドは連結されて実行されますので「b」「X103」と書いても「bX103」「」と書いても等価なものとして扱われます。わかりやすい記入方法で書き込んでください。・動作確認ここまで設定できたらあと一息で完了します。単純な録画ができるか動作確認していきましょう。/dev/video0などでキャプチャでバイスからMPEG2データか取れるか確認します。なにか出てくればOKですので次に進みます。つぎに、録画試験を~/perl/tvrecording.plを使って行います。/dev/video0としてみましょう。この例は1chを60秒5Mbpsでtest.m2pというファイル名で/dev/video0から録画することを意味しています。2分程度でプロンプトに戻ります。録画ファイル保存フォルダ(デフォルトだと/home/foltia/tv/)にtest.m2pが出来ていて、ファイルを再生して期待通りならば第1段階成功です。うまくいかなかった場合には~/debug.txtに書かれる情報も参考にして原因を突き止めて下さい。つぎに、しょぼいカレンダーから番組データをインポートできるかを確認します。$./perl/getxml2db.pl成功するとデータベースのfoltia_programテーブルとfoltia_subtitleテーブルにデータが入ります。ここまでできたらWebブラウザでインストールしたphpのディレクトリを開いてみましょう。番組表が表示されているのが確認できます。実際に予約をして見ましょう。左のTIDの数字をクリックするとそのタイトルの予約画面になります。〜虹色のスケッチ〜をクリックした画面です。放送局とビットレートを選択して予約を押すと予約キューが入ります。放送局の設定で[全局]を選択すると文字通り放送スケジュールが入ってる局を全局録画しようとします。いまのところ受信可能不可能に関係なく録画します。想定してる用途は『千葉テレビとテレビ埼玉とtvkでリリカルなのはA'sを録画しておこう!』というものではなくしょぼいカレンダーが持つ*声優関連*や*アニメ特番*などの放送局が特定できない番組グループを録画するためのものです。予約が完了したらシェルでatqコマンドでキューが入ったを確認します。foltia放映予定の5分前に起動するプロセスが入ってることが確認できます。この例だと00:40にfolprep.plが起動します。folprep.plが起動すると放映予定1分前にrecwrap.plがキューに入ります。foltia番組が終了したらMPEG2が録画されたか確認してみましょう。デフォルトで~/php/tv/690-16-20060131-0045.m2pというファイルが出来ているはずです。ファイル名はそれぞれ以下のルールで命名されます。TID:しょぼいカレンダーと共通の番組IDです。話数:番組が第何話かを示します。該当しない場合は空白になります。放映日:YYYYmmddスタイルの放映日です。放映時刻:0000-2359の間での開始時刻になります。しょぼいカレンダーでは24:00以降の時刻を扱いますがfoltiaでは暦通り24:00以降の時刻は次の日として取り扱います。MPEG2の録画が完了するとfoltiaはffmpegを利用してH.264/AVCへの変換を開始します。所要時間はCeleron2.6GHz環境で実尺の1.2倍程度の時間です。この例の場合~/php/tv/690.localized/mp4/MAQ-690-16-20060131-0045.MP4という動画ファイルと同じ階層にMAQ-690-16-20060131-0045.THMファイルができ上がります。ファイル名は、先頭がM4Vの場合MPEG4(XviD)、MAQの場合H.264/AVC、そのあとに続くのはMPEG2と同じルールです。番組指定による自動録画が動いたら、つぎにEPGによる個別番組録画の動作確認に移りましょう。番組データをXMLTVを用いてインポートします。/home/foltia/perl/xmltv2foltia.pl確認のためにブラウザで番組表ページを開きます。テレビ東京のワールドビジネスサテライトを予約してみます。EPG予約はTIDが0番の番組として扱われます。ファイル名や録画フォルダもそれに準拠します。放送が終わったらMPEG2とMPEG4を確認してみましょう。ここまで動作確認ができればfoltiaの基本的な部分は動作しています。残念ながらうまく動かない場合には~/debug.txtをみながら原因を分析してみて下さい。最後の仕上げにcronの設定をしておきましょう。私は以下の様な設定にしています。2>&1schedulecheck.plは番組データを更新してキューを再構築するプログラムです。起動頻度はもっと低くても問題ないかもしれません。XMLTVを呼び出してEPG番組表データを取得するなどの処理を行います。ivtvのバージョンによっては再起動すると/dev/video*のパーミッションがrootでしか読めなくなってしまう場合があります。その場合にはユーザfoltiaでデバイスが読み出せるよう適切なパーミッションを設定し直して下さい。・操作概要foltiaの操作はWeb画面で行います。以下に各メニューの説明をします。foltia:公式ページ<http://www.dcc-jpl.com/soft/foltia/>にジャンプします。放映予定:しょぼいカレンダーより取得した放送予定の全リストを表示します。通常のトップページです。録画予約されているものが色違いで強調表示されます。赤色表示:その放映が録画対象であることを示します青色表示:録画対象になっている番組の他局放映ことを示します。[TID]をクリックすると番組予約画面へ、[タイトル]をクリックすると「しょぼいカレンダー」の該当番組詳細画面へ、「サブタイトル」をクリックすると「しょぼいカレンダー」の放映予定画面へそれぞれ移動します。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/新番組:放映予定の中から第1話のものを抽出します。新番組シーズンに予約を入れるとき便利です。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/index.php?mode=new予約一覧:大きく上下のふたつのエリアに分かれていて、予約されている番組の放映予定と番組名を一覧表示します。ここでも[TID]をクリックすると番組予約画面へ、[タイトル]をクリックすると「しょぼいカレンダー」の該当番組詳細画面へそれぞれ移動します。録画予約の解除は下半分のタイトルリストの項目から行います。「画質」項目は録画ビットレートをMbps単位で表示しています。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/listreserve.php番組一覧:foltiaの内部データベースに登録されている全番組リストを表示します。MPEG4リンク項目は[録画ライブラリ]メニューと同じ詳細ページにジャンプします。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/titlelist.php番組表:EPG録画向け個別番組表を表示します。デフォルトで現在放映中の番組が最上段に表示されて、8時間分、8局表示します。タイトルをクリックすると放映時刻と放映局を選択しての録画予約ページとなります自動録画に対応していない番組を録画するときに役に立つでしょう。ここで予約したものはTIDが0番の放送予定としてデータベースに追加されます。同じ時刻に始まる番組が局間で位置がそろってないのは作りがいいかげんだからで、よい解決方法思いついたら改良されるかもしれません。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/viewepg.php録画一覧(録画順):録画済みのMPEG2ファイルを放映順に一覧表示します。削除チェックボックスにチェックを入れて削除ボタンを押すとそのファイルは削除されます。上の方にディスク空き容量とトラコンプロセスを表示している部分がありますがこの部分は相当いい加減な書きかたなため環境にあわせて適当に修正して下さい。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/showplaylist.php録画一覧(番組順):録画済みのMPEG2ファイルを番組ID[TID]順に一覧表示します。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/showplaylist.php?list=title録画一覧(全):データベースを使わず、録画ディレクトリの中にあるファイルを一覧表示するモードです。メンテナンス用途として使います。録画ライブラリ:MPEG4録画ファイルを番組ごとに一覧表示します。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/showlib.php詳細をクリックすると番組ごとの一覧になります。詳細表示の画面では、ブラウザでMPEG4を再生する事も可能です。番組単体のPodcast用RSSもこの画面内にあります。MP4ファイル名をクリックするとブラウザ内で再生を開始します。その右のアイコンは、QuickTimePlayerでムービーを再生します。デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/showlibc.php?tid=665「キャプ」でキャプチャ画面一覧を開きます。Podcast用のRSSです。このRSSをiTunesに登録することで、iPodとの自動シンク機能を実現します。トップメニューにあるRSSは新規録画が全部含まれるPodcastを実現します。番組単体のPodcastは録画ライブラリの詳細から取得して下さい。[iTunesにFolcastを登録]をクリックするとiTunesに自動的に追加することができます。・おわりに以上、駆け足でfoltiaの概要を説明してきました。VideoでMPEG4を視聴しています。Playerソフトでファイルを選んで再生するのがいまひとつめんどくさい操作なので、今後の改良点としたいところです。foltiaはまだまだ開発途上のソフトウェアです。今後の夢を含めた拡張はこのようなものを考えています。Japanの公式ページ<http://www.dcc-jpl.com/soft/foltia/>に掲載していきます。以下の数々のサイトを利用、参考にさせていただいております。改めましてお礼申し上げます。本ドキュメントはオープンソースマガジン200年6月号(ソフトバンククリエイティブ刊)向け原稿として書き起こした稿をもとに加筆したものです。公開を快く許諾して下さいましたソフトバンククリエイティブ様にお礼申し上げます。本ソフトウェアは完全な無保証です。ライセンスとしてGPL2を適用したいと考えていますが適用出来るかどうかの判断がまだ終わっていない段階です。