JSON 字幕フォーマット
この形式が表現できること
- テキストのスタイル
- フォント、色、縁取り、影
- 画面内の位置指定
- 対応
- カラオケのタイミング
- 対応
- 字幕ブロック内の改行
- 対応
- タイムライン
- 各字幕の開始と終了の時刻
- タイミングの精度
- 1 ms
- フレーム番号で保存されるタイミング
- 非対応
- 右から左に書く言語
- 対応
例
典型的な JSON ファイルと、そこから読み取れる内容
ファイル
{
"version": 1,
"title": "Fixture: typical",
"fps": 25,
"styles": {
"Default": {
"name": "Default",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#FFFFFF",
"bold": false,
"italic": false
}
},
"generator": "subtitlematrix fixtures",
"cues": [
{
"id": "1",
"start": 0,
"end": 2000,
"lines": [
"Hello world.",
"Second line."
],
"style": "Default",
"position": {
"x": 100,
"y": 200,
"align": "center"
}
},
{
"id": "2",
"start": 2500,
"end": 4000,
"lines": [
"Plain line.",
{
"text": "Styled line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
]
},
{
"id": "3",
"start": 4500,
"end": 6000,
"lines": [
"Roger: I am here."
],
"speaker": "Roger"
}
]
}
ファイルの中身
3 cues, 5 lines of text
0 ms → 2000 ms
Hello world.
Second line.
[Default; position 100,200 (center)]
2500 ms → 4000 ms
Plain line.
Styled line. [italic ×1]
4500 ms → 6000 ms
Roger: I am here.
[speaker Roger]
Outside the cues:
styles Default
other keys version, title, fps, generator — carried through untouched右側は変換後のファイルではありません。左側のファイルから本サイトが読み取った内容で、どの変換もここから始まります。
扱いにくい JSON ファイルでも読み取れる内容
ファイル
{
"cues": [
{ "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
{ "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
{ "start": 9000, "end": 8000, "lines": ["End before start."] },
{ "start": "nope", "end": 12000, "lines": ["No readable start."] },
{ "start": 13000, "lines": ["No end at all."] }
],
"generator": "subtitlematrix boundary",
"styles": {},
"title": "Fixture: boundary"
}
ファイルの中身
3 cues, 4 lines of text
1500 ms → 3000 ms
Unpadded timecode.
4001 ms → 5000 ms
Fractional start.
Second.
9000 ms → 9001 ms
End before start.
Outside the cues:
other keys generator, title — carried through untouched
Reported while reading — repaired or skipped, never silently:
2 × entries with no readable start and end time (they are not cues, so they were skipped)
1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
1 × cues whose end time was not after their start time (they were given a 1ms duration)実際のファイルには BOM、Windows の改行コード、タイムコード前の余分な行、まったく読めないタイムコードがあります。どれも例外にはならず、理解できない部分は黙って捨てずに報告されます。
SubtitleMatrix JSON を他の形式に変換
いずれもブラウザ内で完結します。ラベルには、その方向で何が失われるかが開く前に示されています。
- タイミング
- スタイル
- 位置
- カラオケ
- 精度
この形式への変換
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
JSON 字幕形式は本サイトが扱う形式の 1 つです。このページはそのリファレンスで、何を保存でき、何を保存できず、どの形式へ変換できるかをまとめています。時刻は整数ミリ秒で持ち、スタイル表とカラオケのタイミングも保存できます。
上の表がすべてで、隠れた機能一覧はありません。「いいえ」の行は、JSON へ変換するときに失われるものそのものです。下に並ぶ各変換ページは、ファイルを開く前にそのことを示します。
変換はすべてブラウザ内で実行されます。ファイルはアップロードされず、登録も不要です。NDA の下にある素材、患者記録、放送前の素材では、この点が重要になります。
よくある質問
JSON 字幕ファイルとは何ですか?
ここでの .json は本サイト独自の字幕形式です。version フィールド、任意のスタイル表、整数ミリ秒の時刻を持つ cue 配列からなります。他の形式が表現できる情報を意図的に無損失で保持し、プレーヤーよりスクリプトやパイプライン向けです。
JSON はスタイルを保存できますか?
はい、他の形式より多く保存できます。フォント、サイズ、色、縁取り、余白のスタイル表に加え、行ごとの tags 配列で本文内の書式を持ちます。カラオケのタイミングも保存します。スタイル表はスタイル名をキーにした styles オブジェクトで、本文内の書式は文字列中のコードではなく各行の tags に入るため、入出力でエスケープが不要です。
JSON の各 cue は開始と終了の両方を持ちますか?
はい。時刻は 4126 のような整数ミリ秒で書け、ミリ秒まで正確です。短い cue、長い cue、次の cue と重なる cue もそのまま表現できます。
JSON はどの形式に変換すればよいですか?
本サイトのどの形式も JSON のすべては受け取れないため、無料の方向はありません。各変換ページが独自の損失一覧を示します。用途に合う損失を基準に選んでください。
JSON ファイルはテキストエディタで開けますか?
はい。カンマと引用符の対応さえ保てば編集できます。時刻は整数ミリ秒なので、1.25 秒の cue は "start": 1250 です。