Aller au contenu principal
SubtitleMatrix

Convertir SMI en JSON

Ou collez le texte d'un sous-titre

Ce que cette conversion change

1 élément perdu ou à décider

  • Contenu propre au format

    le contenu que le format source garde hors de ses blocs (blocs hors sous-titres, texte d'en-tête, réglages par bloc, événements commentés) — le format cible n'a nulle part où le mettre

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 fichier SAMI (`.smi`) en JSON structuré. Le SAMI place ses sous-titres dans un document HTML, chaque `<SYNC>` remplaçant ce qui est à l’écran ; le JSON les range dans un tableau d’objets, avec un début, une fin et des lignes de texte.

Une famille se perd : les constructions propres à SAMI — bloc `<STYLE>`, `<TITLE>`, attributs `Class=`, `<P>&nbsp;` de nettoyage. Le rapport affiché en haut de page vient des capacités déclarées par chaque format, pas de votre fichier : il ne change donc pas selon ce que vous déposez, et il nomme chaque famille de données qui n’a pas de place dans la sortie.

Chaque bloc devient un objet avec `start` et `end` en millisecondes entières et un tableau `lines`. Tout se passe dans le navigateur, sans envoi ni compte. Plusieurs fichiers peuvent être déposés ensemble : la file les traite l’un après l’autre, l’annulation est possible, et les résultats arrivent dans une archive ZIP.

Exemples

Un fichier SAMI courant converti en JSON

Entrée

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Sortie

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 3000,
      "lines": [
        "Hello there."
      ]
    },
    {
      "start": 3500,
      "end": 6000,
      "lines": [
        "How are you?",
        "Fine, thanks."
      ]
    }
  ]
}

Perdue dans cette sortie : la structure SAMI elle-même. Le style, la position et le texte sont conservés dans les objets produits.

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

Entrée

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Sortie

{
  "version": 1,
  "cues": [
    {
      "start": 2500,
      "end": 9000,
      "lines": [
        "Line one",
        "Line two"
      ]
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Tom &amp; Jerry"
      ]
    }
  ]
}

Entités comme `&nbsp;`, SYNC orphelins et blocs vides : le JSON reste analysable, et ce qui a été écarté à la lecture est rapporté.

Questions fréquentes

À quoi ressemble la sortie quand un SAMI devient du JSON ?

À un objet JSON dont le tableau `cues` contient une entrée par sous-titre, avec `start`, `end`, `lines` et un style éventuel. Un bloc SAMI donne une entrée, dans l’ordre chronologique, et les lignes du paragraphe deviennent des éléments du tableau `lines`.

Comment le JSON calcule-t-il la fin d’un bloc SAMI ?

Le SAMI ne stocke pas de fin : le `<SYNC>` suivant l’implique. La conversion prend donc cet instant suivant comme `end`, et fabrique une durée pour le dernier bloc, faute de SYNC après lui. Chaque objet du JSON porte ainsi un couple complet, même si le fichier d’origine n’en écrivait que la moitié.

Que deviennent le bloc STYLE et le TITLE du SAMI dans le JSON ?

Ils ne sont pas recopiés : le JSON de sous-titres ne modélise ni feuille de style globale ni titre de document. Les règles de `<STYLE>` et les attributs `Class=` disparaissent, ce qui est précisément la perte de cette direction. Les propriétés de style reconnues sur un bloc, elles, restent dans l’objet.

Les blocs SAMI gardent-ils leur ordre dans la sortie JSON ?

Oui, et ils sont triés par heure de début au passage. Un SAMI dont les `<SYNC>` se chevauchaient ou se suivaient dans le désordre ressort chronologique : c’est une correction de structure, pas une réécriture des textes ni des durées.

Le JSON produit peut-il redevenir un SAMI sans perte ?

Non : le retour JSON vers SAMI perd la structure du document d’origine, parce qu’un SAMI se lit comme une suite de remplacements d’écran et non comme une liste d’objets. Le JSON porte les mêmes blocs, mais pas le `<STYLE>` ni le `<TITLE>` qu’un SAMI pouvait contenir.

Le JSON produit conserve-t-il l’encodage du fichier SAMI ?

Non. La sortie est toujours en UTF-8, avec des fins de ligne Unix et sans BOM, quel que soit l’encodage d’entrée. Le SAMI peut arriver en UTF-16 ou dans un encodage Windows : il est décodé à la lecture, et ce décodage est signalé.

Outils associés