Zum Hauptinhalt springen
SubtitleMatrix

JSON in SRT umwandeln

Oder Untertiteltext einfügen

Was diese Konvertierung ändert

3 Sachen entfallen oder brauchen eine Entscheidung

  • Formatierung

    die gesamte Formatierung (Fett, Kursiv, Farbe, Kontur, Schatten)

  • Positionierung

    die Positionierung auf dem Bildschirm (jeder Block kehrt an die Standardposition zurück)

  • Karaoke

    Karaoke-Zeitangaben (Hervorhebung pro Silbe)

Diese Liste stammt aus der Fähigkeitsmatrix für diese beiden Formate, nicht aus der konkreten Datei, die Sie geladen haben. Eine bestimmte Datei kann mehr verlieren, wenn sie Merkmale nutzt, die das Format erlaubt, die Matrix aber nicht modelliert.

Diese Seite liest ein JSON-Dokument mit Untertiteln und schreibt daraus eine SRT-Datei. Akzeptiert wird das Schema dieser Seite – version, dann cues – und die einfache Form, in der das Dokument nur eine Liste von cues ist. Jede cue braucht start, end und Text; die Zeiten sind Millisekunden und gehen ungerundet in SRT-Zeitcodes über.

Was SRT nicht aufnehmen kann, wird gemeldet statt still verworfen: Titel, Bildrate und Stiltabelle haben in einer Datei aus nummerierten Blöcken keinen Ort. Auszeichnungen wie Kursiv, Fett oder Farbe werden als passende Tags geschrieben; was ein Tag nicht ausdrücken kann, steht oben.

Eine beschädigte Datei hält die Konvertierung nicht auf. Der Parser liest, was er kann, und repariert eine cue, deren Ende nicht nach dem Anfang liegt – eine ladbare Datei ist mehr wert als eine Fehlermeldung. Viele JSON-Dateien auf einmal laufen im Browser durch und kommen als ZIP zurück.

Beispiele

Eine typische JSON-Datei, nach SRT konvertiert

Eingabe

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

Ausgabe

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.

In dieser Ausgabe verloren: Stil, Position und Karaoke. Alles andere stimmt Zeile für Zeile.

Dieselbe Konvertierung mit widerspenstiger Eingabe

Eingabe

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

Ausgabe

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.

Solche Schäden haben echte Dateien – gemischte Zeilenenden, verirrte Leerzeichen, leere Felder. Vergleichen Sie mit dem sauberen Beispiel oben, um zu sehen, was der Parser verzeiht.

Häufige Fragen

Welche JSON-Formen nimmt der Konverter für SRT an?

Das Schema dieser Seite – version, dann cues – und die reine Array-Form, in der die Datei nur aus der cue-Liste besteht. Entscheidend ist, dass jede cue start, end und Text in einer der erkannten Formen enthält.

Was passiert mit Titel, Stilen und Bildrate, wenn JSON zu SRT wird?

Sie werden gelesen und als Verlust gemeldet, weil SRT kein Feld dafür hat. Besonders die Bildrate hat keinen Ort: SRT speichert Uhrzeit, keine Einzelbilder. Sie steht deshalb in der Liste oben und wird nicht stillschweigend verwendet.

Werden die Millisekunden bei JSON nach SRT gerundet?

Nein. SRT speichert Millisekunden, und die JSON-Datei ist in Millisekunden geschrieben. Jeder start und jedes end wird exakt übertragen, die Zeitachse driftet nicht.

Was passiert bei JSON nach SRT, wenn der start einer cue nach ihrem end liegt?

Der Konverter repariert die cue, statt die Datei abzulehnen; eine von Hand bearbeitete JSON-Datei ergibt so trotzdem eine ladbare SRT-Datei. Die Zeiten dieser cue sollten am Video geprüft werden – die Datei sagte damit, dass etwas nicht stimmt.

Kann ich JSON nach SRT und zurück ohne Verlust wandeln?

Der Rückweg reproduziert die Zeitachse exakt und auch die Gestaltung, die JSON beschreiben kann: Kursiv, Fett und Farben werden zu Tags und kommen als Tags zurück. Nicht zurück kommt, was SRT selbst nicht speichern kann – genau die Liste oben.

Verwandte Werkzeuge