Format de sous-titres JSON
Ce que ce format peut exprimer
- Style du texte
- Polices, couleur, contour, ombre
- Positionnement à l'écran
- Oui
- Minutage karaoké
- Oui
- Sauts de ligne dans un bloc
- Oui
- Chronologie
- Heure de début et de fin pour chaque bloc
- Résolution du minutage
- 1 ms
- Minutage stocké en numéros d'image
- Non
- Texte de droite à gauche
- Oui
Exemples
Un fichier JSON typique, et ce qu’on en lit
Fichier
{
"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"
}
]
}
Ce qu'il contient
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 untouchedLa colonne de droite n’est pas un fichier converti : c’est ce que ce site lit dans le fichier de gauche, et le point de départ de toute conversion de ce fichier.
Un fichier JSON abîmé, et ce qu’on en lit encore
Fichier
{
"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"
}
Ce qu'il contient
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)Les vrais fichiers arrivent avec un BOM, des fins de ligne Windows, une ligne parasite avant une heure ou une heure illisible. Rien ne lève d’exception : ce qui n’est pas compris est signalé, jamais perdu en silence.
Convertir SubtitleMatrix JSON vers un autre format
Chacune de ces pages tourne entièrement dans votre navigateur. Les étiquettes indiquent ce que coûte cette direction avant de l'ouvrir.
- Style
- Positionnement
- Karaoké
- Minutage
- Style
- Positionnement
- Karaoké
- Précision
- Style
- Positionnement
- Karaoké
- Fréquence d'images
- Style
- Positionnement
- Karaoké
- Style
- Positionnement
- Karaoké
- Minutage
- Style
- Positionnement
- Karaoké
- Sauts de ligne
- Style
- Positionnement
- Karaoké
Convertir vers ce format
- 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
Le JSON décrit des sous-titres comme une structure de données : un numéro de version, éventuellement une table de styles et un tableau de blocs. C’est la forme que produit ce site et celle que lisent les scripts, pas un format de lecteur vidéo.
La table ci-dessus est la fiche complète du format : une ligne à « non » indique exactement ce qu’une conversion vers JSON coûte, et chaque page de conversion liée plus bas l’annonce avant que vous n’ouvriez un fichier.
Un bloc JSON porte un `start` et un `end` en millisecondes entières, un tableau `lines` et, si besoin, un `style` qui renvoie à la table `styles`. Tout se convertit dans le navigateur, sans envoi ni compte.
Questions fréquentes
Qu’est-ce qu’un fichier JSON de sous-titres ?
C’est la forme propre à ce site : un champ de version, une table `styles` facultative et un tableau `cues` dont les temps sont des millisecondes entières. Il est sans perte à l’égard de tout ce que les autres formats savent exprimer, et il s’adresse aux scripts plutôt qu’aux lecteurs vidéo.
Le JSON stocke-t-il un style ?
Oui, et davantage que les autres formats : une table `styles` de polices, tailles, couleurs, contours et marges, plus des balises par ligne dans le tableau `tags`. Le minutage karaoké est stocké aussi. Chaque `style` de bloc renvoie à une entrée de la table, ce que la représentation interne appelle le `styleRef`.
Chaque bloc JSON a-t-il un début et une fin ?
Oui, et un instant s’écrit `4126`. C’est la finesse du format, la milliseconde, et le nombre est exact : un bloc peut être court, long ou chevaucher le suivant sans que rien ne soit sous-entendu.
Vers quel format convertir mon JSON ?
Aucune destination de ce site ne reprend tout ce qu’un fichier JSON contient : il n’y a donc pas de direction gratuite, et chaque page de conversion nomme sa propre liste de pertes. Choisissez la liste que vous pouvez accepter, pas le format que vous croisez le plus souvent.
Puis-je ouvrir un fichier JSON dans un éditeur de texte ?
Oui, à condition de garder virgules et guillemets en place. Les temps sont des millisecondes en nombres simples : un bloc à 1,25 seconde s’écrit `"start": 1250`.