Naar de hoofdinhoud
SubtitleMatrix

JSON-ondertitelformaat

Wat dit formaat kan uitdrukken

Tekstopmaak
Lettertypen, kleur, contour, schaduw
Positionering op het scherm
Ja
Karaoke-timing
Ja
Regeleinden binnen een blok
Ja
Tijdlijn
Begin- en eindtijd voor elk blok
Tijdresolutie
1 ms
Tijden opgeslagen als framenummers
Nee
Tekst van rechts naar links
Ja

Voorbeelden

Een typisch JSON-bestand, en wat eruit wordt gelezen

Bestand

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

Wat het bevat

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

De rechterkant is geen omgezet bestand, maar wat deze site uit de linkerkant leest en waar elke conversie van dat bestand begint.

Een rommelig JSON-bestand, en wat er nog uit wordt gelezen

Bestand

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

Wat het bevat

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 bestanden komen met een BOM, Windows-regeleinden, een losse regel vóór een tijdcode of een tijdcode die helemaal niet leesbaar is. Niets daarvan gooit een fout: wat niet begrepen wordt, wordt gemeld in plaats van stil weggegooid.

SubtitleMatrix JSON naar een ander formaat omzetten

Elk van deze draait volledig in je browser. De labels zeggen wat die richting kost voordat je hem opent.

Naar dit formaat omzetten

SubtitleMatrix JSON is een van de ondertitelformaten die deze site verwerkt, en deze pagina is de referentie: wat het kan bewaren, wat het niet kan, en een pagina voor elk formaat waar je het naartoe kunt omzetten.

De tabel hierboven is het hele verhaal; er is geen verborgen lijst met extra’s. Staat er nee in een rij, dan is dat precies wat er verloren gaat bij het omzetten naar JSON, en elke conversiepagina hieronder zegt dat vóór je een bestand opent.

Al die conversies draaien in je browser. Niets wordt geüpload en een account is niet nodig, wat uitmaakt voor materiaal onder een geheimhoudingsverklaring, een patiëntendossier of een omroepembargo.

Veelgestelde vragen

Wat is een JSON-bestand?

.json is hier de eigen ondertitelvorm van deze site: een versieveld, een optionele stijltabel en een array met blokken waarvan de tijden in milliseconden staan. De vorm is bewust verliesvrij ten opzichte van alles wat de andere formaten kunnen uitdrukken, en ze is bedoeld voor scripts en pipelines, niet voor spelers.

Bewaart JSON stijl?

Ja, en meer dan de andere formaten: een stijltabel met lettertypen, groottes, kleuren, randen en marges, plus codes per blok in de tekst, zodat één regel vet, gekleurd en geplaatst kan zijn zonder een benoemde stijl. Karaoketiming wordt ook bewaard. In deze vorm is de tabel een styles-object met stijnamen als sleutel, en de opmaak per blok zit in de tags-array van elke regel in plaats van als code in de tekst; daarom hoeft er bij het in- of uitgaan niets te worden geëscaped.

Bewaart elk JSON-blok zowel een start als een eind?

Ja, en een moment in een JSON-bestand leest 4126. Fijner dan milliseconden gaat JSON niet, en het getal is exact; een blok kan dus kort, lang of overlappend met het volgende zijn zonder dat er iets wordt geïmpliceerd.

Naar welk formaat kan ik JSON het beste omzetten?

Niets op deze site neemt alles over wat een JSON-bestand bevat, dus er is geen gratis richting: elke conversiepagina noemt haar eigen verlieslijst. Kies het doelformaat op basis van welke lijst je kunt accepteren, niet op basis van welk formaat je het vaakst hebt gezien.

Kan ik een JSON-bestand in een teksteditor openen?

Ja, zolang je de komma’s en aanhalingstekens netjes houdt. De tijden zijn milliseconden als gewone getallen, dus een blok op 1,25 seconden krijgt simpelweg start 1250.