放送波の MPEG2-TS に重畳されている EIT (Event Information Table: 番組情報) の生データを時系列でいい感じに表示するツールです。
@chinachu/node-aribts から取得した EIT の情報を、文字列や時刻を human-readable な形にフォーマットした上で、TOT (Time Offset Table: 時刻情報) と一緒に出力します。
Usage: EITViewer [options]
Options:
--input <path> 入力の TS ファイルのパス
--output-log <path> 出力するログファイルのパス (省略時は stdout に出力)
--eit-types <eit_types> 絞り込む EIT のタイプ (コンマ区切り、present/following/schedule から選択)
--service-ids <service_ids> 絞り込むサービス ID のリスト (コンマ区切り)
--event-ids <event_ids> 絞り込むイベント ID のリスト (コンマ区切り)
-h, --help display help for command
--eit-types
/ --service-ids
/ --event-ids
の3つのオプションを指定して、表示する EIT を絞り込めます。
以下は、EIT: EIT[present] & EIT[following]
/ service_id: 1032 (NHKEテレ1東京)
/ event_id: 24177,24185,24188,65522
の条件に一致する EIT を表示する場合のコマンド例です。
$ ./EITViewer --input /path/to/record.ts --output-log /path/to/log.txt --eit-types present,following --service-ids 1032 --event-ids 24177,24185,24188,65522
Tips: TOT は基本5秒おきに送出されているため、EIT が送出された時刻は、(その EIT の直前の TOT の JST_Time に記載されている時刻) ~ (その EIT の直前の TOT の JST_Time に記載されている時刻 + 5 秒) の間になります。
たとえば、目当ての EIT の直前の TOT が2022-08-07T20:06:35+09:00
なら、目当ての EIT は2022-08-07T20:06:35+09:00
~2022-08-07T20:06:40+09:00
の間に送出されたことになります。
================================================================================
EIT (Event Information Table) [present] [service_id: 1032]
================================================================================
{ table_id: 78,
section_syntax_indicator: 1,
section_length: 152,
service_id: 1032,
version_number: 9,
current_next_indicator: 1,
section_number: 0,
last_section_number: 1,
transport_stream_id: 32737,
original_network_id: 32737,
segment_last_section_number: 1,
last_table_id: 78,
events:
[ { event_id: 24188,
start_time: '2022-08-07T20:05:00+09:00',
duration: Infinity,
running_status: 0,
free_CA_mode: 0,
descriptors_loop_length: 125,
descriptors:
[ { descriptor_tag: 77,
descriptor_length: 45,
ISO_639_language_code: 'jpn',
event_name_length: 21,
event_name_char: 'NHK手話ニュース🈐',
text_length: 19,
text_char: '【キャスター】赤堀仁美' },
{ descriptor_tag: 78,
descriptor_length: 33,
descriptor_number: 0,
last_descriptor_number: 0,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 27,
items:
[ { item_description_length: 6,
item_description_char: '出演者',
item_length: 19,
item_char: '【キャスター】赤堀仁美' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 80,
descriptor_length: 6,
stream_content: 1,
component_type: 179,
component_tag: 0,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 84,
descriptor_length: 4,
contents:
[ { content_nibble_level_1: 0,
content_nibble_level_2: 0,
user_nibble_1: 15,
user_nibble_2: 15 },
{ content_nibble_level_1: 11,
content_nibble_level_2: 4,
user_nibble_1: 15,
user_nibble_2: 15 } ] },
{ descriptor_tag: 193,
descriptor_length: 1,
digital_recording_control_data: 2,
maximum_bitrate_flag: 0,
component_control_flag: 0,
user_defined: 4 },
{ descriptor_tag: 196,
descriptor_length: 9,
stream_content: 2,
component_type: 1,
component_tag: 16,
stream_type: 15,
simulcast_group_tag: 255,
ES_multi_lingual_flag: 0,
main_component_flag: 1,
quality_indicator: 2,
sampling_rate: 7,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 214,
descriptor_length: 13,
group_type: 1,
event_count: 3,
events:
[ { service_id: 1032, event_id: 24188 },
{ service_id: 1033, event_id: 24188 },
{ service_id: 1034, event_id: 24188 } ],
private_data_byte: Buffer [Uint8Array] [] } ] } ],
CRC_32: Buffer [Uint8Array] [ 104, 49, 205, 147 ] }
================================================================================
EIT (Event Information Table) [following] [service_id: 1032]
================================================================================
{ table_id: 78,
section_syntax_indicator: 1,
section_length: 474,
service_id: 1032,
version_number: 9,
current_next_indicator: 1,
section_number: 1,
last_section_number: 1,
transport_stream_id: 32737,
original_network_id: 32737,
segment_last_section_number: 1,
last_table_id: 78,
events:
[ { event_id: 24185,
start_time: '2022-08-07T20:10:00+09:00',
duration: Infinity,
running_status: 0,
free_CA_mode: 0,
descriptors_loop_length: 447,
descriptors:
[ { descriptor_tag: 77,
descriptor_length: 176,
ISO_639_language_code: 'jpn',
event_name_length: 44,
event_name_char: 'アニメ ラブライブ!スーパースター!! 2期(4)🈑',
text_length: 127,
text_char:
'表参道と原宿と青山、3つの街のはざまにある私立結ヶ丘女子高等学校。新入生も加わって、スクールアイドルの大会「ラブライブ!」優勝を目指す青春ドラマが動きはじめる。' },
{ descriptor_tag: 78,
descriptor_length: 105,
descriptor_number: 0,
last_descriptor_number: 1,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 99,
items:
[ { item_description_length: 8,
item_description_char: '番組内容',
item_length: 89,
item_char: '【声】伊達さゆり,Liyuu,岬なこ,ペイトン尚未,青山なぎさ,鈴原希実,籔島朱音,大熊和奏,絵森彩' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 78,
descriptor_length: 103,
descriptor_number: 1,
last_descriptor_number: 1,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 97,
items:
[ { item_description_length: 6,
item_description_char: '出演者',
item_length: 89,
item_char: '【声】伊達さゆり,Liyuu,岬なこ,ペイトン尚未,青山なぎさ,鈴原希実,籔島朱音,大熊和奏,絵森彩' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 80,
descriptor_length: 6,
stream_content: 1,
component_type: 179,
component_tag: 0,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 84,
descriptor_length: 2,
contents:
[ { content_nibble_level_1: 7,
content_nibble_level_2: 0,
user_nibble_1: 15,
user_nibble_2: 15 } ] },
{ descriptor_tag: 193,
descriptor_length: 1,
digital_recording_control_data: 2,
maximum_bitrate_flag: 0,
component_control_flag: 0,
user_defined: 4 },
{ descriptor_tag: 196,
descriptor_length: 9,
stream_content: 2,
component_type: 3,
component_tag: 16,
stream_type: 15,
simulcast_group_tag: 255,
ES_multi_lingual_flag: 0,
main_component_flag: 1,
quality_indicator: 2,
sampling_rate: 7,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 199,
descriptor_length: 14,
data_component_id: 8,
entry_component: 48,
selector_length: 5,
selector_byte: Buffer [Uint8Array] [ 1, 19, 106, 112, 110 ],
num_of_component_ref: 0,
component_ref: Buffer [Uint8Array] [],
ISO_639_language_code: 'jpn',
text_length: 0,
text_char: '' },
{ descriptor_tag: 214,
descriptor_length: 13,
group_type: 1,
event_count: 3,
events:
[ { service_id: 1032, event_id: 24185 },
{ service_id: 1033, event_id: 24185 },
{ service_id: 1034, event_id: 24185 } ],
private_data_byte: Buffer [Uint8Array] [] } ] } ],
CRC_32: Buffer [Uint8Array] [ 61, 132, 71, 193 ] }
================================================================================
EIT (Event Information Table) [present] [service_id: 1032]
================================================================================
{ table_id: 78,
section_syntax_indicator: 1,
section_length: 152,
service_id: 1032,
version_number: 10,
current_next_indicator: 1,
section_number: 0,
last_section_number: 1,
transport_stream_id: 32737,
original_network_id: 32737,
segment_last_section_number: 1,
last_table_id: 78,
events:
[ { event_id: 24188,
start_time: '2022-08-07T20:05:00+09:00',
duration: 300,
running_status: 0,
free_CA_mode: 0,
descriptors_loop_length: 125,
descriptors:
[ { descriptor_tag: 77,
descriptor_length: 45,
ISO_639_language_code: 'jpn',
event_name_length: 21,
event_name_char: 'NHK手話ニュース🈐',
text_length: 19,
text_char: '【キャスター】赤堀仁美' },
{ descriptor_tag: 78,
descriptor_length: 33,
descriptor_number: 0,
last_descriptor_number: 0,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 27,
items:
[ { item_description_length: 6,
item_description_char: '出演者',
item_length: 19,
item_char: '【キャスター】赤堀仁美' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 80,
descriptor_length: 6,
stream_content: 1,
component_type: 179,
component_tag: 0,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 84,
descriptor_length: 4,
contents:
[ { content_nibble_level_1: 0,
content_nibble_level_2: 0,
user_nibble_1: 15,
user_nibble_2: 15 },
{ content_nibble_level_1: 11,
content_nibble_level_2: 4,
user_nibble_1: 15,
user_nibble_2: 15 } ] },
{ descriptor_tag: 193,
descriptor_length: 1,
digital_recording_control_data: 2,
maximum_bitrate_flag: 0,
component_control_flag: 0,
user_defined: 4 },
{ descriptor_tag: 196,
descriptor_length: 9,
stream_content: 2,
component_type: 1,
component_tag: 16,
stream_type: 15,
simulcast_group_tag: 255,
ES_multi_lingual_flag: 0,
main_component_flag: 1,
quality_indicator: 2,
sampling_rate: 7,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 214,
descriptor_length: 13,
group_type: 1,
event_count: 3,
events:
[ { service_id: 1032, event_id: 24188 },
{ service_id: 1033, event_id: 24188 },
{ service_id: 1034, event_id: 24188 } ],
private_data_byte: Buffer [Uint8Array] [] } ] } ],
CRC_32: Buffer [Uint8Array] [ 186, 105, 83, 124 ] }
================================================================================
EIT (Event Information Table) [following] [service_id: 1032]
================================================================================
{ table_id: 78,
section_syntax_indicator: 1,
section_length: 474,
service_id: 1032,
version_number: 10,
current_next_indicator: 1,
section_number: 1,
last_section_number: 1,
transport_stream_id: 32737,
original_network_id: 32737,
segment_last_section_number: 1,
last_table_id: 78,
events:
[ { event_id: 24185,
start_time: '2022-08-07T20:10:00+09:00',
duration: 1500,
running_status: 0,
free_CA_mode: 0,
descriptors_loop_length: 447,
descriptors:
[ { descriptor_tag: 77,
descriptor_length: 176,
ISO_639_language_code: 'jpn',
event_name_length: 44,
event_name_char: 'アニメ ラブライブ!スーパースター!! 2期(4)🈑',
text_length: 127,
text_char:
'表参道と原宿と青山、3つの街のはざまにある私立結ヶ丘女子高等学校。新入生も加わって、スクールアイドルの大会「ラブライブ!」優勝を目指す青春ドラマが動きはじめる。' },
{ descriptor_tag: 78,
descriptor_length: 105,
descriptor_number: 0,
last_descriptor_number: 1,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 99,
items:
[ { item_description_length: 8,
item_description_char: '番組内容',
item_length: 89,
item_char: '【声】伊達さゆり,Liyuu,岬なこ,ペイトン尚未,青山なぎさ,鈴原希実,籔島朱音,大熊和奏,絵森彩' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 78,
descriptor_length: 103,
descriptor_number: 1,
last_descriptor_number: 1,
ISO_639_language_code: '\u0000\u0000\u0000',
length_of_items: 97,
items:
[ { item_description_length: 6,
item_description_char: '出演者',
item_length: 89,
item_char: '【声】伊達さゆり,Liyuu,岬なこ,ペイトン尚未,青山なぎさ,鈴原希実,籔島朱音,大熊和奏,絵森彩' } ],
text_length: 0,
text_char: '' },
{ descriptor_tag: 80,
descriptor_length: 6,
stream_content: 1,
component_type: 179,
component_tag: 0,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 84,
descriptor_length: 2,
contents:
[ { content_nibble_level_1: 7,
content_nibble_level_2: 0,
user_nibble_1: 15,
user_nibble_2: 15 } ] },
{ descriptor_tag: 193,
descriptor_length: 1,
digital_recording_control_data: 2,
maximum_bitrate_flag: 0,
component_control_flag: 0,
user_defined: 4 },
{ descriptor_tag: 196,
descriptor_length: 9,
stream_content: 2,
component_type: 3,
component_tag: 16,
stream_type: 15,
simulcast_group_tag: 255,
ES_multi_lingual_flag: 0,
main_component_flag: 1,
quality_indicator: 2,
sampling_rate: 7,
ISO_639_language_code: 'jpn',
text_char: '' },
{ descriptor_tag: 199,
descriptor_length: 14,
data_component_id: 8,
entry_component: 48,
selector_length: 5,
selector_byte: Buffer [Uint8Array] [ 1, 19, 106, 112, 110 ],
num_of_component_ref: 0,
component_ref: Buffer [Uint8Array] [],
ISO_639_language_code: 'jpn',
text_length: 0,
text_char: '' },
{ descriptor_tag: 214,
descriptor_length: 13,
group_type: 1,
event_count: 3,
events:
[ { service_id: 1032, event_id: 24185 },
{ service_id: 1033, event_id: 24185 },
{ service_id: 1034, event_id: 24185 } ],
private_data_byte: Buffer [Uint8Array] [] } ] } ],
CRC_32: Buffer [Uint8Array] [ 172, 3, 88, 46 ] }
================================================================================
TOT (Time Offset Table)
================================================================================
{ table_id: 115,
section_syntax_indicator: 0,
section_length: 11,
JST_time: '2022-08-07T20:06:40+09:00',
descriptors_loop_length: 0,
descriptors: [],
CRC_32: Buffer [Uint8Array] [ 234, 209, 79, 223 ] }
================================================================================