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

SRT を JSON に変換

形式変換SubRip(SRT)
字幕テキストを貼り付けることもできます

この変換で変わること

この方向では何も失われません。元の形式のすべての機能に、変換先での行き先があります。

この一覧は、読み込んだファイルではなく、この2つの形式の機能対応表から作られています。形式としては許されているが対応表が扱っていない機能を使っている場合、そのファイルではさらに多くが失われることがあります。

このページは字幕ファイルを構造化データに変えます。各字幕の開始・終了時刻とテキストを持つ JSON 文書です。スキーマはこのサイト独自のもので、意図的に小さく作ってあります。バージョン番号と cues 配列だけがあり、時刻はタイムコードではなく整数のミリ秒です。特定のライブラリに依存せず、推測に頼る部分もありません。

ミリ秒を使うのは、そのまま使えて解析が要らないからです。このサイトが扱う字幕形式の最小単位は 1 ミリ秒で、整数ならカンマやドットの慣習で読み違えることがありません。書式のない行は文字列のまま、斜体・太字・色を持つ行はテキストとタグの配列を持つオブジェクトになります。

結果はスクリプトに読み込ませたり、差分を取ったり、バージョン管理に入れたりできるファイルで、変換し戻せば字幕に戻ります。作業はブラウザ内で行われます。

例

典型的な SRT ファイルを JSON に変換した例

入力

1
00:00:01,000 --> 00:00:03,500
Hello there.

2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.

3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.

出力

{
  "version": 1,
  "cues": [
    {
      "id": "1",
      "start": 1000,
      "end": 3500,
      "lines": [
        "Hello there."
      ]
    },
    {
      "id": "2",
      "start": 3500,
      "end": 6000,
      "lines": [
        {
          "text": "Whispering now.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 10
            }
          ]
        },
        "And a second line."
      ]
    },
    {
      "id": "3",
      "start": 6000,
      "end": 9250,
      "lines": [
        {
          "text": "Bold statement.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            }
          ]
        }
      ]
    }
  ]
}

ここでは何も失われません。左右を 1 行ずつ比べてください。

崩れた SRT 入力を JSON に変換した例

入力

1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.


2
00:00:03,500 --> 00:00:06,000


3
00:00:08,000 --> 00:00:09,000
Last one.

出力

{
  "version": 1,
  "cues": [
    {
      "id": "1",
      "start": 1000,
      "end": 3500,
      "lines": [
        {
          "text": "Bold and italic.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            },
            {
              "kind": "italic",
              "start": 9,
              "end": 15
            }
          ]
        }
      ]
    },
    {
      "id": "2",
      "start": 3500,
      "end": 6000,
      "lines": []
    },
    {
      "id": "3",
      "start": 8000,
      "end": 9000,
      "lines": [
        "Last one."
      ]
    }
  ]
}

実ファイルの傷み方の例です。改行の混在、余分な空白、空のフィールドが含まれます。上の整った例と比べると、パーサーがどこまで許容するかが分かります。

よくある質問

SRT を JSON に変換したときのスキーマは何ですか?

このサイト独自のスキーマで、上のパネルに例として示されています。バージョン番号のあとに字幕の配列があり、各要素は id、ミリ秒の start と end、行の配列を持ちます。隠れたメタデータも第三者形式への依存もありません。

SRT の時刻が JSON でタイムコードでなくミリ秒なのはなぜですか?

解析せずに使えるようにするためです。時刻の加算、比較、並べ替えが整数の演算で済み、00:00:01,000 のような文字列はまずデコードが必要で、間違ってデコードされる余地もあります。

SRT の斜体や太字は JSON でどう表現されますか?

書式のない行は文字列のままです。書式を持つ行はテキストとタグ配列を持つオブジェクトになり、各タグは種類とテキスト内の開始・終了位置を持ちます。JSON から戻せば書式も書き戻されます。

SRT から JSON にしたファイルは手で編集しても安全ですか?

安全です。戻せることが確認になります。読み取れれば、与えた時刻で字幕が再現されるので、往復させると誤字を見つける近道になります。

SRT を JSON にしたものをスクリプトから読めますか?

そのための形式です。cues 配列を読み、start と end を数値として取り、lines を結合します。各行は文字列か、text フィールドに言葉を持つオブジェクトです。

関連ツール