Aller au contenu principal
SubtitleMatrix

Convertir JSON en TTML

Ou collez le texte d'un sous-titre

Ce que cette conversion change

1 élément perdu ou à décider

  • 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 convertit un document JSON en TTML. Chaque bloc devient un élément `<p>` avec ses attributs `begin` et `end`, rangé dans un `<body>`, souvent sous un `<div>`, avec une déclaration XML en tête. Les `start` et `end` en millisecondes entières s’écrivent `00:00:04.126`, sans arrondi.

TTML sait exprimer la mise en forme et la disposition, mais pas le minutage d’une syllabe : les plages karaoké du JSON n’ont pas d’équivalent et figurent seules dans la liste ci-dessus. Celle-ci vient des capacités des deux formats, pas des particularités de votre fichier.

Un fichier ou tout un lot : la file les traite dans l’ordre et les résultats partent ensemble dans un ZIP. La conversion se fait dans le navigateur, sans envoi.

Exemples

Un fichier JSON typique, converti en TTML

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

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:00.000" end="00:00:02.000">Hello world.<br/>Second line.</p>
<p begin="00:00:02.500" end="00:00:04.000">Plain line.<br/><span tts:fontStyle="italic">Styled</span> line.</p>
<p begin="00:00:04.500" end="00:00:06.000">Roger: I am here.</p>  </body>
</tt>

Dans cette sortie, seul le karaoké est perdu : les styles, les positions et les millisecondes passent. Le texte 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

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:00.000" end="00:00:01.000">First.</p>
<p begin="00:00:01.000" end="00:00:02.000">Second.</p>
<p begin="00:00:02.000" end="00:00:03.000">Third.</p>  </body>
</tt>

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

Comment un bloc JSON devient-il un élément p dans un fichier TTML ?

En élément `<p begin="00:00:04.126" end="00:00:06.000">`, dans un `<body>` et généralement un `<div>`, sous une déclaration XML. Le tableau `lines` devient des `<br/>` à l’intérieur du même `<p>`.

Le karaoké du JSON survit-il dans un fichier TTML ?

Il est perdu. Les plages karaoké du JSON minutaient chaque syllabe à l’intérieur d’une ligne, et TTML n’a pas de construction équivalente pour un moment interne : les mots restent, les repères disparaissent.

Les millisecondes du JSON sont-elles exactes dans le TTML ?

Oui. TTML et le JSON descendent tous deux à la milliseconde : `start: 4126` sort en `begin="00:00:04.126"`. Une durée de 2,9 s reste 2,9 s, sans dérive.

La table de styles et la position du JSON passent-elles dans le TTML ?

Ils sont repris dans le modèle TTML : la table `styles` alimente les styles et les régions, et le fichier produit garde la disposition que le format sait décrire. Aucune de ces deux dimensions n’est signalée comme perdue.

Puis-je revenir d’un fichier TTML vers le JSON d’origine ?

Oui, et le retour a sa propre liste : TTML vers JSON perd le contenu propre au format, comme les éléments `<styling>`, `<layout>` et `<metadata>` placés en tête du document.

Outils associés