Subtitular un vídeo
Se envía un video y se recibe un archivo de subtítulos sincronizado con la imagen: este endpoint transcribe el audio hablado y entrega un archivo de subtítulos estándar. Resuelve una tarea constante y poco vistosa —cursos, demos de producto, entrevistas— sin que nadie tenga que escribir marcas de tiempo a mano.
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.
Quién se topa con esto una y otra vez
Cualquiera que publique video termina necesitando texto debajo: una plataforma de cursos obligada a cumplir reglas de accesibilidad, un equipo de marketing que sabe que la mayoría ve redes sociales sin sonido, un podcaster que convierte una entrevista grabada en clips. Subtitular a mano es lento y fácil de arruinar en nombres propios y tiempos exactos, justo el tipo de trabajo repetitivo y preciso que conviene delegar a una llamada de API en lugar de a una persona con cronómetro.
Qué pasa realmente con el archivo
Se envía el video (o una URL accesible) a POST /video/subtitles, la tarea entra en cola y de inmediato se recibe un task_id. Detrás de escena la pista de audio se transcribe y se segmenta en cortes de subtítulo con marcas de entrada y salida, y luego se empaqueta como archivo de subtítulos. Como el trabajo es asíncrono, un clip de dos minutos y una clase de dos horas caben en el mismo flujo: se le avisa cuando realmente termina, sin mantener una conexión abierta esperando.
Una nota rápida sobre el formato
Los archivos de subtítulos son más antiguos de lo que parece: el SRT nació como efecto secundario de una herramienta de ripeo de Windows a fines de los años noventa y sobrevivió simplemente porque es texto plano que cualquier reproductor entiende, mientras que WebVTT llegó después pensado específicamente para la web y el video en HTML5. Ambos linajes se reducen a la misma idea —un número de secuencia, una marca de inicio y fin, y una línea de texto—, por lo que la salida encaja sin fricción en editores de video, plataformas educativas y reproductores de navegador.
Dónde encaja en un flujo automatizado
Conviene pensar en este endpoint como una sola etapa: entra video crudo, sale un archivo de subtítulos, y lo que ocurra después depende de usted. Ese archivo puede subirse junto al video como pista opcional activable, pasar a un paso de traducción para versiones en varios idiomas, o alimentar directamente una etapa de incrustado cuando la plataforma de destino no admite pistas de subtítulos separadas. La idea central es que subtitular deja de ser un cuello de botella manual y se convierte en un paso predecible y facturable dentro de una cadena de publicación ya automatizada.
Nota honesta sobre el despliegue
Este endpoint está en su fase final de despliegue. La ruta, el precio y la forma del trabajo descritos aquí son los definitivos; en cuanto abra tráfico, las solicitudes que fallen antes de completarse nunca se cobran.
Qué puede hacer con ella
Plataformas de cursos que cumplen accesibilidad
Un proveedor de e-learning procesa cada clase nueva por la noche para que los subtítulos estén listos antes de publicar el módulo, sin que una persona transcriba cada grabación a mano.
Clips para redes vistos sin sonido
Un equipo de marketing subtitula video corto de forma automática para que el mensaje llegue a quienes navegan en silencio, sin que un editor dedicado haga el trabajo de marcas de tiempo publicación por publicación.
De podcast en video a clips distribuibles
Un productor de podcast convierte entrevistas grabadas en video en clips subtitulados para distribución, generando el archivo de subtítulos como primer paso automático antes de que un editor recorte los mejores momentos.
Archivos multilingües
Una biblioteca de medios genera un archivo de subtítulos base por video y lo pasa a un flujo de traducción para producir varias pistas de idioma a partir de una sola transcripción.
Preguntas frecuentes
¿Qué formato entrega la api generar subtitulos de video?
Entrega un archivo de subtítulos con marcas de tiempo (estilo SRT, con entrada y salida por corte) que funciona como pista opcional activable en reproductores y editores compatibles.
¿Es gratis esta api generar subtitulos de video?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cómo recibo los subtítulos terminados?
El resultado llega mediante un webhook firmado cuando termina la tarea, o se puede descargar desde un enlace firmado válido por 24 horas.
¿Puedo subtitular un video de dos horas en una sola solicitud?
Sí: como la tarea es asíncrona y devuelve un task_id de inmediato, la duración del video no obliga a mantener una conexión abierta; se avisa cuando la transcripción concluye.
¿Necesito grabar los subtítulos en la imagen?
No, este endpoint genera un archivo de subtítulos aparte. Si la plataforma de destino no admite pistas de subtítulos separadas, se puede combinar con el endpoint de incrustar subtítulos.
¿Está el endpoint aceptando solicitudes ahora mismo?
Está terminando su despliegue final; la ruta, el precio y el comportamiento aquí descritos son definitivos y pronto empezará a aceptar solicitudes.
¿Qué pasa con mi video después de procesarlo?
El archivo se elimina al vencer el período de retención y nunca se usa para entrenar modelos; los resultados se entregan de forma privada por webhook o enlace firmado.
¿Puedo usarlo en lote sobre una biblioteca de videos?
Sí, cada llamada es una tarea asíncrona independiente identificada por su propio task_id, así que encolar cientos de videos por el mismo endpoint es cuestión de repetir la solicitud, no un modo especial de lote.
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/video/subtitles \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":"https://ejemplo.com/audio.mp3"}'const res = await fetch("https://api.kit.forhosting.com/video/subtitles", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"audio": "https://ejemplo.com/audio.mp3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/subtitles",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"audio": "https://ejemplo.com/audio.mp3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/subtitles", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"audio":"https://ejemplo.com/audio.mp3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"audio":"https://ejemplo.com/audio.mp3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/subtitles", 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
{
"audio": "https://ejemplo.com/audio.mp3"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.subtitles",
"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. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |