メインコンテンツへスキップ
SubtitleMatrix

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 を他の形式に変換

いずれもブラウザ内で完結します。ラベルには、その方向で何が失われるかが開く前に示されています。

この形式への変換

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 です。