# アニメ録画システム　foltia

宗子 (sorshi@dcc-jpl.com) / DCC-JPL Japan / foltia Project.
http://www.dcc-jpl.com/soft/foltia/
文書最終更新日:$LastChangedDate$
文書リビジョン:$Rev$
このドキュメントの最新版はこちらです:http://svn.dcc-jpl.com/foltia/trunk/doc/index.html

## ・目次

- foltiaとは何か？
- 主要機能
- 必要ハードウェア
- foltiaのしくみ
- インストール
- 操作概要
- 環境ポリシー
- おわりに

## ・foltiaとは何か？

foltiaは主にアニメを効率良く失敗なく録画するために開発された、Linux上で動く録画システムです。
番組名と放映局を指定しておけばあとはなにもせずに毎回録画されます。しょぼいカレンダーというアニメ番組表サイトと強く連係することで、野球中継で時間がずれても毎回期待通り録画されます。
外部オプションを取り付けることで外付けチューナのコントロールも実現します。適切な録画装置を組み合わせることでハイビジョン録画も実現します。
録画した番組は自動的にH.264/AVCに変換され、iPodに自動転送することが可能です。PSPに転送して視聴することも可能です。
全ての主要操作はWebベースでコントロールされます。

## ・主要機能

- 番組名によるアニメ自動録画機能
  - 最大6番組までの同時録画対応(アナログ)
  - ハイビジョンデジタル録画(同時録画数:デバイス認識するだけ)
- EPG番組表による番組選択録画機能
- 開始時刻、放送局など個別設定による手動録画機能
- iPhoneではシンクされてない番組でも専用画面でストリーミング視聴可能
- USBリモコンユニットを使った外部チューナー制御機能
- 録画終了と同時にMPEG2からH.264/AVCへの自動変換機能(iPod 、PSP、Webブラウザなどで視聴可能形式)
- video podcastの仕組を使ったiPod自動シンク機能
  - 録画番組は自動的にiPodに転送されて視聴可能状態となる
- 付属モジュール「Starlight Breaker」向け番組キャプチャ画像自動生成機能
  - Starlight BreakerはWordPressやMovable TypeなどにXMLRPCを使ってかんたんにアニメブログを投稿する機能
- 環境ポリシーによるマルチユーザ対応
  - アカウントにより各段階のアクセス権を設定可能

## ・必要ハードウェア

- Linuxの動くAT互換機:筆者の環境ではPentium4(2.8GHz)/2GB RAMの環境で30分番組のハイビジョンTSをデフォルト設定でH.264にトランスコードするのに約90分程度で完了しています。
- FriioやPT1などのデジタルハイビジョン録画デバイス:現在対応しているのはFriio,Friio BS/CS,PT1です。HDUSもLinuxで動いているようですが未テストです。
- (アナログ録画をする場合)ivtvドライバで動作するビデオキャプチャカード:foltiaの機能を引きだすためには複数のエンコーダを搭載するのがおすすめです。手もとの環境ではIOデータ GV-MVP/RXを2枚、GV-MVP/RX2Wを1枚で計4チャンネル同時録画環境にしています。画質の点からは複数エンコーダが一枚のカードに載ったRX2Wよりも1エンコーダのGV-MVP/RX2の方が多少有利なようです。
- Home Electronics社製USB 赤外線トランスミッタ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]が走るようにキューを入れます。放送時刻が15分以上先に延びていたら、再度放送予定時刻の5分前に準備プログラム[folprep.pl]をキュー入れします。
放送予定時刻の1分前になると録画の一連の流れを管理する録画プログラム[recwrap.pl]が起動します。このプログラムは、録画チャンネルが外部入力であれば外部チューナのチャンネルを適切なものに切り替えるためにリモコン送信プログラム[transfer.pl]を呼びだし、次に実際にビデオでバイスからファイルへの記録を行う録画プログラム[digitaltvrecording.pl]か[tvrecording.pl]を呼び出します。録画でバイスはPT1→friioの順で接続されていれば自動的に空きデバイスを探して録画します。デジタル録画出来るデバイスが不足した場合は利用可能なアナログ録画デバイスがあればそちらで録画を実行するように努力します。
[digitaltvrecording.pl]は実際の録画プログラムを呼び出します。BS1/BS2はwineを利用してTsSplitter.exeを起動して適切な分割処理をします。
アナログ録画の場合はキャプチャプログラム[tvrecording.pl]はivtvドライバに付属のrecord-v4l2.plをベースに拡張したもので、搭載されている録画デバイスの空き状況を調べて、空いてる適切なデバイスを利用します。foltiaは特に指定をしない場合、同時録画する場合、地上波録画をキャプチャデバイスの若い番号から順番に、外部入力を一番大きいデバイスから順番に使用していきます。例としてキャプチャカードが4枚入っている場合、地上波録画は/dev/video0から、外部入力録画は/dev/video3から使われていきます。空きデバイスがない場合は、一番若い番号を持つビデオデバイスをつかんでるプロセスを止め、そのデバイスを利用します。録画は前後に10秒程度の余分な録画を行おうとするため、同一のチャネルで連続している番組を指定した場合であっても可能であれば2チューナ使用する形となります。tvrecording.plの録画チャンネルの引数に0を指定した場合はS入力が、-1を指定した場合はコンポジット入力が録画されます。外部入力はデフォルトで一番番号の大きいデバイスを利用します。
録画が終了するとデータベースの放送情報テーブル[foltia_subtitle]に録画したMPEG2ファイル名を記録して親プロセスに戻ります
録画プログラムが終了すると、Starlight Breaker用キャプチャ画像をmplayerを利用して作成し、親プロセスの[recwrap.pl]はMPEG4への変換(トラコン)の必要があるか確認して、必要な場合変換スクリプト[ipodtranscode.pl]が呼び出して自分は終了します。変換フォーマットや品質は設定ファイルであらかじめ設定しておきます。MPEG4ファイルは、MPEG2ファイル保存ディレクトリの下に番組ごとに整理されます。具体的には[TID].localized/mp4/の形を取ります。番組個別ディレクトリはMac OS Xのローカライズ機構に準拠しているため、例えば665.localizedディレクトリはMac OS XのFinderでマウントすると「魔法少女リリカルなのはA's」と表示されます。
[ipodtranscode.pl]は起動されると録画が古い順に順番にトラコンを実行し、サムネールを作成して、すべての録画ファイルを変換すると終了します。サムネールはPSPの仕様に準拠して120x160で拡張子が.THMのjpegファイルです。そしてデータベースの放送情報テーブル[foltia_subtitle]に変換ファイル名を書き込んで録画の一連の流れが終了します。
図に示すとこうなります。(ごめん、ちょっと古いまま)

定期的な作業として、毎時間ごとに番組データ更新と録画キューの更新を行います。cronが一時間ごとに定時確認プログラム[schedulecheck.pl]を呼びだし、それが番組表の更新プログラム[getxml2db.pl]を呼びだしデータベースを更新したあと、予約されてる番組の数だけキュー入れプログラム[addatq.pl]を読み出します。

iPodへの自動シンク機能はiTunesの持つVideo Podcast機能を使うことで実現します。foltia Video Podcast-Folcastは、トラコンが終わった番組からXMLを組み立ててRSSを作ります。このRSSをiTunesに登録することでiPodへの自動シンク機能を実現します。

foltiaはデータベースに次のようなテーブルを作ります。

- foltia_program:「魔法少女リリカルなのはA's」のように番組名の情報を格納するテーブルです。番組ごとにトラコンのオン/オフを切り替えることも出来ます。
- foltia_subtitle:「第1話　はじまりは突然になの」のような個別番組の放映情報を持つテーブルです。
- foltia_station:放送局の情報を持つテーブルです。受信環境によって設定が必要になります。
- foltia_tvrecord:録画予約の情報を持つテーブルです。
- foltia_epg:XMLTV由来のEPG番組表のデータを持つテーブルです。
- foltia_m2pfiles:録画されたMPEG2ファイルの情報をキャッシュ的に持つテーブルです。
- foltia_mp4files:変換されたMPEG4ファイルの情報をキャッシュ的に持つテーブルです。
- foltia_envpolicy:環境ポリシー利用時にユーザの情報を持つテーブルです。

## ・インストール

foltiaの動作にはLinux,Apache,PHP,Perl,PostgreSQLと録画プログラム、mplayer,ffmpeg,faac,iui,などが必要です。
インストールはおおまかにOS,Apache,ivtvドライバ、PostgreSQL、foltiaの順で進めて行くとよいでしょう。
phpPgAdminやSambaなども必要に応じて入れておくと便利かもしれません。
foltiaのダウンロードは公式ページのtarボールまたはSubversionで入手することが可能です。
Subversionを使う場合は下記のコマンドで最新versionを入手できます。

$svn co http://svn.dcc-jpl.com/foltia/trunk foltia

またインストールについては「foltiaインストールマニュアル」も参考になります。(内容はやや古くなっています)

### ・配線

あらかじめキャプチャカード、録画装置を取り付け、アンテナ線をつなぎ、外部チューナを外部入力端子につないでおきます。

### ・OSインストール

筆者の環境ではFedora Coreを使っています。一通りインストールを終えたらfoltiaを動作させるアカウント「foltia」を作ります。

### ・Apacheインストール

Apacheは2.2以降が2GBを越えるファイルの転送にも対応していて便利です。
ポイントは、Apacheを動かすユーザをfoltiaにすることと、「.THM」のmime typeをimage/jpegにする設定を追加することです。

### ・ivtvドライバインストール

最近のLinuxのディストリビューションだと標準で使えるようになっていることが多いようです。

### ・PostgreSQLインストール

ポイントは文字コードをEUC-JPでデータベースをつくることです。foltiaという名前でデータベースを作ったら、foltiaパッケージ付属のmktable.txtでテーブルを作成します。

### ・各種アプリインストール

以下のアプリケーションを利用します。インストールされてなければyumやaptなどからインストールして下さい。
mplayer:サムネール作成、トラコンに利用
ImageMagick:サムネール作成に利用
wine:TS分割ツールTsSplitter起動に利用
MP4Box:各トラックをまとめてMP4ピルドに利用

### ・各種Perlモジュールのインストール

以下のPerlモジュールを利用します。インストールされてなければCPANなどからインストールして下さい。
Time::HiRes
Schedule::At
DBD::Pg
Jcode
Device::SerialPort(Tira2を使う場合のオプション)

### ・XMLTVインストール

EPG番組表取得に必要なXMLTV日本語版をインストールします。ぱ研が制作したものがすでに本家にマージされているようです。

### ・ffmpegインストール

最近のffmpegはiPod用H.264作成オプション(-f ipod)をもっていますが、ディストリビューション付属のffmpegがうまく動かなかったら作り直してインストールします。
1.ffmpegのソースを入手する

$svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

2.メイクする
手もとでは下記オプションでビルドしています。

$./configure --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-libfaac --enable-libfaad --enable-pthreads --enable-gpl

### ・foltia本体

installディリクトリの中にある「perl」と「php」をそれぞれ適当なところに配置します。
手もとの環境では/home/foltia/perl/と/home/foltia/php/に配置しています。

### ・各種ツールインストール

以下のプログラムを利用します。
recfriio:Friioを使ったデジタルハイビジョン録画に利用 http://2sen.dip.jp/cgi-bin/friioup/source/up0777.zip
recpt1:PT1を使ったデジタルハイビジョン録画に利用。オリジナルのrecpt1からのb25拡張版を想定。 入手は【視聴・録画】Linuxでテレビ総合【ﾃﾞｼﾞﾀﾙ/ｱﾅﾛｸﾞ】 http://pc11.2ch.net/test/read.cgi/linux/1231189481/252nによる

> hg clone http://hg.honeyplanet.jp/pt1

が便利。 TsSplitter:MPEG-2 TS streamを分割するwindows用プログラム http://2sen.dip.jp/cgi-bin/friioup/source/up0827.zip
tss.py:TSを分割するPythonスクリプト、正確にはHD以外のストリームを捨てるスクリプト
Nero AAC コーデック:オーディオトラックのAACエンコードに使う。FAACと比べて品質がとても良い。
上記のneroAacEnc, recfriio, TsSplitter.exe,tss.pyは~/perl/tool/あたりに入れて下さい。
iui:iPhone用UIライブラリ
iuiは~/php/iui/として入れて下さい。

### ・外部チューナコントロール(オプション)

Home Electronics社製USB 赤外線トランスミッタTira-2.1を利用することにより、外部チューナのコントロールを行うことが可能です。
「Tira-2.1 シリアルプロトコル(の意訳)」より、サンプルプログラムのcapture.plとtransfer.plをダウンロードしてfoltiaのperlディレクトリの下のirdaディレクトリに実行権限を付けてインストールして下さい。Tira2を接続して/dev/ttyUSB0が使える状態になったら、パーミッションを666に変更しておきます。

### ・各種設定

設定はperl設定php設定と録画局設定に大きく分かれています。
録画局設定は[foltia_station]テーブルで行います。

#### ・設定1:perl/foltia_conf1.pl

perl/foltia_conf1.pl.templateをコピーして設定ファイルを作ります。
$toolpath = '/home/foltia';
「perl」ディレクトリがあるパス。
$recunits = '4';
アナログ録画の設定です。搭載エンコーダの数を指定します。GV-MVP/RX2Wを一枚刺しの場合は2になります。デジタルハイビジョン録画のみの場合は0になります。
$recfolderpath = '/home/foltia/php/tv';
録画ファイルを置くPATH
$uhfbandtype = 0;
アナログ録画の設定です。UHF帯なら0、CATVなら1を指定します。それぞれivtvのntsc-bcast-jpとntsc-cable-jpに対応します。
$rapidfiledelete = 1;
1なら削除ファイルは「mita」ディレクトリに移動、0なら即時削除します。mitaディレクトリはゴミ箱のように機能しますが自動的に削除はしません。らくちんな運用をしたければ0、安全のため保存しておきたければ1でよいでしょう。

$tunerinputnum = 0;
$svideoinputnum = 1;
$comvideoinputnum = 2;
上記3行にキャプチャカードごとに固有な映像入力のパラメータを示すivtvのinput numperを指示します。それぞれ、チューナ入力、S映像入力、コンポジット入力を指定します。デフォルトはIO DATA製 GV-MVP/RX,RX2,RX2Wカードで利用できる設定となっています。
$haveirdaunit = 1;
Tira-2<http://www.home-electro.com/tira2.php>をつないでいるときに1,なければ0を指定します。
$mp4filenamestyle = 1 ;
古いPSPを利用している場合のみ1を指定します。通常1です。
0:PSP ファームウェアver.2.80より前と互換性を持つファイル名
1;よりわかりやすいファイル名
$trconqty = 2;
MPEG4変換の品質を指定します。デフォルトはH.264/AVCの中画質となっています。
デフォルトでバランスのよい2が選択されています。
アナログソースとデジタルソースで設定が若干異なります。
アナログソースでは 手もとのCeleron2.6GHzのパソコンで、3の設定で実尺の3.4倍、2の設定で1.1倍、1の設定で0.77倍位の処理時間で完了しています。
0:PSP/iPod XviD MPEG4(旧式):faacとMPEG4IPを使って変換(古い設定)
1:iPod Xvid MPEG4 標準画質 15fps 300kbps / デジタル 360x202 24.00fps 300kbps
2:iPod H.264 中画質 24fps 300kbps / デジタル 360x202 24.00fps 300kbps
3:iPod H.264 高画質 30fps 300kbps/ デジタル 480x272 29.97fps 400kbps
4:iPhone/iPod 480x320 H.264 高画質 24fps 350kbps / デジタル 640x352 29.97fps 600kbps
$phptoolpath = $toolpath ;
foltiaのphpディレクトリのパスを指定します。デフォルトではperlと同じ階層になります。
そのほか、データベース設定もありますが環境に応じて設定して下さい。

#### ・設定2:php/foltia_config2.php

php/foltia_config2.php.templateをコピーして設定ファイルを作ります。

$toolpath = "/home/foltia" ;
「php」ディレクトリがあるパス。この場合/home/foltia/php/と設置されている状態になります。
$recfolderpath = '/home/foltia/php/tv';
録画ファイルの保存先のパス。
$httpmediamappath = '/tv';
ブラウザから見える録画ファイルのある位置。この場合http://localhost/tv/を表します。
$recunits = '4';
foltia_conf1.plと同じ搭載エンコーダの数。GV-MVP/RX2Wを一枚刺しの場合は2になります。

$useenvironmentpolicy = 0 ;
環境ポリシーを使うかどうか。環境ポリシー機能については後述します。最初は利用しない状態で動作確認をすることをおすすめいたします。

$environmentpolicytoken = "";
環境ポリシーのパスワードに連結されるセキュリティコード。環境ポリシー機能については後述します

$perltoolpath = $toolpath ;
foltiaのperlディレクトリのパスを指定します。デフォルトではphpと同じ階層になります。

#### ・設定3:foltia_stationテーブル

録画の重要な設定となる項目です。インストールが無事に終了してれば首都圏の放送局設定サンプルが入っていますのでそれを参考に設定して下さい。
foltia_stationテーブルのそれぞれの項目について説明します。しょぼいカレンダーの情報によって放送局は自動的に追加されていきます。
stationid:ユニークなID値です。
stationname:しょぼいカレンダーと共通の放送局名です。
stationrecch:周波数チャンネルです。外部入力の場合はS映像入力の場合に0、コンポジット入力の場合に-1を指定します。受信出来ない局には-10を指定します。新規に自動追加されると-10になります。
stationcallsignue:放送局略称を記入します。空白でも構いません。
stationuri:放送局公式URIを記入します。空白でも構いません。
tunertype:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。空白でも構いません。
tunerch:外部チューナコントロールコマンドを書き入れます。「Tira2準備」の項で詳しく述べます。空白でも構いません。
device:放送局によって録画デバイスを固定するときに用います。たとえば、BS-2専用チューナを常に/dev/video2につないでいるような場合「/dev/video2」と指定します。通常は空白です。
ontvcode:XMLTVで用いる放送局識別コードを記入します。EPG番組表に表示される局は
1. XMLTV初期設定で情報を取得していて
2. foltia_epgにデータがインポートされていて
3.foltia_stationテーブルのontvcodeフィールドにfoltia_epgテーブルのontvchannelフィールドと同じ放送局識別名が記入されている
局になります。デフォルトで関東キー局とBS、BSデジタル局、CS局が設定されています。
digitalch:地デジの物理チャンネルを入れます。BSデジタルは日本全国共通なので変更の必要はありません。
digitalstationband:地デジなら0、BSデジタルなら1、CSデジタルなら2を入れます。(現在未使用)

### ・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と同じ階層に置きます。
完了したらチューナコントロールが行えるか動作確認をします。
./transfer.pl 0.datと実行することでリモコンで0キーを押した状態を再現します。
全てのキーがうまく動作したら、データベースのfoltia_stationテーブルのtunertypeフィールドとtunerchフィールドにチャンネルコマンドを記入します。手もとのチューナではBSデジタル103chのNHK BS-hiに切り替える場合、BSデジタル切り替え、チャンネル番号入力、1,0,3と5つのキーを押します。これを再現するにはb.dat,X.dat,1.dat,0.dat,3.datの5つのファイルを送出することになります。これをデータベースに書くと「bX103」となります。tunertypeフィールドとtunerchフィールドは連結されて実行されますので「b」「X103」と書いても「bX103」「」と書いても等価なものとして扱われます。わかりやすい記入方法で書き込んでください。

### ・動作確認

ここまで設定できたらあと一息で完了します。まず単純な録画ができるか動作確認していきましょう。
【デジタルハイビジョン編】
~/perl/toolにインストールしたrecfriioが正しく動作するか確かめます。

recfriio --b25 27 60 /home/foltia/php/tv/test-mpeg2-ts.m2t

これで27チャンネルのvlcで視聴出来る状態のMPEG2-tsファイルが60秒ぶん、指定した位置にでき上がれば録画成功です。
エラーがでた場合はインストールを見直して下さい。
【アナログ編】
最初に

$head /dev/video0

などでキャプチャでバイスからMPEG2データか取れるか確認します。なにか出てくればOKですので次に進みます。
つぎに、録画試験を~/perl/tvrecording.plを使って行います。

$./tvrecording.pl 1 60 0 test.m2p 5 0 0 /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の数字をクリックするとそのタイトルの予約画面になります。例は画面外の1546版のマリア様がみてる 4thシーズンをクリックした画面です。
放送局を選択して予約を押すと予約キューが入ります。デジタル録画優先オプションとアナログビットレートは必要に応じて変更して下さい。放送局の設定で[全局]を選択すると文字通り放送スケジュールが入ってる局を全局録画しようとします。想定してる用途は『千葉テレビとテレビ埼玉とtvkでリリカルなのはA'sを録画しておこう!』というものではなくしょぼいカレンダーが持つ*声優関連*や*アニメ特番*などの放送局が特定できない番組グループを録画するためのものです。
予約が完了したらシェルでatqコマンドでキューが入ったを確認します。

$atq
182194 2009-01-08 01:10 a foltia

放映予定の5分前に起動するプロセスが入ってることが確認できます。
この例だと01:10にfolprep.plが起動します。
folprep.plが起動すると放映予定1分前にrecwrap.plがキューに入ります。

$atq
182195 2009-01-08 01:14 a foltia

番組が終了したらMPEG2が録画されたか確認してみましょう。デフォルトで~/php/tv/1546-1-20090108-0115.m2tというファイルが出来ているはずです。ファイル名はそれぞれ以下のルールで命名されます。
TID:しょぼいカレンダーと共通の番組IDです。
話数:番組が第何話かを示します。該当しない場合は空白になります。
放映日:YYYYmmddスタイルの放映日です。
放映時刻:0000-2359の間での開始時刻になります。しょぼいカレンダーでは24:00以降の時刻を扱いますがfoltiaでは暦通り24:00以降の時刻は次の日として取り扱います。
拡張子:デジタルハイビジョンの場合.m2t、アナログ録画の場合m2pになります。
MPEG2の録画が完了するとfoltiaはffmpegを利用してH.264/AVCへの変換を開始します。この例の場合~/php/tv/1546.localized/mp4/MAQ-1546-1-20090108-0115.MP4という動画ファイルと同じ階層にMAQ-690-16-20060131-0045.THMファイルができ上がります。ファイル名は、先頭がM4Vの場合MPEG4(XviD)、MAQの場合H.264/AVC、そのあとに続くのはMPEG2と同じルールです。

番組指定による自動録画が動いたら、つぎにEPGによる個別番組録画の動作確認に移りましょう。
まず番組データをXMLTVを用いてインポートします。

$/usr/bin/perl /usr/bin/tv_grab_jp | /home/foltia/perl/xmltv2foltia.pl

確認のためにブラウザで番組表ページを開きます。

テレビ東京のワールドビジネスサテライトを予約してみます。
EPG予約はTIDが0番の番組として扱われます。ファイル名や録画フォルダもそれに準拠します。
放送が終わったらMPEG2とMPEG4を確認してみましょう。

ここまで動作確認ができればfoltiaの基本的な部分は動作しています。残念ながらうまく動かない場合には~/debug.txtをみながら原因を分析してみて下さい。

最後の仕上げにcronの設定をしておきましょう。私は以下の様な設定にしています。

7 * * * * /home/foltia/perl/schedulecheck.pl >/dev/null 2>&1
1 0 * * * /home/foltia/perl/cron_foltia_dayly.sh >/dev/null 2>&1

schedulecheck.plは番組データを更新してキューを再構築するプログラムです。起動頻度はもっと低くても問題ないかもしれません。
cron_foltia_dayly.sh はXMLTVを呼び出してEPG番組表データを取得するなどの処理を行います。

また、ivtvのバージョンによっては再起動すると/dev/video*のパーミッションがrootでしか読めなくなってしまう場合があります。その場合にはユーザfoltiaでデバイスが読み出せるよう適切なパーミッションを設定し直して下さい。

再起動してもビデオキャプチャデバイスが読めるようにパーミッションを付けます。

# vi /etc/security/console.perms.d/video.perms
<console> 0666 <sound> 0666 root.foltia
<console> 0666 <v4l> 0666 root.foltia
# pam_console_apply

(参考:TV録画予約システム構築(vrs) - Fedoraで自宅サーバー構築)

## ・操作概要

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]をクリックすると番組予約画面へ、[タイトル]をクリックすると「しょぼいカレンダー」の該当番組詳細画面へそれぞれ移動します。録画予約の解除は下半分のタイトルリストの項目から行います。EPG予約の解除もここから行います。「画質」項目は録画ビットレートをMbps単位で表示しています。(いまのところデジタル録画の重複表示には対応していません)
色が付いている番組は重複警告です。搭載された録画ユニットで録画し切れない場合に色がつきます。赤色はカードに搭載されたアナログチューナーの重複、青色は外部入力の重複を示します。重複警告がでている番組は録画が欠ける可能性があります。また、アナログチューナー、外部チューナーともに00:00-00:30 番組A ,00:30-01:00 番組Bという番組が連続している場合は重複とは判断しません。
引数rでエンコーダ数を変更して予約状況を調べる事が出来ます。listreserve.php?r=6で6台エンコーダを搭載したときの予約状況を調べる事が出来ます。
デモ画面: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

### 番組表:番組手動予約

個別の手動録画を行います。
・EPGでまだ降ってきていない番組
・ケータイで外から大急ぎで予約したい場合
などの用途を想定しています。テンキーから迅速に予約出来るようにあえてプルダウンメニューでなく数字入力式としています。foltiaの仕組み的に番組の尺の最大値は特に制限はないのですが取り回しを考えて最大6時間に区切ってあります。録画したい番組が360分を超える場合には適当に分割して予約してください。

デモ画面:http://www.dcc-jpl.com/soft/foltia/demo/m.php

### 録画一覧(録画順):

録画済みのMPEG2ファイルを放映順に一覧表示します。削除チェックボックスにチェックを入れて削除ボタンを押すとそのファイルは削除されます。上部にディスク空き容量とトラコンプロセスを表示します。
ディスクの空き容量が少なくなると背景色が100GB,50GB,30GBでそれぞれ変化し注意を喚起します。
デモ画面: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
「キャプ」でキャプチャ画面一覧を開きます。
この一連の画面をiPhoneで開くとこのようになります。

### Folcast(RSS):

Video Podcast用のRSSです。このRSSをiTunesに登録することで、iPodとの自動シンク機能を実現します。トップメニューにあるRSSは新規録画が全部含まれるPodcastを実現します。番組単体のPodcastは録画ライブラリの詳細から取得して下さい。[iTunesにFolcastを登録]をクリックするとiTunesに自動的に追加することができます。
参考リンク:さくらぷらすα日記 2006-03-14 フォルキャスト(folcast) の解説

## ・環境ポリシー

foltiaではチェンジセット70にて環境ポリシーと呼ばれる機能が追加されました。以下では環境ポリシー機能について説明いたします。

### 概要

環境ポリシーは家庭内など利用者が複数いる環境でより便利に使えるよう導入されました。 具体的には次のような機能を持ちます。
・ユーザの概念の導入
・ユーザごとの権限の概念の導入
・ユーザごとの個別設定の保持(未実装)

### 設定

foltia_config2.phpで次の設定を変更します。

$useenvironmentpolicy = 0 ;
環境ポリシーを使うかどうか。0が未使用(デフォルト)、1が使用です。

$environmentpolicytoken = "";
環境ポリシーのパスワードに連結されるセキュリティコード。セキュリティコードとは各ユーザがログインするために自分のアカウントのパスワード以外に知らなければいけないフレーズです。デフォルトは空白です。空白でも差し支えありません。

$perltoolpath = $toolpath ;
foltiaのperlディレクトリのパスを指定します。デフォルトではphpと同じ階層になります。

つぎに.htpasswdファイルを作成します。デフォルトではperlディレクトリと同じ階層に設置されます。もし既に.htpasswdがあるならば必要に応じてバックアップを取っておいて下さい。ファイルの作成はperl/envpolicyupdate.plを実行することで自動的に作成されます。

環境ポリシーが有効になると、アクセス時にブラウザによって認証画面が出るようになります。ID:foltia PW:foltiapasswd)が初期管理者パスワードです。 ページが表示されるとメニューの右端にアカウントが出るようになります。

### 操作

ログイン時に認証されなかった場合下記の画面になります。
ここで「こちらから。」につながってるリンクをたどるとaccountregist.phpに移動して次のような画面となります。
ここでアカウントを追加すると即時に有効になります。
設定でセキュリティコードを空白のデフォルトにしておいた場合、ここで登録されたパスワードでログイン出来ます。セキュリティコードを設定した場合パスワードとセキュリティコードをつないだ文字列でログイン可能となります。具体的にはこんな感じです。
・アカウントのパスワード[fate]、セキュリティコード、空白の場合、ログインパスワード:[fate]
・アカウントのパスワード[fate]、セキュリティコード、[nanoha]の場合、ログインパスワード:[fatenanoha]
特権管理者はセキュリティコードのいかんにかかわらず常にアカウントのパスワードでログイン出来ます。

管理者はEPG録画の予約者確認と、予約削除が可能です。

今後ユーザごとにFolcastを編集出来る機能などを開発予定です。

## ・おわりに

以上、駆け足でfoltiaの概要を説明してきました。今のところfoltiaには視聴に関する機能は一切ありませんが、パソコンにfoltia録画ボリュームをSambaでマウントし、VLCでMPEG2を再生、外ではiPhoneでfolcastかストリーミングで視聴しています。DVD Playerソフトでファイルを選んで再生するのがいまひとつめんどくさい操作なので、今後の改良点としたいところです。
foltiaはまだまだ開発途上のソフトウェアです。今後の計画は以下の様なものを考えています。
・未読番組管理機能
・ロケーションフリーテレビのようなライブストリーミング機能
詳しくはfoltia Development Central wiki:「foltia のToDoやらゆめを適当に書くwiki」に書かれる予定です。
今後も全ての情報はDCC-JPL Japanの公式ページ<http://www.dcc-jpl.com/soft/foltia/>に掲載していきます。

・謝辞
以下の数々のサイトを利用、参考にさせていただいております。改めましてお礼申し上げます。
しょぼいカレンダー<http://cal.syoboi.jp/>
AAF ぱ研<http://www.paken.org/>
Tira-2.1 シリアルプロトコル(の意訳)<http://www.geocities.jp/coffee_style/Tira-2-0.html>
「月琴日記」<http://www.kokone.to/~kgt/diary.html>
Linuxで最強のテレビ録画サーバを目指す<http://www.tadachi-net.com/desktop_pc/asus_terminator/avserver3.html>
Fedoraで自宅サーバー構築 <http://fedorasrv.com/>
ONTV JAPAN<http://www.ontvjapan.com/>
IRC #dameTunesのみなさま
他多数

本ドキュメントはオープンソースマガジン2006年6月号(ソフトバンククリエイティブ刊)向け原稿として書き起こした稿をもとに加筆したものです。公開を快く許諾して下さいましたソフトバンククリエイティブ様にお礼申し上げます。

本ソフトウェアは完全な無保証です。ライセンスとしてGPL2を適用したいと考えていますが適用出来るかどうかの判断がまだ終わっていない段階です。