Skip to content

Commit 5cfb789

Browse files
committed
first commit
0 parents  commit 5cfb789

14 files changed

+2068
-0
lines changed

.gitignore

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
*
2+
!*/
3+
!*.c
4+
!*.cpp
5+
!*.h
6+
!*.hpp
7+
!*.sln
8+
!*.txt
9+
!*.vcxproj
10+
!*.vcxproj.filters
11+
!.gitignore
12+
!Makefile

License.txt

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
The MIT License
2+
3+
Copyright (c) 2021 xtne6f
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

Makefile

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CXXFLAGS := -std=c++11 -Wall -Wextra -pedantic-errors -O2 $(CXXFLAGS)
2+
LDFLAGS := -Wl,-s $(LDFLAGS)
3+
ifdef MINGW_PREFIX
4+
LDFLAGS := -municode -static $(LDFLAGS)
5+
TARGET ?= tsreadex.exe
6+
else
7+
LDFLAGS := $(LDFLAGS)
8+
TARGET ?= tsreadex
9+
endif
10+
11+
all: $(TARGET)
12+
$(TARGET): tsreadex.cpp util.cpp util.hpp id3conv.cpp id3conv.hpp servfilt.hpp servfilt.cpp
13+
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH) -o $@ tsreadex.cpp util.cpp id3conv.cpp servfilt.cpp
14+
clean:
15+
$(RM) $(TARGET)

Readme.txt

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
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

Comments
 (0)