Das legendas para a folha de cálculo, e de volta: o que sobrevive à viagem
Publicado a 05/08/2026 · 13 min de leitura · Ferramentas para programadores
Daniel Okonkwo — Programador front-end e redator de Tecnologia na Allin
Desempenho web · Formatos de ficheiro
Verificado a partir de 3 fontes
As duas metades da viagem estão conformes e uma legenda volta exatamente como saiu. À ida, cada legenda torna-se uma linha de índice, início, fim e texto; qualquer campo que contenha uma vírgula, uma aspa reta ou uma quebra de linha é colocado entre aspas duplas e as aspas internas são duplicadas, que é o que a RFC 4180 descreve. As marcas de tempo também ficam entre aspas automaticamente, porque o SubRip escreve os milésimos depois de uma vírgula: 00:00:01,000 contém um separador. À volta, o conversor de CSV para SRT lê o ficheiro como registos CSV e não como linhas de texto, por isso uma quebra de linha só termina um registo quando cai fora das aspas: uma legenda de duas linhas e outra de três voltam inteiras. Testado na saída do próprio exportador, um ficheiro que mistura legendas de uma, duas e três linhas, com vírgulas e aspas, reconstrói-se byte a byte igual e continua igual após três viagens consecutivas. A importação aceita ainda ficheiros separados por ponto e vírgula, reconstrói pela ordem da coluna de índice quando cada linha tem um número distinto, e avisa quando uma legenda acaba antes de começar ou quando uma linha não pôde ser lida. O que ainda exige cuidado não são os dois conversores mas a folha de cálculo pelo meio, que pode reinterpretar uma coluna de tempos assim que abre o ficheiro.
Uma vírgula é protegida, uma aspa é duplicada e uma legenda de duas linhas mantém as duas — verificado byte a byte em três viagens consecutivas. O que ainda pode alterar o seu ficheiro é a folha de cálculo pelo meio.
Porque uma folha de cálculo é a forma certa para rever
Um ficheiro de legendas é um mau objeto para entregar a alguém que não é legendador. Mistura conteúdo e maquinaria, por isso um revisor tem de saltar números e marcas de tempo para ler uma frase, e qualquer alteração acidental a uma marca fica invisível até à reprodução. Uma linha por legenda resolve os dois problemas de uma vez. O texto ocupa uma só coluna, legível de cima a baixo; os tempos ocupam as suas colunas, visíveis mas difíceis de tocar; e pode acrescentar-se uma segunda coluna para uma tradução, um comentário ou uma marca de aprovação sem incomodar nada.
As colunas que este conversor escreve são índice, início, fim e texto, por esta ordem, com uma linha de cabeçalho com exatamente esses quatro nomes. O índice é regenerado a partir da posição de cada legenda no ficheiro em vez de ser copiado da numeração de origem, por isso um ficheiro com contadores duplicados ou desordenados sai limpamente numerado a partir de um. Guarde essa coluna. À volta ela é lida e não ignorada: quando cada linha tem um número distinto, a importação reconstrói pela ordem do índice, de maneira que uma folha que ordenou por texto durante o trabalho produz na mesma um ficheiro de legendas na ordem certa.
Vírgulas, aspas e o RFC que as cobre
O diálogo está cheio de vírgulas, e a vírgula é o separador de campos: é a primeira coisa a verificar em qualquer ferramenta de legendas para CSV. O RFC 4180, a nota de 2005 que registou o aspeto habitual dos ficheiros CSV, dá a regra: os campos que contenham quebras de linha, aspas retas ou vírgulas devem ser fechados entre aspas, e uma aspa dentro de um campo desses escapa-se antepondo-lhe outra aspa. Este conversor cumpre as duas metades. «Bom, não, não exatamente.» escreve-se como um só campo entre aspas, e Ele disse "o porto", não as docas. escreve-se "Ele disse ""o porto"", não as docas.", entre aspas porque contém ao mesmo tempo uma aspa e uma vírgula, com cada aspa interna duplicada.
As marcas de tempo recebem o mesmo tratamento sem que ninguém o decida, e a razão é um feliz acidente do formato. O SubRip escreve os milissegundos depois de uma vírgula, portanto 00:00:01,000 contém um separador de campos e fica entre aspas em cada linha de cada ficheiro que esta ferramenta produz. Vale a pena notá-lo, porque é o único ponto em que a estranha escolha de separador do SubRip lhe faz um favor: uma marca WebVTT, que usa um ponto, sairia sem aspas e ficaria à mercê do que o programa leitor decidir que é um 00:00:01.000 desprotegido.
Dois desvios honestos, nenhum prejudicial mas ambos reais. O RFC 4180 diz que os registos são delimitados por retorno de carro e mudança de linha; este conversor escreve apenas uma mudança de linha, que toda a folha de cálculo aceita e que só conta se algo a jusante for muito literal. E o RFC tem estatuto Informational, não é uma norma: descreve o que as implementações fazem em vez de o impor, e a sua própria redação diz «deveriam» e não «devem». Tratá-lo como a definição do CSV é uma convenção útil, não uma garantia sobre o próximo programa que ler o seu ficheiro.
Quatro coisas a saber sobre a folha de cálculo pelo meio
O delimitador. As folhas de cálculo das línguas que usam a vírgula como separador decimal — ou seja, francês, alemão, espanhol, italiano e português — gravam frequentemente o ficheiro com pontos e vírgulas entre campos em vez de vírgulas, seguindo o separador de listas do sistema. A importação olha para o primeiro registo e conta os separadores que ficam fora das aspas, por isso um ficheiro assim é lido e não recusado; um ponto e vírgula dentro de uma legenda não é contado, porque está dentro de um campo entre aspas. Escolher explicitamente a variante separada por vírgulas, quando a folha a oferece, continua a dar um ficheiro mais limpo, mas uma gravação normal numa dessas cinco línguas já não lhe custa a importação.
Os tipos. O CSV não transporta qualquer informação de tipo — o RFC 4180 nada diz sobre tipos de dados, porque não há nada a dizer: todo o campo é texto. As aspas protegem a análise, não o sentido. Uma folha de cálculo lê o campo protegido, desembrulha-o e depois decide por si o que contém, e é aí que a marca de tempo corre perigo: 00:00:01,000 é uma cadeia que um programa tem o direito de ler como hora, como número com separador de milhares ou como texto, conforme a sua configuração regional e os seus palpites. Nada no ficheiro lho indica. O hábito fiável é importar em vez de abrir — usar a via de importação de texto da folha e pôr as duas colunas de tempo em Texto antes de os dados chegarem — e verificar uma marca antes de começar a editar.
As fórmulas. Uma legenda cujo texto começa por um sinal de igual, um mais ou uma arroba — e por um menos seguido de um algarismo ou de outro operador, como -1-1 — é escrita como campo entre aspas precedido de um apóstrofo, o escape que a folha de cálculo já entende: a célula mostra o texto e não avalia nada. A importação retira esse apóstrofo, pelo que =SUM(A1:A9) faz a viagem tal e qual. O travessão de diálogo é deixado de propósito em paz, porque uma linha que começa por «- Sim.» é uma fala em um em cada dois ficheiros de legendas e não é uma fórmula em folha nenhuma. Do que isto não o protege é de uma fórmula que escreva por si mesmo ao editar.
A ordem. Ordenar é o gesto mais natural numa folha de cálculo, por isso a importação lê a coluna de índice em vez de a ignorar: quando cada linha tem o seu próprio número distinto, a saída é reconstruída pela ordem do índice e um aviso indica que as linhas foram repostas em sequência. Ordene por texto para agrupar falas parecidas numa verificação terminológica e o SRT reconstruído sai na mesma por ordem cronológica. Se os números estiverem duplicados, ou em falta nalgumas linhas, a coluna não é de confiança: mantém-se então a ordem das linhas e a ferramenta di-lo. Os tempos invertidos são assinalados da mesma maneira: uma linha que vai de 00:00:09,000 a 00:00:04,000 continua a ser escrita tal e qual, mas é agora contada e nomeada em vez de passar em silêncio.
| O que a legenda contém | Como o CSV é escrito | O que volta | Veredicto |
|---|---|---|---|
| Uma vírgula | Campo entre aspas duplas | Idêntico | Sobrevive |
| Uma aspa reta | Campo entre aspas, cada aspa interna duplicada | Idêntico, mesmo após várias viagens | Sobrevive |
| Uma quebra de linha (legenda de duas linhas) | Campo entre aspas com quebra real lá dentro — correto | As duas linhas, na mesma legenda | Sobrevive — idêntico byte a byte, três viagens |
| Uma marca de tempo, 00:00:01,000 | Sempre entre aspas — contém uma vírgula | Idêntica, se a folha não a reinterpretou | Sobrevive ao ficheiro; o risco é a folha |
| Um texto que começa por = + - ou @ | Entre aspas, com um apóstrofo à frente — o escape da folha | A célula mostra o texto; a importação retira o apóstrofo | Sobrevive — o travessão de diálogo não é tocado |
| Linhas reordenadas na folha | Nada marca a ordem original a não ser a coluna de índice | A coluna de índice é lida; a saída é reconstruída pela sua ordem | Sobrevive — mantenha a coluna de índice e leia o aviso |
Perguntas frequentes
- Uma vírgula dentro de uma legenda estraga o CSV?
- Não. Todo o campo que contenha uma vírgula, uma aspa reta ou uma quebra de linha é fechado entre aspas, e uma aspa dentro de um campo desses escapa-se duplicando-a, que é o que o RFC 4180 descreve. Testado com casos reais: «Bom, não, não exatamente.» torna-se um só campo entre aspas, e Ele disse "o porto", não as docas. torna-se "Ele disse ""o porto"", não as docas.", entre aspas porque contém ao mesmo tempo vírgula e aspa, com cada aspa interna duplicada. Os dois voltam idênticos byte a byte pelo conversor de CSV para SRT, e sobrevivem a três viagens consecutivas sem acumular aspas, que é a falha habitual de um escape ingénuo. As marcas de tempo ficam protegidas pela mesma regra sem que ninguém o tenha escolhido, porque o SubRip escreve os milissegundos depois de uma vírgula e 00:00:01,000 contém portanto um separador.
- As legendas de duas ou três linhas sobrevivem à viagem?
- Sim, e vale a pena saber porquê, porque é aí que este género de ferramenta costuma falhar. Uma legenda com quebra de linha é escrita como campo entre aspas com uma quebra real lá dentro, a cavalo sobre duas linhas físicas do ficheiro CSV — a forma correta segundo a RFC 4180 e a que uma folha de cálculo abre como uma única célula. O conversor de CSV para SRT lê o ficheiro como registos CSV e não como linhas de texto, por isso uma quebra só termina um registo quando cai fora das aspas; um registo repartido por três linhas físicas continua a ser um registo. Verificado na saída do próprio exportador: um ficheiro que mistura legendas de uma, duas e três linhas, uma com vírgula e outra com aspa, reconstrói-se byte a byte igual e continua igual após três viagens consecutivas. Se editar o texto numa folha de cálculo, use a quebra de linha dentro da célula — Alt+Enter no Excel em Windows — em vez de escrever uma barra invertida e um n, que são apenas dois caracteres de texto.
- A minha folha de cálculo grava o ficheiro com pontos e vírgulas. Vai importar?
- Sim. As folhas de cálculo seguem o separador de listas do sistema e, nas línguas que usam a vírgula como marca decimal — francês, alemão, espanhol, italiano, português —, esse separador é o ponto e vírgula, por isso uma gravação normal produz um ficheiro delimitado por ponto e vírgula. A importação olha para o primeiro registo do que colar, conta as vírgulas e os pontos e vírgulas que caem fora dos campos entre aspas e fica com o mais frequente; um ponto e vírgula dentro de uma fala não conta, porque está entre aspas. Ou seja, um ficheiro gravado a partir de uma folha em francês, alemão, espanhol, italiano ou português importa-se tal e qual. Escolher explicitamente a variante separada por vírgulas — normalmente oferecida com um nome como CSV UTF-8 ou «delimitado por vírgulas» — continua a ser o hábito mais limpo se for passar o ficheiro a outra coisa, mas já não é condição para que funcione aqui.
- O Excel vai destruir as minhas marcas de tempo lendo 00:00:01,000 como hora ou como número?
- Pode, e as aspas não o impedem, porque proteger e tipar são dois problemas distintos. O RFC 4180 nada diz sobre tipos de dados — um campo CSV é texto, e o formato não tem maneira de dizer outra coisa. As aspas indicam ao leitor onde o campo começa e acaba; uma vez desembrulhado, o que o leitor decidir que o conteúdo significa depende só dele, e o palpite de uma folha depende da sua configuração regional tanto como da cadeia. Não conte com a sorte: use a via de importação de texto da folha em vez de fazer duplo clique no ficheiro, e ponha as colunas de início e fim em Texto antes de os dados chegarem. Verifique depois uma marca na folha, antes de editar seja o que for, e confirme que continua a dizer 00:00:01,000 e não um valor alinhado à direita com outra forma. Se tiver sido convertida, feche sem gravar e importe de novo: reparar uma coluna de tempos estragados custa muito mais do que importá-la bem à primeira.
- Posso acrescentar, apagar ou reordenar linhas na folha de cálculo?
- Adicione e apague à vontade; reordene também à vontade, desde que guarde a coluna de índice. A importação lê essa coluna: quando cada linha tem o seu próprio inteiro distinto, a saída é reconstruída pela ordem do índice e um aviso indica que as linhas foram repostas em sequência, de maneira que uma folha ordenada alfabeticamente por texto para agrupar falas parecidas produz na mesma um ficheiro de legendas por ordem cronológica. Se algumas linhas perderam o número, ou se duas linhas partilham o mesmo, a coluna não é de confiança: a ferramenta mantém então a ordem por que as linhas aparecem e di-lo em vez de adivinhar. Apagar uma linha não tem risco: a saída é renumerada a partir de um, quaisquer que sejam os índices que restem. A importação assinala agora também uma legenda cujo fim precede o início — uma linha que vai de 00:00:09,000 a 00:00:04,000 continua a ser escrita tal e qual, mas é contada e nomeada em vez de passar em silêncio. Os tempos podem ser introduzidos em segundos em vez de códigos de tempo, o que dá jeito ao acrescentar uma legenda à mão: 5.5 e 8.2 são lidos como 00:00:05,500 e 00:00:08,200.
Artigos que podem interessar-lhe
Todos os guias →Ferramentas relacionadas
O SubRip não tem especificação. A Biblioteca do Congresso descreve-o como parcialmente documentado e mal normalizado, portanto o que conta como ficheiro .srt válido é decidido pelo leitor, pelo codificador ou pela plataforma que o lê, e dois deles acabarão por divergir. Tudo o que aqui se descreve foi verificado na saída real da ferramenta e não numa norma, porque este formato não tem nenhuma. O WebVTT é diferente — tem uma especificação publicada pelo W3C — mas continua a ser um Candidate Recommendation Draft e não uma recomendação concluída. Guarde o ficheiro original, teste o ficheiro convertido no leitor ou no serviço de envio que tenciona mesmo usar antes de deitar fora o que quer que seja, e trate qualquer afirmação sobre o que fazem «todos os leitores», incluindo as desta página, como algo a confirmar no seu.
Fontes
- IETF — RFC 4180, Common Format and MIME Type for Comma-Separated Values (CSV) Files, October 2005, status Informational: each record is on a separate line delimited by CRLF, an optional header line may appear first, fields containing line breaks, double quotes or commas should be enclosed in double quotes, and a double quote inside such a field is escaped by preceding it with another double quote — and the memo says nothing at all about data types
- IANA — Media type registration for text/csv, whose reference is RFC 4180 — the registration that gives a CSV file its identity, and the counterpart to SubRip, which has no registered media type at all
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): gives the timecode as hours:minutes:seconds,milliseconds (00:00:00,000) — the comma before the milliseconds is why every timestamp exported to CSV is quoted — and records that the format has no character-encoding standard, so a parser must attempt charset detection
Detetaste um erro neste artigo?