De SRT para texto: obter uma transcrição limpa a partir de legendas
Publicado a 05/08/2026 · 13 min de leitura · Ferramentas para programadores
Daniel Okonkwo — Programador front-end e redator de Tecnologia na OneKitly
Desempenho web · Formatos de ficheiro
Verificado a partir de 3 fontes
Este conversor retira exatamente duas coisas: o número da legenda e a linha de tempos. Tudo o que está entre a linha de tempos e o separador em branco passa intacto, o que é uma decisão deliberada e também aquilo que mais gente entende ao contrário. Dê-lhe um ficheiro de legendas e as etiquetas de itálico sobrevivem como <i>…</i>, as de cor como <font color="#ffff00">, a ordem de posição como {\an8}, as descrições sonoras como [GAIVOTAS], os travessões de diálogo como um hífen seguido de espaço, e num ficheiro WebVTT as etiquetas de voz sobrevivem como <v Roger Bingham>, junto com as de classe e as marcas em linha <00:00:07.500> usadas para realce palavra a palavra. O que trata por si, do lado WebVTT, é a estrutura à volta das legendas: o cabeçalho WEBVTT, os blocos de comentário NOTE, os blocos STYLE, os blocos REGION, os identificadores e a lista de definições depois da seta são todos descartados. A segunda coisa a saber é o que faz a opção de fusão. «Juntar cada legenda numa só linha» une as linhas dentro de uma legenda; nunca une uma frase repartida por duas legendas, e nada no ficheiro o permitiria — um corte de legenda decide quanto texto cabe no ecrã, não onde acaba a frase. Uma linha «A questão do porto» seguida de uma legenda «é que nunca chegou a gelar» sai em duas linhas nos dois modos. As legendas rolantes que repetem uma linha também não são depuradas. Conte com uma passagem de localizar e substituir para a marcação e uma releitura para as junções.
Retirar os números e as marcas de tempo é a metade fácil. A que decide se a transcrição se lê são as etiquetas de itálico, os travessões de diálogo, as descrições sonoras e as frases partidas em duas legendas — e este conversor deixa-lhe todas elas.
A metade fácil: números, tempos, linhas em branco
Um ficheiro SubRip são quatro coisas repetidas: um contador, uma linha de tempos, uma ou mais linhas de texto e uma linha em branco que fecha o bloco. Três dessas quatro são andaime. Retire-as e tem uma transcrição: é por aí que começa qualquer conversor de legendas para texto e é aí que todos acertam. Este lê cada bloco, avança até encontrar uma linha com a seta e guarda tudo o que se segue até à linha em branco. O contador é descartado esteja ou não em ordem, pelo que um ficheiro com números duplicados ou desordenados converte-se sem problema.
Uma consequência que convém conhecer: uma legenda sem texto conta na mesma como legenda. Alguns codificadores emitem um bloco vazio para tirar um rótulo do ecrã; o conversor encontra a sua linha de tempos, guarda o nada que se segue e a transcrição abre com duas linhas em branco antes da primeira frase a sério. Inofensivo, mas parece uma falha da sua exportação e não uma peculiaridade da origem, por isso vale a pena reconhecê-lo.
A metade difícil: tudo o que o conversor deixa ficar
O texto de legendas não é texto simples. O programa SubRip original suportava um pequeno conjunto de formatação herdada do HTML — negrito, itálico, sublinhado e cor — e essas etiquetas viajam com o ficheiro. As fansubs e os rips acrescentam mais: {\an8} para subir uma legenda ao topo do quadro quando colidiria com texto incrustado, e descrições sonoras entre parênteses retos como [GAIVOTAS] ou [MÚSICA], próprias da legendagem para surdos. Dois falantes numa mesma legenda marcam-se por convenção com um hífen e um espaço no início de cada linha. Nada disso é retirado aqui, e nada deveria ser retirado sem uma decisão sua: que uma transcrição conserve as suas descrições sonoras depende inteiramente de para que serve.
O WebVTT traz o seu próprio vocabulário, e o tratamento que o conversor lhe dá parte-se claramente em dois. A estrutura à volta das legendas é tratada: a linha de cabeçalho WEBVTT, os blocos de comentário NOTE, os blocos STYLE com CSS, os blocos REGION que definem zonas de deslocamento, o identificador opcional na linha acima dos tempos e a lista de definições que pode seguir a seta — alinhamento, posição, linha, região — são todos removidos, porque nunca estão dentro do corpo da legenda. A marcação dentro do corpo não é tratada de todo. Uma etiqueta de voz, que a especificação define como uma etiqueta de abertura v com uma anotação a nomear o falante, chega à sua transcrição como o texto literal <v Roger Bingham>. As etiquetas de classe chegam como <c.yellow>…</c>. O realce palavra a palavra chega como marcas nuas do tipo <00:00:07.500> plantadas no meio de uma frase.
Limpar isso é um trabalho de localizar e substituir e leva um minuto, mas faça-o pela ordem certa. Retire primeiro as etiquetas emparelhadas, porque apagar só os sinais de menor e maior deixaria para trás texto de atributo órfão. Decida depois o que fazer com os parênteses retos: conserve-os para uma transcrição de acessibilidade, retire-os para uma fonte de tradução. Decida por último sobre os travessões, que levam informação real numa legenda a duas vozes e são puro ruído numa de uma só. Só depois disso vale a pena ler à procura do sentido.
Uma frase, duas legendas: a junção que nenhuma ferramenta pode fazer por si
As legendas cortam-se onde acaba o ecrã, não onde acaba a frase. Uma mesma oração espalha-se frequentemente por duas legendas, e na transcrição isso dá duas linhas que se leem como fragmentos. O conversor oferece uma opção de fusão, e convém ser preciso sobre o que funde: a caixa une as linhas dentro de uma legenda, de modo que uma legenda de duas linhas passa a uma. Não une, nem pode unir, de uma legenda para outra. Testado num ficheiro cuja primeira legenda diz «A questão do porto» e a segunda «é que nunca chegou a gelar», os dois modos devolvem duas linhas separadas.
Não é tanto um defeito como um limite da entrada. Nada num ficheiro SubRip marca onde acaba uma frase; o único sinal disponível é a pontuação e as maiúsculas do próprio texto, e ambas são pouco fiáveis de uma língua para outra. A heurística que funciona bastante bem à mão é simples: junte uma legenda à anterior quando essa anterior não termina em ponto, interrogação, exclamação ou aspa de fecho, e quando a seguinte não começa por maiúscula nem por travessão de diálogo. Aplicada por uma máquina, essa regra destrói os substantivos alemães, as abreviaturas e as reticências; aplicada por um leitor que conhece a língua, leva uns minutos numa transcrição de longa-metragem.
A outra confusão recorrente vem da legendagem em direto. As legendas de difusão costumam rolar: uma linha aparece em baixo e depois sobe quando chega a seguinte, e o codificador escreve os dois estados como legendas distintas, de modo que a mesma frase figura duas ou três vezes seguidas no ficheiro. O conversor não elimina duplicados — não tem por que fazê-lo, já que uma fala realmente repetida também é possível — pelo que uma transcrição de um direto pode sair quase o dobro do comprimento devido. Resolver isso exige uma releitura, e é o melhor argumento para pedir a quem lhe dá o ficheiro a versão que aparece de uma vez em vez da versão rolante.
SRT ou VTT: o mesmo conversor duas vezes
Há dois conversores neste sítio, um para SubRip e outro para WebVTT, e na prática comportam-se de forma idêntica. Ambos leem blocos, ambos ignoram o que não tem linha de tempos, ambos descartam os blocos NOTE e STYLE, ambos aceitam uma vírgula ou um ponto antes dos milissegundos, e ambos aceitam uma marca com ou sem campo de horas. A única diferença formal é que o de WebVTT reconhece e salta pelo nome o bloco de cabeçalho WEBVTT — e o de SubRip descarta-o na mesma, porque um bloco de cabeçalho não contém linha de tempos e por isso nunca chega a ser uma legenda. Testados lado a lado sobre o mesmo ficheiro WebVTT, os dois produzem uma saída idêntica byte a byte.
Isso é cómodo mais do que descuidado: pode colar qualquer dos dois formatos em qualquer das duas páginas e obter a mesma transcrição, que é o que queria. Também significa que nenhuma das duas páginas lhe dirá que o seu ficheiro está mal formado. Se numa linha de tempos faltar a seta ou estiver mal escrita, todo esse bloco desaparece em silêncio da saída em vez de provocar um erro, e o único sintoma é uma contagem de legendas inferior à esperada. A contagem aparece por baixo da caixa de entrada; compare-a com o último número do seu ficheiro antes de confiar no resultado.
| Elemento | Como aparece no ficheiro | O que faz o conversor | O que lhe fica a si |
|---|---|---|---|
| Número e linha de tempos | 1 / 00:00:01,000 --> 00:00:04,000 | Retirados | Nada |
| Cabeçalho WebVTT, blocos NOTE, STYLE, REGION | WEBVTT / NOTE Transcrito a 11-02-2026 | Retirados | Nada |
| Identificador e definições de legenda | hello-1 / align:start position:10% | Retirados | Nada |
| Etiquetas de itálico, negrito e cor | <i>…</i>, <b>…</b>, <font color="#ffff00">…</font> | Conservadas tal e qual | Retire as etiquetas emparelhadas antes dos sinais |
| Ordem de posição e descrições sonoras | {\an8}, [GAIVOTAS], [MÚSICA] | Conservadas tal e qual | Apague a ordem; decida sobre os parênteses retos |
| Travessões de diálogo e etiquetas de voz | - Viste aquilo? / <v Roger Bingham> | Conservados tal e qual | Converta-os nas indicações de falante que quiser |
| Uma frase repartida por duas legendas | A legenda 1 corta a meio da oração, a 2 começa em minúscula | Duas linhas separadas, nos dois modos | Junte à mão: sem pontuação no fim, sem maiúscula no início |
Perguntas frequentes
- Retira as etiquetas de itálico, os travessões de diálogo e os rótulos [MÚSICA]?
- Não. Retira o número da legenda e a linha de tempos, e deixa passar o resto exatamente como está escrito. Testado num ficheiro que reúne todos os casos comuns, a saída continua a conter <i>…</i>, <b>…</b>, <font color="#ffff00">…</font>, a ordem de posição de tipo ASS {\an8}, a descrição sonora [GAIVOTAS], os travessões de dois falantes no início de cada linha e — com entrada WebVTT — a etiqueta de voz <v Roger Bingham>, as de classe como <c.yellow>…</c> e as marcas em linha como <00:00:07.500>. É uma decisão defensável, porque uma transcrição conservar ou não as descrições sonoras depende de para que serve: um registo de acessibilidade quere-as, uma fonte de tradução não. Mas implica que a conversão é um passo de dois. Reserve depois uma passagem de localizar e substituir, e retire pares de etiquetas completos e não só os sinais, ou ficará com texto de atributo órfão como color="#ffff00" no meio da sua prosa.
- Uma frase corre por duas legendas. Como a ponho numa só linha?
- Não com a caixa de fusão: essa une as linhas dentro de uma legenda, não duas legendas entre si, e o rótulo presta-se a confusão. Verificado num ficheiro em que a legenda 1 corta a meio da oração e a 2 a continua: tanto o modo por blocos como o fundido devolvem duas linhas separadas. A junção tem de ser sua, porque nada no ficheiro a assinala. A regra que funciona é negativa dos dois lados: junte uma legenda à anterior quando essa anterior não termina em ponto, interrogação, exclamação, dois pontos ou aspa de fecho, e quando a atual não começa por maiúscula nem por travessão de diálogo. Faça-o em releitura manual e não em script: abreviaturas, reticências e, em alemão, substantivos com maiúscula quebram-na com frequência bastante para que uma passagem automática custe mais a reparar do que poupa.
- Que diferença há entre o conversor de SRT e o de VTT?
- Em comportamento observável, nenhuma. São a mesma rotina com um sinalizador, e esse sinalizador só faz com que a versão WebVTT reconheça pelo nome o bloco de cabeçalho WEBVTT, que a versão SubRip descarta na mesma porque esse bloco não tem linha de tempos e por isso nunca chega a ser uma legenda. Ambas descartam os blocos NOTE e STYLE, ambas aceitam uma vírgula ou um ponto antes dos milissegundos, ambas aceitam uma marca com ou sem campo de horas, e ambas ignoram o que segue a seta numa linha de tempos. Com o mesmo ficheiro WebVTT, as duas páginas devolvem texto idêntico. Use a página que corresponde ao seu ficheiro, por descanso mental, mas não espere que a página VTT limpe as etiquetas de voz nem que a página SRT recuse um .vtt: nenhuma das coisas acontece. A única coisa a vigiar em ambas é a contagem de legendas por baixo da caixa de entrada. Uma linha de tempos malformada faz desaparecer todo o seu bloco sem erro, e uma contagem inferior ao último número do seu ficheiro é a única pista.
- Porque é que a minha transcrição repete a mesma linha duas ou três vezes?
- Porque a origem é legendagem rolante. Em direto, uma linha aparece na parte de baixo de uma janela de duas ou três linhas e depois sobe quando chega a seguinte, e o codificador regista cada estado da janela como uma legenda própria. A mesma frase figura por isso em legendas consecutivas, às vezes três vezes, e o ficheiro é um registo fiel do que estava no ecrã em cada momento mais do que do que foi dito. O conversor não elimina duplicados, e não deveria adivinhar: uma fala realmente repetida por efeito tem exatamente o mesmo aspeto no ficheiro. Retirar as repetições é uma releitura — ordenar as linhas para as encontrar destrói a sequência, portanto faça-o por ordem. Se puder influenciar a origem, peça legendas que apareçam de uma vez: cada frase é escrita uma só vez e a transcrição sai limpa.
- Quero o texto mas também os tempos. O que devo usar?
- Este conversor não, que retira os tempos por conceção e não oferece maneira de os conservar. Use antes o conversor de SRT para CSV: escreve uma linha por legenda com índice, início, fim e texto, de modo que os tempos ocupam as suas próprias colunas e o texto continua legível e pesquisável. Essa forma é também a que quer se a transcrição vai ser editada ou traduzida por outra pessoa, porque mantém cada linha ligada ao momento a que pertence e pode voltar a ser convertida num ficheiro de legendas depois. O texto simples é a saída certa quando o destino é prosa — um resumo, um índice de pesquisa, um documento — e a errada assim que alguém a jusante precisar de saber quando algo foi dito.
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
- W3C — WebVTT: The Web Video Text Tracks Format, Candidate Recommendation Draft of 20 May 2026 — defines the WEBVTT header, NOTE comment blocks, STYLE blocks, REGION definition blocks, the optional cue identifier, the cue settings list after the arrow, and the cue voice span whose start tag v carries an annotation naming the speaker
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): describes the four components of a cue — counter, start and end time separated by two hyphens and a right angle bracket, one or more lines of text, blank line — and records that the SubRip software supported a limited set of text formatting derived from HTML tags including bold, italic, underline and colour
- Matroska — Subtitles technical page: when SRT is muxed into Matroska the cue text is converted to UTF-8 as S_TEXT/UTF8 and placed in the block, and because there are no general settings for SRT the CodecPrivate is left blank — the container carries the text and the timing, and nothing else
Detetaste um erro neste artigo?