recdvb 1.2.0では(恐らくrecpt1でも)--sidオプションでhdを指定すると1番目のサービスのみを残す、いわゆるサービス指定録画が出来るようになるが、EPG情報は残らないのでepgdumpやTsRename、eit_txtout等を使うことが出来ない。しかし、--sidオプションにepgを加えて指定するとEPG情報を残すことが出来るらしい。
実際に試してみると、チャンネル名を記したSDT(0x11)、現在日時を記したTOTEPG情報であるEIT(0x12)、テレビやレコーダーの最新ソフトウェア伝送スケジュールを記したSDTT(0x23)、放送局のロゴ画像を記したCDT(0x29)が追加で残されるの確認した。しかし、EpgDataCap_Bon.exe等では残される肝心要なEPG情報であるEIT現在日時を記したTOT(0x14)が残されていない。のでeit_txtoutが使えない。
不思議に思ってrecdvb 1.2.0のソースに含まれるtssplitter_lite.cを見てみるとEITTOT(0x14)が残す対象に入っていない(滝汗)。
529 else if(!strcasecmp(*p, "epg")) { 530 /* epg抽出に必要なPIDのみを保存する */ 531 sid_found = TRUE; 532 *(pids+0x11) = 1; 533 *(pids+0x12) = 1; 534 *(pids+0x23) = 1; // SDTT 535 *(pids+0x29) = 1; // CDT 536 }
てな訳で、534行目に「*(pids+0x14) = 1;」を挿入してコンパイルしたところ、recdvb --b25 --sid hd,epg --strip 13 15 uhf13.ts等で無事EPG情報TOTを残すことが出来た。しかし、何でこんな実装になってるんだろう…。
2015/11/28追記:EITとTOTを間違って見ていたので大幅に訂正(汗)そういえば、TsSplitter.exeで番組情報を残すためのEITオプションはPLAYLIST用にNIT〜TOTを残しているらしい。あと、ts2pts.exeではTOT(0x14)だけでなくNIT(0x10)やSDT(0x11)、さらにはBIT(0x24)まで必要とするらしいので、それらも加えておくことにした。