Aller au contenu principal
SubtitleMatrix

Convertir JSON en SMI

Ou collez le texte d'un sous-titre

Ce que cette conversion change

2 éléments perdus ou à décider

  • Style

    tout le style sauf le gras et l'italique (couleur, contour, ombre, marges)

  • 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 SAMI. Chaque bloc devient une balise `<SYNC Start=4126>` avec son texte dans un `<P>`, suivi d’un `<P>&nbsp;` qui vide l’écran : un SYNC remplace ce qui était affiché. Les `start` en millisecondes passent tels quels.

SAMI accepte les balises de mise en forme d’un mot, pas la table `styles` du JSON ni les plages karaoké : le rapport ci-dessus liste ces deux pertes. La liste vient des capacités des formats, pas de votre fichier, et elle ne change pas selon ce que vous déposez.

Plusieurs fichiers d’affilée sont traités dans l’ordre, puis rassemblés dans un ZIP. La conversion se déroule dans le navigateur ; aucun fichier n’est envoyé.

Exemples

Un fichier JSON typique, converti en SMI

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

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>&nbsp;
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>&nbsp;
</BODY>
</SAMI>

Dans cette sortie, la table de styles et le karaoké sont perdus ; les balises de mot restent. 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

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>&nbsp;
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>&nbsp;
</BODY>
</SAMI>

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 une balise SYNC dans un fichier SMI ?

Une balise `<SYNC Start=4126>` ouvre le bloc, le texte est dans un `<P>`, puis un `<P>&nbsp;` efface l’écran jusqu’au bloc suivant. Le `end` du JSON ne produit pas de balise : c’est ce bloc vide qui joue le rôle de fin.

Quel style du JSON survit dans un fichier SMI ?

Le gras, l’italique, le souligné et la couleur, écrits dans le texte en `<b>`, `<i>`, `<u>` et `<font color="…">`. La table `styles` du JSON, elle, est perdue : la page qui intègre le SMI impose sa propre CSS à la place.

Le karaoké d’un fichier JSON survit-il dans un SMI ?

Il disparaît. SAMI n’a aucune syntaxe pour minuter une syllabe à l’intérieur d’une ligne : les plages karaoké du JSON sont retirées et les syllabes redeviennent du texte ordinaire.

Les horodatages du JSON restent-ils exacts dans le SMI ?

Oui : SAMI et le JSON descendent tous deux à la milliseconde. `start: 4126` sort en `Start=4126`, sans arrondi ni décalage. Le `end` en millisecondes sert à calculer la durée, pas à écrire un attribut.

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

Oui, avec une autre liste : SMI vers JSON perd le contenu propre au format, c’est-à-dire le bloc `<STYLE>`, les commentaires et les attributs de `<P>` que le modèle ne couvre pas.

Outils associés