Convierta subtítulos SRT a WebVTT en línea
Convierta un archivo de subtítulos SRT en WebVTT apto para reproductores web: 00:00:01,250 pasa a 00:00:01.250, se añade la cabecera WEBVTT y los subtítulos de varias líneas quedan intactos, con el recuento de bloques. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Transforme texto de subtítulos SubRip en WebVTT compatible con los estándares sin sustituir signos ni reconstruir bloques manualmente. El conversor añade el encabezado WEBVTT obligatorio, cambia las comas de las marcas SRT por puntos decimales, conserva los subtítulos multilínea e indica cuántas entradas produjo. Cada línea temporal se valida antes de devolver el resultado, de modo que una entrada dañada genera un error claro y no un archivo poco fiable.
Incorpore subtítulos SRT a un flujo WebVTT
SRT y WebVTT se parecen, pero no son archivos intercambiables. Los reproductores web suelen exigir que el archivo empiece con la firma WEBVTT, mientras que SRT acostumbra a comenzar con una entrada numerada. También emplean separadores de milisegundos distintos: SRT usa una coma y WebVTT, un punto.
Pegue o envíe el documento SRT completo en el campo srt. El conversor normaliza los finales de línea habituales, elimina una marca de orden de bytes Unicode inicial, lee cada entrada en orden y genera un documento WebVTT. Las líneas permanecen en su orden original, incluso en subtítulos de varias líneas.
Los índices numéricos se interpretan como estructura y no se copian. La respuesta contiene el texto convertido en vtt y el número de entradas para facilitar comprobaciones automatizadas.
Detecte tiempos incorrectos antes de publicar
Los fallos pueden ser discretos: una entrada puede usar un punto donde SRT exige una coma, omitir un dígito de milisegundos, perder la flecha o incluir minutos imposibles. Esta capacidad valida cada línea con el formato HH:MM:SS,mmm --> HH:MM:SS,mmm. Los minutos y segundos deben estar entre 00 y 59, los milisegundos deben tener exactamente tres dígitos y el final no puede preceder al inicio.
Si una entrada incumple estas reglas, toda la solicitud devuelve un error de entrada que identifica la entrada afectada, en vez de producir silenciosamente un archivo parcial. También se rechazan textos vacíos e índices no numéricos inesperados. No se adivinan tiempos ambiguos ni se reparan valores dañados, porque una suposición podría desplazar el diálogo a otra escena.
Corrija la entrada indicada y vuelva a enviar el documento.
Use resultados deterministas en sitios y automatizaciones
El texto WebVTT devuelto está listo para guardarse con extensión .vtt y servirse con el tipo text/vtt. En una página de vídeo HTML, haga referencia al archivo desde un elemento track y seleccione el idioma y la etiqueta apropiados. La conversión es determinista: una entrada idéntica produce la misma salida, con finales Unix, una línea vacía tras el encabezado, separaciones entre entradas y una nueva línea final.
Por ello funciona bien con control de versiones, compilaciones repetibles, migraciones y pruebas. La capacidad solo convierte la estructura; no traduce diálogos, transcribe audio, reajusta tiempos, combina subtítulos solapados ni inspecciona vídeos.
Qué puede hacer con ella
Prepare subtítulos para vídeo HTML5
Convierta una entrega SRT del editor a WebVTT antes de enlazarla desde un elemento track de HTML.
Valide exportaciones en CI
Detenga la compilación si una entrada tiene una marca temporal incorrecta, en lugar de publicar subtítulos rotos.
Migre una biblioteca de subtítulos
Genere recursos WebVTT estables desde textos SRT existentes dentro de una migración multimedia repetible.
Preguntas frecuentes
¿Qué modifica la conversión?
Añade el encabezado WEBVTT, cambia las comas de milisegundos por puntos, elimina índices numéricos SRT y conserva el texto.
¿Qué formato temporal se acepta?
Cada entrada debe usar HH:MM:SS,mmm --> HH:MM:SS,mmm, con minutos y segundos válidos y tres dígitos de milisegundos.
¿Qué ocurre si una línea temporal está mal formada?
La solicitud falla con un error de entrada que identifica la entrada SRT. No se devuelve un documento WebVTT parcial.
¿Se conservan los subtítulos multilínea?
Sí. Se mantiene en el mismo orden cada línea posterior a la marca temporal de la entrada.
¿La herramienta traduce o reajusta tiempos?
No. Solo cambia el formato contenedor; el texto y los tiempos válidos permanecen iguales.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"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."
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitle_srt_to_vtt",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Use resultados deterministas en sitios y automatizaciones
Puede probarla gratis en el navegador o llamar a la API por $0.002 por elemento cuando su sistema editorial necesite automatizar la conversión.
Preguntas técnicas
¿Cuánto cuesta la conversión mediante API?
Cada solicitud API cuesta $0.002 por elemento. La versión del navegador es gratuita en esta página.