Aller au contenu principal
SubtitleMatrix

Convertir JSON en CSV

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 convertit un document JSON en tableau CSV. Elle lit la forme de ce site — version, table `styles`, tableau `cues` — ou la liste de blocs seule, et écrit une ligne d’en-tête `start,end,text` suivie d’une ligne par bloc. Les `start` et `end` en millisecondes entières deviennent des heures `00:00:04.126`, sans arrondi.

Le tableau ne sait pas porter la mise en forme globale : la table `styles`, l’objet `position` et les plages karaoké n’ont pas de colonne. Ce qui appartient à un mot — gras, italique, souligné, couleur — est écrit dans la cellule de texte sous forme de balises `<b>`, `<i>`, `<u>` et `<font color="…">`. La liste ci-dessus est celle des capacités, pas celle de votre fichier.

Le CSV produit est en UTF-8 sans BOM, séparateur virgule et fins de ligne LF. En Excel français, le point-virgule est le séparateur par défaut : ouvrez le fichier par Données > À partir d’un fichier texte plutôt qu’en double-cliquant. Le traitement se fait dans le navigateur, sans envoi.

Exemples

Un fichier JSON typique, converti en CSV

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

start,end,text
00:00:00.000,00:00:02.000,"Hello world.
Second line."
00:00:02.500,00:00:04.000,"Plain line.
<i>Styled</i> line."
00:00:04.500,00:00:06.000,Roger: I am here.

Dans cette sortie, le style global, 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

start,end,text
00:00:00.000,00:00:01.000,First.
00:00:01.000,00:00:02.000,Second.
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 colonnes le CSV reçoit-il depuis un fichier JSON ?

Toujours `start,end,text` dans cet ordre, avec une ligne d’en-tête. Les temps s’écrivent `00:00:04.126`, point décimal et millisecondes sur trois chiffres. Un bloc à deux lignes garde ses deux lignes dans la même cellule, entre guillemets.

Que perd un fichier JSON quand il devient un tableau CSV ?

La mise en forme attachée au texte survit en balises `<b>`, `<i>`, `<u>` et `<font color="…">`. Disparaissent la table `styles` du JSON — police, taille, contour, ombre, marges —, l’objet `position` de chaque bloc et les plages karaoké qui minutaient les syllabes.

Comment le CSV échappe-t-il le texte venu du JSON ?

Selon RFC 4180 : une cellule est mise entre guillemets si elle contient le séparateur, un guillemet, un saut de ligne ou des espaces en début ou en fin. Les guillemets internes sont doublés. Le texte repasse donc intact dans un tableur.

Pourquoi Excel met-il un CSV venu du JSON dans une seule colonne ?

Parce qu’un Excel en français attend le point-virgule, alors que ce fichier est séparé par des virgules. Passez par Données > À partir d’un fichier texte et choisissez la virgule comme séparateur. Le fichier n’a pas de BOM : si les accents sortent mal, imposez l’encodage UTF-8 à l’import.

Les horodatages d’un JSON perdent-ils en précision dans un CSV ?

Non. Le JSON et le CSV descendent tous deux à la milliseconde : `start: 4126` devient `00:00:04.126`. Une durée de 2,9 s reste 2,9 s.

Que se passe-t-il si je reconvertis ce CSV en JSON ?

Le retour n’ajoute aucune perte, puisque le CSV contient déjà moins que le JSON. En revanche, ce que cette page a retiré — styles globaux, position, karaoké — ne peut pas être reconstruit : plus rien dans le CSV ne s’en souvient.

Outils associés