更新しました。対応要望のメールがあったので、TOKYO MX で行われている SD マルチ編制から HD 単一へ切り替わって始まる番組を録画した場合の問題(いわゆる「わかさトラップ」)対策を追加しています。ダウンロードは [URI] からどうぞ。
今回の対策は TS の映像 PID 決定処理と、同一の映像 ES 内で解像度が切り替わる場合の対策強化の 2 点です。
まず、TS の映像 PID 決定処理についての説明です。これまではファイル先頭から探索して一番最初に見つけた PAT/PMT 内の MPEG-2 映像ストリーム PID を選択していました。
今回の更新ではファイル全体を 1/8 刻みで 8 回同様の映像 PID 選択処理を行い、4 回以上出現していた PID をそのファイルの映像 PID として決定するようにしました。
いわゆる「わかさトラップ」のような SD から HD に切り替わる番組を録画したデータの場合、これまでの処理では先頭にマージンとして録画された SD 映像 (CM 部分) の PID をファイルの映像ストリーム PID に選択してしまい、本編の HD 部分が読めなくなっていましたが、今回の更新でファイル内での存在量の多い本編の HD 映像部分の PID を選択するようになりました。
この場合、マージン部分で録画されている SD データは無視されます。局側 の HD 切り替えタイミングのズレにより、番組先頭の数フレームが欠けることがあるかもしれませんが、MX というのはそういう局なのだと思って諦めて他の UHF 局も受信できるようにしましょう。その方が仕合せになれます。
次に、同一の映像 ES 内で解像度が切り替わる場合ですが……こちらは……なぜ TS 段階では別ストリームになっているものをわざわざくっつけて単一ストリームにするかなぁと文句を言いたい気分になるのですけれど、一部の Splitter/Demuxer では SD 映像と HD 映像を連結したビデオ ES を出力してくれるそうです。そうやって作成されたものに対する対策となります。
こちらも TS の場合と同様に、ファイル全体を 1/8 刻みで 8 回調べて、最大だった解像度をその映像ストリームの解像度として AviUtl 等のクライアントアプリケーションに返すようにしました。
旧バージョンまではストリーム先頭の SD 部分の解像度を映像解像度としてアプリケーションに渡して、HD 映像の左上 720x480 部分だけが取得できるような形になっていましたが、今回の更新から、HD 本編がオリジナルの解像度で取得できるようになったはずです。
副作用として先頭の SD 部分が見苦しい形で取得されるようになってしまいましたが……これを HD 解像度に拡大して取得できるようにしたところでうれしい人は少ないだろうと考え、放置しています。
ただ、取得される絵があんまりにもあんまりな映像になってしまっているので、そのうち気が向いたら対応するかもしれません。