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 untouchedDe 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.
- Nauwkeurigheid
- Opmaak
- Positionering
- Karaoke
- Timing
- Opmaak
- Positionering
- Karaoke
- Nauwkeurigheid
- Opmaak
- Positionering
- Karaoke
- Beeldsnelheid
- Opmaak
- Positionering
- Karaoke
- Opmaak
- Positionering
- Karaoke
- Nauwkeurigheid
- Timing
- Opmaak
- Positionering
- Karaoke
- Regeleinden
- Opmaak
- Positionering
- Karaoke
Naar dit formaat omzetten
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
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.