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

JSON を SRT に変換

字幕テキストを貼り付けることもできます

この変換で変わること

3 項目が失われるか、判断が必要です

  • スタイル

    すべてのスタイル(太字、斜体、色、縁取り、影)

  • 位置

    画面内の位置指定(すべての字幕が既定の位置に戻ります)

  • カラオケ

    カラオケのタイミング(音節ごとの強調)

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

このページは字幕を記述した JSON 文書を読み、SRT ファイルを書き出します。受け付ける形は、本サイトが書き出すスキーマ(version 番号と cues 配列)と、cue の配列だけを並べた単純な形です。どちらでも、各 cue から必要なのは開始・終了・本文で、時刻は整数ミリ秒のまま SRT のタイムコードになります。解像度が同じなので途中で丸めは起きません。

SRT が保持できないものは黙って捨てず、失われるものとして報告します。title、フレームレート、スタイル表は、番号付き cue だけの字幕ファイルに置き場所がありません。cue が斜体・太字・色を使っている場合は対応するタグで書き出し、タグで表現できないものは上の一覧に載ります。

壊れたファイルでも変換は止まりません。パーサーは読めるところを読み、終了が開始より後になっていない cue を修復します。読み込んで直せる字幕ファイルのほうが、エラーメッセージより役に立つからです。JSON ファイル一式もブラウザ内で 1 回にまとめて変換され、ZIP で返ります。

例

JSON ファイルを SRT に変換した例

入力

{
  "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"
    }
  ]
}

出力

1
00:00:00,000 --> 00:00:02,000
Hello world.
Second line.

2
00:00:02,500 --> 00:00:04,000
Plain line.
<i>Styled</i> line.

3
00:00:04,500 --> 00:00:06,000
Roger: I am here.

この出力で失われるもの:スタイル(フォント・色・縁取り)、画面位置、カラオケのタイミング。それ以外は行単位で一致します。

同じ変換を扱いにくい入力で行った例

入力

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

出力

1
00:00:00,000 --> 00:00:01,000
First.

2
00:00:01,000 --> 00:00:02,000
Second.

3
00:00:02,000 --> 00:00:03,000
Third.

実際のファイルには、混在した改行コード、余分な空白、空のフィールドなどがあります。上の整った例と比べて、パーサーがどこまで許容するかを確認してください。

よくある質問

どの JSON 形式を SRT への変換で受け付けますか?

本サイトが書き出す形式(version 番号と cues 配列)と、cue の配列だけを並べた同等の形式です。各 cue が開始・終了・本文を認識できる形で持っていれば変換できます。

JSON の title・styles・フレームレートは SRT でどうなりますか?

読み取ったうえで、失われるものとして報告されます。SRT にその欄がないからです。特にフレームレートは置き場所がなく、SRT はフレームではなく時計時刻を保存するため、黙って使わず一覧に載せます。

JSON のミリ秒は SRT 出力時に丸められますか?

いいえ。SRT も JSON もミリ秒で保存するため、各開始・終了は正確に移り、時間軸はずれません。

JSON の cue が開始より終了が前だった場合、SRT 変換でどうなりますか?

ファイルを拒否せず修復します。手で編集した文書でも読み込める字幕ファイルになるようにするためです。cue の時刻は動画と照合してください。ファイルが何かおかしいと告げていたわけですから。

JSON と SRT を往復しても失われませんか?

JSON に変換して戻すと時間軸は正確に再現され、JSON が表現できる書式(斜体・太字・色)もタグとして往復します。往復で残らないのは SRT 自体が保存できないもので、それは上の一覧にあるとおりです。

関連ツール