Traducir subtítulos
Un archivo de subtítulos en realidad son dos cosas unidas: una pista de tiempo que debe permanecer perfectamente sincronizada con la imagen, y un diálogo que debe leerse con naturalidad en otro idioma. Este endpoint traduce solo la segunda parte, así que los subtítulos siguen cayendo en el cuadro correcto después de traducir, en vez de irse desfasando línea por línea.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué los archivos de subtítulos no son simples archivos de texto
Si pasa un .srt crudo por un traductor de texto genérico, es fácil terminar con una marca de tiempo reformateada, un número de subtítulo fuera de secuencia o un corte de línea que cambia cuánto tiempo permanece un subtítulo en pantalla. Nada de eso aparece como un error; aparece como un subtítulo que llega tarde o que se queda después de que el actor ya siguió hablando. translate.srt analiza primero la estructura de cada bloque, separando el tiempo del diálogo, así que la traducción solo toca lo que el espectador lee, nunca cuándo lo lee.
SRT, VTT y lo que tienen en común
El formato .srt de SubRip se remonta a una herramienta de extracción de DVD de principios de los años 2000 y se convirtió en el estándar de facto por su simplicidad: un número de bloque, una marca de inicio y fin, y una o más líneas de texto. WebVTT (.vtt) surgió de esa misma idea pensada para video web, agregando soporte de estilo y posicionamiento en pantalla, y es hoy lo que la mayoría de navegadores esperan de forma nativa. Ambos formatos separan el tiempo del texto de la misma manera, que es exactamente el límite que este endpoint respeta: los números de bloque y las marcas de tiempo pasan sin cambios, y solo se traduce el texto hablado.
Largo de línea y velocidad de lectura
Los idiomas traducidos rara vez tienen la misma longitud que el original; el diálogo en español suele ser más largo que el inglés del que se traduce, y un subtítulo demasiado largo para leerse en el tiempo que su bloque permite se vuelve inútil sin importar qué tan precisa sea la traducción. El texto se traduce con convenciones razonables de longitud de línea y velocidad de lectura, buscando que los subtítulos se puedan leer dentro de su ventana de tiempo en vez de producir una traducción correcta que nadie alcanza a terminar de leer.
Dónde encaja en un flujo de video
Una plataforma de video que publica en varios idiomas normalmente genera una sola transcripción en el idioma de origen y luego necesita ese mismo archivo traducido a cada mercado, sin resincronizar cada versión a mano. Enviar el .srt o .vtt de origen a /translate/srt una vez por idioma de destino y recibir de vuelta un archivo con la misma sincronización de bloques mantiene el video, el audio y los subtítulos alineados sin importar cuántos idiomas se agreguen. Como el precio es por solicitud más por palabra, y no por minuto de duración, una demostración corta con diálogo escaso cuesta mucho menos traducir que una clase densa de dos horas, en proporción directa a lo que realmente se dijo.
Qué puede hacer con ella
Localización de plataforma de streaming
Una plataforma de video traduce el archivo .srt de un episodio ya publicado a cinco idiomas, publicando todas las pistas de subtítulos el mismo día sin resincronizar ningún bloque.
Subtítulos de charlas de conferencia
Un organizador de eventos traduce subtítulos .vtt de sesiones grabadas de conferencia para que los asistentes internacionales puedan ver con subtítulos en su propio idioma.
Subtítulos de curso en línea
Un curso en línea traduce los archivos .srt de sus clases a los idiomas de las regiones donde tiene inscritos, manteniendo cada marca de tiempo alineada con el video grabado.
Subtítulos de video de marketing
Una marca traduce subtítulos .vtt cortos de demostración de producto para redes sociales al idioma de cada mercado objetivo antes de un lanzamiento coordinado.
Preguntas frecuentes
¿Cómo traduzco subtítulos con la API?
Envíe el archivo .srt o .vtt y el idioma de destino por POST a /translate/srt, guarde el task_id devuelto y obtenga el archivo de subtítulos traducido por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para traducir subtítulos?
No, no hay plan gratuito ni prueba; cuesta $0.003 por solicitud más $0.0135 por cada 1000 palabras, y una tarea fallida nunca se cobra.
¿Se desplazan las marcas de tiempo después de traducir?
No, los números de bloque y las marcas de tiempo se conservan exactamente igual que en el archivo original; solo se traduce el texto del diálogo.
¿Soporta tanto .srt como .vtt?
Sí, se admiten tanto archivos SubRip (.srt) como WebVTT (.vtt), incluyendo las marcas de estilo y posicionamiento de VTT, que pasan sin cambios.
¿Las líneas traducidas caben en el tiempo de subtítulo existente?
La traducción se hace teniendo en cuenta convenciones razonables de longitud de línea y velocidad de lectura, buscando que los subtítulos sigan siendo legibles dentro de su ventana de tiempo existente.
¿Puedo traducir una temporada o lista de reproducción completa por lote?
Sí, envíe una solicitud asíncrona por cada archivo de subtítulos y por cada idioma de destino, y reciba cada resultado por separado a medida que termine.
¿Ya está disponible este endpoint?
Sí, /translate/srt está disponible y aceptando solicitudes en este momento.
¿Se conservan mis archivos de subtítulos después de traducirlos?
No, los archivos de origen y los traducidos se eliminan después del período de retención y nunca se usan para entrenamiento.
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, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/translate/srt \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/translate/srt", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/translate/srt",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/translate/srt", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/translate/srt", 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
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "translate.srt",
"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_tokens | 20000 |
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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |