Converta legendas SRT para WebVTT online
Transforme um arquivo de legendas SRT em WebVTT aceito pelos players da web: 00:00:01,250 vira 00:00:01.250, o cabeçalho WEBVTT é incluído e as legendas de várias linhas ficam intactas, com a contagem de blocos. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Transforme texto de legendas SubRip em WebVTT compatível com os padrões sem trocar pontuação nem reconstruir blocos manualmente. O conversor inclui o cabeçalho WEBVTT obrigatório, troca as vírgulas dos tempos SRT por pontos decimais, preserva legendas com várias linhas e informa quantas entradas foram geradas. Cada linha de tempo é validada antes do resultado, portanto uma entrada danificada produz um erro claro em vez de um arquivo instável.
Leve legendas SRT para um fluxo WebVTT
SRT e WebVTT são parecidos, mas não são arquivos intercambiáveis. Players na web normalmente esperam um arquivo iniciado pela assinatura WEBVTT, enquanto o SRT costuma começar com uma entrada numerada. Os formatos também usam separadores diferentes para milissegundos: SRT usa vírgula e WebVTT usa ponto.
Cole ou envie o documento SRT completo no campo srt. O conversor normaliza terminações de linha comuns, remove uma marca de ordem de bytes Unicode inicial, lê as entradas na sequência e gera um documento WebVTT. As linhas das legendas mantêm a ordem original, inclusive quando há duas ou mais linhas.
Os índices numéricos são tratados como estrutura e não são copiados. A resposta traz o texto convertido em vtt e a quantidade de entradas para verificações rápidas em tarefas automatizadas.
Encontre tempos inválidos antes da publicação
Falhas em legendas podem ser discretas: uma entrada pode usar ponto onde o SRT exige vírgula, omitir um dígito dos milissegundos, perder a seta ou conter minutos impossíveis. Esta capacidade valida cada linha no formato HH:MM:SS,mmm --> HH:MM:SS,mmm. Minutos e segundos devem ficar entre 00 e 59, os milissegundos precisam ter exatamente três dígitos e o final não pode ocorrer antes do início.
Se uma entrada violar as regras, toda a solicitação retorna um erro que identifica a entrada afetada, sem produzir silenciosamente um arquivo parcial. Textos vazios e índices não numéricos inesperados também são recusados. O conversor não tenta adivinhar tempos ambíguos ou reparar valores corrompidos, pois isso poderia deslocar a fala para outra cena.
Corrija a entrada indicada e envie o documento novamente.
Use uma saída determinística em sites e automações
O texto WebVTT retornado está pronto para ser salvo com a extensão .vtt e servido com o tipo text/vtt. Em uma página de vídeo HTML, referencie o arquivo em um elemento track e defina o idioma e o rótulo adequados. A conversão é determinística: entradas idênticas geram saídas idênticas, com finais de linha Unix, uma linha vazia após o cabeçalho, separação entre entradas e uma nova linha final.
Isso favorece controle de versão, builds repetíveis, migrações e testes. A capacidade converte somente a estrutura; não traduz falas, transcreve áudio, reajusta tempos, combina legendas sobrepostas nem examina vídeos.
Casos de uso
Prepare legendas para vídeo HTML5
Converta uma entrega SRT do editor em WebVTT antes de vinculá-la a um elemento track do HTML.
Valide exportações de legenda no CI
Interrompa o build quando uma entrada tiver um tempo inválido, em vez de publicar legendas com defeito.
Migre uma biblioteca de legendas
Gere recursos WebVTT estáveis a partir de textos SRT existentes durante uma migração de mídia repetível.
Perguntas frequentes
O que a conversão altera?
Ela inclui o cabeçalho WEBVTT, troca vírgulas de milissegundos por pontos, remove índices SRT numéricos e preserva o texto.
Qual formato de tempo é aceito?
Cada entrada deve usar HH:MM:SS,mmm --> HH:MM:SS,mmm, com minutos e segundos válidos e três dígitos de milissegundos.
O que acontece com uma linha de tempo inválida?
A solicitação falha com um erro que identifica a entrada SRT. Nenhum documento WebVTT parcial é retornado.
Legendas com várias linhas são preservadas?
Sim. Todas as linhas após a marcação de tempo permanecem na mesma ordem.
A ferramenta traduz ou reajusta as legendas?
Não. Ela altera apenas o formato do contêiner; o texto e os tempos válidos permanecem iguais.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/video/subtitle-srt-to-vtt \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}'const res = await fetch("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/subtitle-srt-to-vtt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"srt":"1\\n00:00:01,250 --> 00:00:03,500\\nWelcome to the presentation.\\n\\n2\\n00:00:04,000 --> 00:00:06,125\\nLet us begin."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"srt":"1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/subtitle-srt-to-vtt", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"srt": "1\n00:00:01,250 --> 00:00:03,500\nWelcome to the presentation.\n\n2\n00:00:04,000 --> 00:00:06,125\nLet us begin."
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitle_srt_to_vtt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Use uma saída determinística em sites e automações
Você pode testar gratuitamente no navegador ou chamar a API por US$ 0,002 por item quando seu sistema editorial precisar automatizar documentos de legenda.
Perguntas técnicas
Quanto custa a conversão pela API?
Cada solicitação da API custa US$ 0,002 por item. A versão no navegador é gratuita nesta página.