Aller au contenu principal
SubtitleMatrix

Convertir JSON en SRT

Ou collez le texte d'un sous-titre

Ce que cette conversion change

3 éléments perdus ou à décider

  • Style

    tout le style (gras, italique, couleur, contour, ombre)

  • Positionnement

    le positionnement à l'écran (chaque bloc revient à la position par défaut)

  • Karaoké

    le minutage karaoké (surlignage par syllabe)

Ce rapport de pertes vient de la matrice de capacités de ces deux formats, pas du fichier particulier que vous avez chargé. Un fichier précis peut perdre davantage s'il utilise des fonctionnalités que le format autorise mais que la matrice ne modélise pas.

Cette page lit un document JSON de sous-titres et en écrit un fichier SRT. Elle accepte la forme de ce site — un numéro de version puis un tableau `cues` — et la forme simple où le document n’est qu’une liste de blocs. Chaque bloc fournit un `start`, un `end` et du texte ; les temps sont en millisecondes entières et passent directement dans les codes SRT, qui ont la même résolution.

Ce que le SRT ne peut pas garder est signalé, pas effacé en silence : la table `styles`, l’objet `position` et les plages karaoké n’ont pas de champ dans un fichier fait de blocs numérotés. La mise en forme attachée à un mot — italique, gras, couleur — sort en balise, et ce que la balise ne sait pas dire figure ci-dessus.

Un fichier abîmé n’arrête pas la conversion : le lecteur répare un bloc dont la fin précède le début plutôt que de refuser le document. Un lot entier de JSON se convertit en une passe, dans le navigateur, et revient dans un ZIP.

Exemples

Un fichier JSON typique, converti en SRT

Entrée

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

Sortie

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.

Dans cette sortie, la table de styles, la position et le karaoké sont perdus ; les balises de mot restent. Tout le reste correspond ligne pour ligne.

La même conversion sur une entrée abîmée

Entrée

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

Sortie

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.

C’est le genre de dégâts des vrais fichiers : fins de ligne mélangées, espaces parasites, champs vides. Comparez avec l’exemple propre ci-dessus pour voir ce que le lecteur pardonne.

Questions fréquentes

Quelles formes de JSON cette page accepte-t-elle pour produire un SRT ?

Le document de ce site — version, table `styles`, tableau `cues` — et la liste de blocs seule. Chaque bloc doit porter un `start`, un `end` et du texte dans l’une des formes reconnues : `lines` avec des chaînes ou des objets à balises, ou un simple `text`.

Le titre et la table de styles du JSON sont-ils conservés dans un SRT ?

Ils sont lus puis signalés comme perdus, car le SRT n’a aucun champ pour eux. La table `styles` disparaît, l’objet `position` aussi, et les plages karaoké ne sont pas écrites ; seules les balises de mot passent.

Les millisecondes du JSON sont-elles arrondies dans un SRT ?

Non. Le SRT et le JSON stockent tous deux la milliseconde : `start: 4126` sort en `00:00:04,126` et la chronologie ne dérive pas.

Que fait la conversion JSON vers SRT d’un bloc dont la fin précède le début ?

Le convertisseur le répare au lieu de refuser le fichier : le bloc reçoit une durée de 1 ms. Vérifiez ensuite ses temps sur la vidéo, car le document signalait un problème réel.

Puis-je faire l’aller-retour entre JSON et SRT sans rien perdre ?

Le retour vers JSON reproduit votre chronologie et la mise en forme que le JSON sait décrire : italique, gras et couleurs deviennent des balises puis redeviennent des balises. Ce qui ne survit pas est exactement ce que le SRT ne stocke pas, c’est-à-dire la liste ci-dessus.

Le SRT produit depuis un JSON garde-t-il l’encodage du fichier d’origine ?

Non : la sortie est en UTF-8, fins de ligne Unix et sans BOM, quel que soit l’encodage d’entrée. Un fichier UTF-16 ou Windows-1252 est décodé à la lecture, et le panneau de résultat le signale.

Outils associés