|
| 1 | +tsreadex - MPEG-TSのストリーム選択と安定化のためのツール |
| 2 | + |
| 3 | +使用法: |
| 4 | + |
| 5 | +tsreadex [-z ignored][-s seek][-l limit][-t timeout][-m mode][-x pids][-n prog_num_or_index][-a aud1][-b aud2][-c cap][-u sup][-d flags] src |
| 6 | + |
| 7 | +-z ignored |
| 8 | + 必ず無視されるパラメータ(プロセス識別用など)。 |
| 9 | + |
| 10 | +-s seek (bytes), default=0 |
| 11 | + ファイルの初期シーク量。0未満のときはファイル末尾から-(seek+1)だけ前方にシークする。 |
| 12 | + 入力がパイプ系のときは0でなければならない。 |
| 13 | + |
| 14 | +-l limit (kbytes/second), 0<range<=32768, default=0 |
| 15 | + 入力の最大読み込み速度。0のとき無制限。 |
| 16 | + "-n"オプションでサービスID指定する場合などで、もしそのサービスが見つからない場合には出力するものがないためストレージの |
| 17 | + 最大負荷で読み込みが行われてしまうことになるが、このオプションで制限できる。 |
| 18 | + |
| 19 | +-t timeout (seconds), 0<=range<=600, default=0 |
| 20 | + この秒数以上のあいだ出力が全くないときタイムアウトとして終了する。 |
| 21 | + |
| 22 | +-m mode, range=0 or 1 or 2, default=0 |
| 23 | + タイムアウトの方式。 |
| 24 | + 0: 通常読み込み。 |
| 25 | + timeoutが0のときは入力終了(ファイル終端など)までタイムアウトせず、入力終了後すぐに終了する。 |
| 26 | + timeoutが0でないときは、ファイル終端に達した後ファイルに追記がないか待ってから終了する。 |
| 27 | + 入力がパイプ系のときはtimeout=0でなければならない。 |
| 28 | + 1: 容量確保ファイルの読み込み。 |
| 29 | + mode=0のときと基本的に同じだが、ファイル終端または内容が正しいMPEG-TSでなくなった部分を終端とする。 |
| 30 | + 入力はパイプ系であってはならない。 |
| 31 | + 2: 非ブロッキングパイプ読み込み。 |
| 32 | + 入力終了後すぐに終了する。入力が滞った場合にも(タイムアウトにより)終了する。 |
| 33 | + 入力はパイプ系でなければならない。timeoutは0であってはならない。 |
| 34 | + |
| 35 | +-x pids, default="" |
| 36 | + 取りのぞくTSパケットのPIDを'/'区切りで指定。 |
| 37 | + |
| 38 | +-n prog_num_or_index, -256<=range<=65535, default=0 |
| 39 | + 特定サービスのみを選択して出力するフィルタを有効にする。 |
| 40 | + サービスID(1以上)かPAT(Program Association Table)上の並び順(先頭を-1として-1,-2,..)を指定する。 |
| 41 | + PIDが0x0030未満か以下の特定ストリームのみ出力されるようになり、PIDは以下のように固定される。 |
| 42 | + - 映像: PID=0x0100 |
| 43 | + - 第1音声(AACのみ): PID=0x0110 |
| 44 | + - 第2音声(AACのみ): PID=0x0111 |
| 45 | + - ARIB字幕: PID=0x0130 |
| 46 | + - ARIB文字スーパー: PID=0x0138 |
| 47 | + - PMT(Program Map Table): PID=0x01f0 |
| 48 | + - PCR(Program Clock Reference): PID=0x01ff (ただし上記ストリームに重畳されている場合はそのPID) |
| 49 | + このフィルタが有効でないとき"-a"、"-b"、"-c"、"-u"オプションは無視される。 |
| 50 | + |
| 51 | +-a aud1, range=0 or 1, default=0 |
| 52 | + 第1音声をそのままか、補完するか。 |
| 53 | + 1のとき、ストリームが存在しなければPMTの項目を補って無音のAACストリームを挿入する。 |
| 54 | + |
| 55 | +-b aud2, range=0 or 1 or 2, default=0 |
| 56 | + 第2音声をそのままか、補完するか、削除するか。 |
| 57 | + 1のとき、ストリームが存在しなければPMTの項目を補って無音のAACストリームを挿入する。 |
| 58 | + |
| 59 | +-c cap, range=0 or 1 or 2, default=0 |
| 60 | + ARIB字幕をそのままか、補完するか、削除するか。 |
| 61 | + 1のとき、ストリームが存在しなければPMTの項目を補う。 |
| 62 | + |
| 63 | +-u sup, range=0 or 1 or 2, default=0 |
| 64 | + ARIB文字スーパーをそのままか、補完するか、削除するか。 |
| 65 | + 1のとき、ストリームが存在しなければPMTの項目を補う。 |
| 66 | + |
| 67 | +-d flags, range=0 or 1 or 3, default=0 |
| 68 | + ARIB字幕/文字スーパーを https://github.com/monyone/aribb24.js が解釈できるID3 timed-metadataに変換する。 |
| 69 | + 変換元のストリームは削除される。 |
| 70 | + 3のとき、不明な"private data"ストリームをARIB文字スーパーとして扱う。ffmpegを経由した入力など記述子が正しく転送されて |
| 71 | + いない入力に対処するもので、普通は1でよい。 |
| 72 | + |
| 73 | +src |
| 74 | + 入力ファイル名、または"-"で標準入力 |
| 75 | + |
| 76 | +説明: |
| 77 | + |
| 78 | +このツールは大まかに3段のフィルター構造になっている。入力された188か192か204バイトのMPEG-TSパケットを同期語(0x47)で同期 |
| 79 | +し、最初に"-x"オプションで指定されたパケットを取りのぞく(1段)。つぎに、"-n"オプションが0でないときは特定サービスを選択し |
| 80 | +てストリームの補完などを行う(2段)。最後に"-d"オプションによる変換を行い(3段)、188バイトのTSパケットとして標準出力する。 |
| 81 | +たとえば、ARIB仕様のTSパケットからEIT(番組表データ)を取り除き、PATの先頭サービスのみ出力し、第2音声と字幕がつねに存在す |
| 82 | +るようにして文字スーパーを削除し、ARIB字幕をID3 timed-metadataに変換するときは以下のようになる。 |
| 83 | +> tsreadex -x 18/38/39 -n -1 -b 1 -c 1 -u 2 -d 1 src.m2t > dest.m2t |
| 84 | + |
| 85 | +その他: |
| 86 | + |
| 87 | +ライセンスはMITとする。 |
| 88 | + |
| 89 | +"-n"オプションはおもにffmpegが動的な副音声追加などを扱えないのをなんとかするためのもの。こんな機能は不要になるのが理想。 |
| 90 | + |
| 91 | +"-d"オプションの実装にあたり https://github.com/monyone/node-arib-subtitle-timedmetadater を参考にした。 |
0 commit comments