Archive for 2011年12月

tss.py 異常終了の原因

2011/12/16

tss.pyは、MPEG-2 TSのデータから、先頭のプログラムを抽出するもの。典型的には、地デジを録画したデータから、HDストリームを抽出するために使われていると思われます。Windows方面では、TsSplitter.exeが担当する分野。

さて、そんなスクリプトですが、どういうわけか手元の環境では異常終了してしまうケースが多く、その割にはWebではまったくといっていいほど話題になっていないことを不思議に思っていたりしたのです。

Traceback (most recent call last):
  File "tss.py", line 101, in <module>
    N += 4 + ((ord(x[N+3])&0x0F)<<4) + ord(x[N+4]) + 1
IndexError: string index out of range

仮にtss.pyが異常終了したとしても、他の手段で対応できなくはないので、例によって放置していたのですが、ちょっとその気になったので原因究明してみることにしました。

過程をずらずら書いてもしょうがないので結論だけにしてしまいますが、PMTのサイズが1パケットを超えるデータのときにこのエラーが発生しています。

手元のデータをいくつか確認してみると、MBS毎日放送を録画したものがこの状態になっているのですが、これがこの局特有で、東京の局では発生しない現象だとすれば、騒ぎになっていないというのも、まあ理解できなくはないところ。

というわけでパッチ貼っておきますが、仕様書を確認せずに実データを観察した結果なので誤っている可能性があります。その上pythonは初めてなのでどこかおかしいかもしれません。一応手元ではちゃんと動いているように見えます。作者さんに連絡とろうかとも思ったけど、もう興味なくしてるみたいでちょっとお悩み中。 » Read more: tss.py 異常終了の原因

“FAAD 改造版 0.7”を改造する

2011/12/07

途中でチャンネル数が切り替わるAACファイルが存在するのですが、こういうファイルを他のファイル形式に変換しようとしてFFmpegあたりを使うと、正常に変換することができません。チャンネル数変更に対応していないためですが、このあたりをカバーしてくれるものに、FAAD 改造版 0.7 TS読み込み対応というものがあります。

オリジナルのFAADはGPLv2なので、当然これもソースが提供されているのですが、残念なことにWindowsでしかコンパイルできなくて、FreeBSDで処理したい私にとっては使えないものでした。

今回、ちょっと必要になり、FreeBSDでもコンパイルできるように改造しましたので、せっかくなのでここに出しておきます。

FreeBSD 8.2R、9.0RC2、Windows7(VS2008)で確認しています。

ダウンロード→“FAAD 改造版 0.7”の改造版

http://2sen.dip.jp/cgi-bin/friioup/source/up1195.zip