Ir para o conteúdo principal
SubtitleMatrix

Converter JSON para CSV

Ou cole o texto da legenda

O que esta conversão altera

3 coisas são descartadas ou precisam de uma decisão

  • Estilo

    todo o estilo (negrito, itálico, cor, contorno, sombra)

  • Posição

    a posição na tela (cada bloco volta à posição padrão)

  • Karaokê

    a sincronização karaokê (destaque por sílaba)

Esta lista vem da matriz de capacidades destes dois formatos, não do arquivo específico que você carregou. Um arquivo específico pode perder mais se usar recursos que o formato permite mas a matriz não modela.

Esta página converte JSON em CSV. Arraste um arquivo — ou cole o texto — e receba a versão CSV de volta. A conversão roda inteiramente no seu navegador, então nada é enviado e nenhuma conta é necessária.

Estes dois formatos não guardam as mesmas coisas, e a diferença não é cosmética: estilo, posicionamento e karaokê não têm para onde ir no CSV. A lista acima vem do que cada um dos formatos consegue expressar, não do seu arquivo, então a resposta é a mesma antes de você carregar qualquer coisa.

Um arquivo está bom, e uma temporada inteira também: a fila processa na ordem e os resultados descem juntos num único ZIP.

Exemplos

Um arquivo JSON típico, convertido para CSV

Entrada

{
  "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"
    }
  ]
}

Saída

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.

Perdidos nesta saída: estilo, posicionamento e karaokê. Todo o resto corresponde linha a linha.

A mesma conversão sobre uma entrada problemática

Entrada

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Saída

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.

É o tipo de dano que os arquivos reais têm: fim de linha misturado, espaço sobrando, campos vazios. Compare com o exemplo organizado acima para ver o que o analisador perdoa.

Perguntas frequentes

Negrito e itálico sobrevivem do JSON para o CSV?

A ênfase sobrevive; a tabela de estilos não. A formatação que pertence a um trecho de texto — negrito, itálico, sublinhado, uma cor — é escrita no texto CSV como tags i, b, u e font color, porque esse é o único tipo de estilo que um formato por bloco ainda carrega. Perde-se tudo o que o JSON dizia de forma global: a fonte, o tamanho, o contorno, a sombra e as margens.

O que acontece com a posição na tela do JSON para o CSV?

O CSV não consegue dizer onde a legenda é desenhada, então a posição guardada com cada bloco some na saída do JSON e todos os blocos retornam à posição padrão que o player escolhe — na maioria deles, a parte de baixo do quadro, centralizada.

O que acontece com o karaokê do JSON para o CSV?

O tempo se perde e as palavras ficam. O karaokê está nos trechos marcados que um bloco JSON carrega, indicando quando cada sílaba acende, e o CSV não tem como registrar um instante dentro de uma linha — então as marcas saem e as sílabas chegam como texto CSV comum.

Como fica a saída quando JSON vira CSV?

Fica no formato CSV: uma linha de cabeçalho com start, end e text, e depois uma linha por bloco. Cada bloco JSON vira uma linha CSV, na mesma ordem, com o mesmo texto.

Os tempos do JSON ficam exatos no arquivo CSV?

Ficam exatos ao milissegundo, que é o limite dos dois formatos. O JSON escreve 4126 e o CSV escreve 00:00:04.126 para o mesmo instante; nada é arredondado nem deslocado, e um bloco que ficava na tela por 2,9 segundos continua ficando.

Como sai no CSV um bloco JSON de duas linhas?

Sai como duas linhas dentro da mesma célula de texto, entre aspas como o CSV exige. O vínculo se mantém: as duas linhas do JSON continuam pertencendo a uma única legenda no CSV, e o player as exibe juntas.

A ordem dos blocos JSON se mantém no CSV?

Se mantém, com os blocos ordenados pelo início no caminho, do mais cedo para o mais tarde, que é como os players leem. Se o seu JSON listava os blocos fora de ordem, o CSV os devolve em ordem; a mudança é de estrutura, não de conteúdo, e é proposital.

Consigo converter o CSV de volta para JSON?

Consigo, e essa direção não custa nada: um arquivo CSV guarda menos do que o JSON consegue guardar, então nada mais é descartado na volta. O que esta direção descartou continua descartado, porém: estilo, posicionamento e karaokê não podem ser reconstruídos de um CSV, porque nada nele registra como eram.

O CSV de saída mantém a codificação do arquivo JSON?

Não: o CSV gerado é UTF-8, com fim de linha Unix e sem BOM, qualquer que tenha sido a codificação do JSON. Um arquivo que chega em UTF-16 ou numa codificação de byte único do Windows é decodificado na leitura, e o painel de resultado avisa quando isso acontece.

Ferramentas relacionadas