Aller au contenu principal
SubtitleMatrix

Convertir JSON en LRC

Ou collez le texte d'un sous-titre

Ce que cette conversion change

5 éléments perdus ou à décider

  • Minutage

    les heures de fin des blocs (le format de sortie n'enregistre que le début d'un bloc)

  • 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)

  • Précision

    la précision du minutage — l'horloge de la sortie est plus grossière, chaque code temporel est donc arrondi au 10 ms le plus proche

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 paroles LRC. Elle accepte les blocs de ce site — `start` et `end` en millisecondes entières, `lines`, `style` — et écrit une ligne estampillée `[00:04.12]` par ligne de texte. LRC ne retient que le début : la fin de chaque bloc est abandonnée.

LRC est du texte nu. La table `styles`, l’objet `position`, les balises de ligne et les plages karaoké n’ont aucun endroit où se ranger, et la conversion arrondit les millisecondes au centième de seconde. La liste ci-dessus est celle des capacités, pas celle de votre fichier.

Un fichier ou tout un lot : la file avance dans l’ordre et les résultats descendent dans un ZIP. Tout se passe dans le navigateur, sans envoi.

Exemples

Un fichier JSON typique, converti en LRC

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

[ti:Fixture: typical]
[00:00.00]Hello world.
[00:00.00]Second line.
[00:02.50]Plain line.
[00:02.50]Styled line.
[00:04.50]Roger: I am here.

Dans cette sortie, le minutage de fin, les styles, la position et le karaoké sont perdus, et les débuts sont arrondis au centième. Le texte reste identique.

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

[00:00.00]First.
[00:01.00]Second.
[00:02.00]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

Pourquoi la fin de chaque bloc JSON disparaît-elle dans un fichier LRC ?

Parce que LRC ne note que l’instant où une ligne commence. Un lecteur de paroles garde la ligne jusqu’à la suivante : une fin serait redondante. Le `end` en millisecondes est donc perdu, le `start` reste.

Que perd un bloc JSON en passant en LRC ?

Tout disparaît : LRC ne stocke aucune mise en forme. La table `styles`, les balises de ligne et les plages karaoké du JSON n’ont pas de syntaxe d’accueil, et l’objet `position` non plus. Les mots, eux, sont intacts.

Les horodatages du JSON sont-ils arrondis dans le LRC ?

Oui, LRC écrit `[00:04.12]`, au centième. Un `start` de 4126 ms sort en 4,13 s, soit un écart maximal de 5 ms. L’ordre des lignes n’est pas modifié.

Comment un bloc JSON à deux lignes sort-il en LRC ?

En deux lignes estampillées au même instant, ce qui est la façon dont LRC dit que les deux vont ensemble. Le regroupement devient temporel plutôt que structurel.

Le retour d’un LRC vers le JSON est-il gratuit ?

Non : il a sa propre liste, où le minutage figure. LRC n’a pas de fin de bloc, donc la conversion doit déduire chaque `end` du `start` suivant, et le dernier bloc reçoit une durée par défaut.

Outils associés