Zum Hauptinhalt springen
SubtitleMatrix

JSON-Untertitelformat

Was dieses Format ausdrücken kann

Textformatierung
Schriften, Farbe, Kontur, Schatten
Positionierung auf dem Bildschirm
Ja
Karaoke-Zeitangaben
Ja
Zeilenumbrüche innerhalb eines Blocks
Ja
Zeitachse
Start- und Endzeit für jeden Block
Zeitauflösung
1 ms
Zeitangaben als Bildnummern gespeichert
Nein
Rechts-nach-links-Text
Ja

Beispiele

Eine typische JSON-Datei und was daraus gelesen wird

Datei

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

Was sie enthält

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

Die rechte Seite ist keine konvertierte Datei – sie zeigt, was diese Seite aus der linken liest und womit jede Konvertierung dieser Datei beginnt.

Eine widerspenstige JSON-Datei und was trotzdem gelesen wird

Datei

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

Was sie enthält

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)

Echte Dateien kommen mit BOM, Windows-Zeilenenden, einer verirrten Zeile vor dem Zeitcode oder einem unlesbaren Zeitcode. Nichts davon wirft einen Fehler: Was nicht verstanden wird, wird gemeldet statt still verworfen.

SubtitleMatrix JSON in ein anderes Format konvertieren

Jede davon läuft vollständig in Ihrem Browser. Die Beschriftungen sagen, was diese Richtung kostet, bevor Sie sie öffnen.

In dieses Format konvertieren

JSON ist das Eigenformat dieser Seite: ein version-Feld, eine optionale Stiltabelle und ein cues-Array, dessen Zeiten in ganzen Millisekunden stehen. Diese Seite ist die Referenz dazu – was das Format aufnimmt, was nicht, und eine Seite für jedes Zielformat.

Die Tabelle oben ist vollständig; eine versteckte Funktionsliste gibt es nicht. Steht in einer Zeile nein, ist genau das der Verlust beim Konvertieren nach JSON, und jede verlinkte Seite sagt es, bevor eine Datei geöffnet wird.

Alle diese Konvertierungen laufen im Browser. Nichts wird hochgeladen, keine Anmeldung ist nötig – wichtig für Material unter NDA, aus einer Patientenakte oder mit Sendesperrfrist.

Häufige Fragen

Was ist eine JSON-Datei in diesem Werkzeug?

Das .json dieser Seite ist ein eigenes Untertitel-Schema: ein version-Feld, eine optionale Stiltabelle und ein cues-Array, dessen Zeiten ganze Millisekunden sind. Es ist bewusst verlustfrei gegenüber allem, was die anderen Formate ausdrücken können, und für Skripte und Pipelines gedacht, nicht für Player.

Speichert JSON Gestaltung, Position und Karaoke?

Ja, mehr als die anderen: eine Stiltabelle mit Schrift, Größe, Farben, Kontur und Rändern, pro cue eine position mit x, y und align sowie tags je Zeile für fett, kursiv, Farbe und Karaoke. Weil die Auszeichnung in tags-Arrays steht und nicht als Code im Text, muss beim Schreiben und Lesen nichts maskiert werden.

Wie genau sind die Zeiten im JSON-Format?

Jede cue hat start und end als ganze Millisekunden, etwa 4126. Der Wert ist exakt, die cues sind nach start sortiert, und start liegt immer vor end. Eine cue darf kurz, lang oder überlappend sein, ohne dass das Format etwas hineininterpretiert.

Welche Ziele sind von JSON aus verlustfrei?

Keines. ASS und SSA verlieren nur die Zeitauflösung, weil sie in Hundertsteln rechnen; SRT, VTT, SBV und CSV verlieren Stil, Position oder Karaoke; SMI verliert Stil und Karaoke; LRC zusätzlich die Endzeiten; TXT die gesamte Zeitachse. Jede Zielseite nennt ihre eigene Liste.

Kann ich eine JSON-Datei im Texteditor bearbeiten?

Ja, solange Kommas und Anführungszeichen stimmen. Die Ausgabe dieser Seite ist auf zwei Leerzeichen eingerückt, hält eine feste Schlüsselreihenfolge ein und schreibt Zeiten als Zahlen: Eine cue bei 1,25 Sekunden hat "start": 1250.