Open source
multilingual-subtitles
Subtítulos en veinte idiomas, desde un solo archivo de vídeo, con un único comando.
Una herramienta local de línea de comandos. Extrae el audio, lo transcribe con una marca de tiempo en cada palabra, genera un archivo SRT válido y luego traduce ese SRT a todos los idiomas que indiques. Los códigos de tiempo nunca se vuelven a escribir, en ningún idioma.
- Rol
- Autor
- Año
- 2026
- Stack
- Node sin dependencias de npm, ffmpeg, Mistral, AI Glot CLI
- Visitar
- Código fuente
La transcripción es la mitad que ya está resuelta
Hay una docena de herramientas que convierten un vídeo en un archivo de subtítulos. Lo que impide que la mayoría de los canales usen más de un idioma es la otra mitad: veinte idiomas suponen un día entero de escritura manual, por lo que nadie lo hace. Para esa mitad se ha creado esta herramienta, y es por eso que el nombre dice multilingüe en lugar de transcripción.
Palabras, no segmentos
El mismo endpoint de Mistral devuelve segmentos completos o palabras individuales al mismo precio. Un segmento puede ser un bloque de siete segundos de habla, lo cual es una frase y no un subtítulo: convertirlo en pistas implica adivinar en qué momento de esos siete segundos se dijo cada frase, y el cálculo falla. Con los tiempos por palabra, el generador de pistas agrupa lo que se lee bien, y cada pista sigue comenzando exactamente en la palabra que muestra.
Por qué un agente no debería traducir el SRT
Para un idioma, puede hacerlo. Para veinte, es la herramienta equivocada por tres razones: el modelo vuelve a escribir cada código de tiempo y acaba cometiendo un error, el archivo completo atraviesa la ventana de contexto una vez por idioma y pagas precios de generación por un trabajo mecánico. AI Glot lee SRT de forma nativa, mantiene la numeración y los códigos de tiempo byte por byte, y cuesta un crédito por cada tres palabras.
El coste de repetir el proceso
Nada de lo que ya hayas pagado. Un manifiesto guarda el ID del lote y el estado por idioma, por lo que se omiten los idiomas que ya están en el disco y los lotes que se crearon pero nunca se descargaron se reanudan en lugar de pagarse dos veces. Que un idioma falle no detiene a los demás.
One command, and the timecodes are never retyped
The pipeline is five steps, and only the third one is worth having an opinion about.
npm run subs -- run ~/Downloads/clip.mp4 --to fr,de,ja- 1Extract the audioffmpeg, mono 16 kHz
- 2TranscribeEvery word gets a start and an end
- 3Build the cuesWhere the subtitle quality is decided
- 4Validate the SRTBefore anything is paid for
- 5TranslateOne batch per language, four at a time
Step three is lib/cues.mjs, and it is the whole file that makes the difference between a transcript and a subtitle. It breaks on sentence ends and on pauses over 0.6 seconds, holds each cue 1.2 seconds minimum without ever biting into the next one, and caps a cue at two lines of 42 characters and six seconds.
An agent doing itOne language at a time
- Retypes every timecode, and eventually mistypes one
- The whole file crosses the context window, once per language
- Generation prices for a mechanical job
- Nothing to resume if it stops halfway
A batch translatorTwenty at a time
- Numbering and timecodes kept byte for byte
- Four batches in flight, none of it through a model context
- One credit per three words
- A manifest, so a rerun pays for nothing twice
50idiomas, ordenados por audiencia de YouTube
34créditos por idioma en un clip de 101 palabras
0dependencias de npm