Transcribir y subtitular vídeo con Whisper en tu propio equipo
Cómo pasar audio a texto y generar subtítulos sin subir nada a la nube: modelos de Whisper, velocidad según hardware y cómo encajarlo en tu flujo de trabajo.
Grabas una entrevista de cuarenta minutos y necesitas el texto completo. Puedes subirla a un servicio online, esperar y confiar en lo que hagan con ese archivo, o puedes transcribir vídeo con Whisper en local y que el audio no salga nunca de tu disco. Aquí tienes cómo montarlo, qué modelo elegir según tu equipo y en qué casos te va a dejar tirado.
Qué es Whisper y por qué funciona tan bien
Whisper es un modelo de reconocimiento de voz que OpenAI publicó como código abierto en 2022. Lo entrenaron con cientos de miles de horas de audio de internet, en decenas de idiomas y con ruido, acentos y calidad de grabación muy variables. Ese desorden es justo lo que lo hace útil: aguanta un micrófono de portátil, una llamada comprimida o una charla grabada desde el fondo de una sala.
Lo importante para ti es que los pesos están publicados. Te los descargas una vez y el modelo se ejecuta en tu máquina, sin cuenta, sin límite de minutos y sin conexión una vez instalado. No es una demo recortada de una versión de pago: es el modelo entero.
Whisper hace dos tareas. Transcribe (audio a texto en el mismo idioma) y traduce, pero la traducción va siempre hacia el inglés. Si necesitas subtítulos en español de un vídeo en alemán, Whisper te da el alemán transcrito o el inglés traducido, y el paso al español lo tienes que hacer con otra herramienta.
El círculo completo: descargar y transcribir sin que nada salga de tu equipo
Aquí es donde encaja el flujo entero. Con Daun te bajas el vídeo o solo su pista de audio a tu disco. Con Whisper lo conviertes en texto en esa misma máquina. En ningún momento el material pasa por un servidor ajeno ni queda en la cola de procesamiento de nadie.
Eso importa más de lo que parece cuando trabajas con material de clientes, con entrevistas bajo embargo o simplemente con contenido que todavía no has publicado. Los términos de servicio de los servicios online cambian, y conviene leer qué dicen sobre lo que pueden hacer con los archivos que subes. En local ese debate no existe.
Y encaja con el resto de piezas que probablemente ya tengas montadas. Si has seguido el camino de instalar una IA en local con Ollama, ya tienes medio ecosistema hecho: Whisper te da el texto y el modelo local te lo resume, te saca los titulares o te escribe la descripción del vídeo. Todo en el mismo ordenador.
Qué modelo de Whisper elegir
Whisper viene en varios tamaños. Cuanto más grande, mejor transcribe y más lento va. Estas son las variantes que publica el proyecto:
| Modelo | Parámetros | VRAM aproximada | Velocidad relativa | Cuándo usarlo |
|---|---|---|---|---|
| tiny | 39 M | ~1 GB | ~10x | Pruebas rápidas, audio muy limpio en inglés |
| base | 74 M | ~1 GB | ~7x | Borradores, buscar un momento concreto |
| small | 244 M | ~2 GB | ~4x | Mínimo razonable para español |
| medium | 769 M | ~5 GB | ~2x | El punto dulce para la mayoría |
| large | 1550 M | ~10 GB | 1x | Máxima calidad, nombres propios, ruido |
| turbo | 809 M | ~6 GB | ~8x | Calidad cercana a large con mucha más velocidad |
La velocidad relativa es respecto a large, no una promesa de minutos. Lo que tardes de verdad depende de tu GPU, de la longitud del audio y de si usas una implementación optimizada.
Consejos prácticos sobre esta tabla:
- Para español,
smalles el suelo. Por debajo empieza a comerse palabras y a inventar terminaciones. mediumes donde la mayoría de la gente se queda. Buena precisión, tiempos de espera tolerables.turboes la opción interesante desde que existe: se acerca alarge-v3en transcripción con una fracción del cómputo. Su pega es que no está entrenado para la tarea de traducción, así que si vas a traducir al inglés quédate conlarge.- Existen variantes solo en inglés (
tiny.en,base.en,small.en,medium.en) que rinden mejor en ese idioma. Si tu material es en español, ignóralas.
Qué hardware necesitas de verdad
Whisper corre en CPU. Corre mal, pero corre. La diferencia entre CPU y GPU no es de un veinte por ciento, es de un orden de magnitud, y se nota en cuanto pasas de audios de cinco minutos.
| Equipo | Hasta dónde llegas | Qué esperar |
|---|---|---|
| Portátil sin GPU dedicada | tiny, base, small |
Un audio de una hora puede llevarte más que la propia hora |
| RTX con 6 a 8 GB de VRAM | small, medium y turbo justo |
Suficiente para trabajo diario |
| RTX con 12 GB | medium, turbo y large con margen ajustado |
La zona sensata para trabajar sin pensar |
| RTX con 16 a 24 GB | large-v3 sin apuros y varios trabajos en paralelo |
Para volumen alto o lotes |
| Mac con chip Apple Silicon | Casi todo vía whisper.cpp con Metal | Rinde bien sin GPU NVIDIA |
Si estás decidiendo compra y Whisper es solo una de las cosas que quieres mover, mira antes qué GPU NVIDIA RTX necesitas para IA en local, porque los requisitos de generación de imagen o de modelos de lenguaje son bastante más exigentes que los de transcripción. Whisper es de lo menos exigente que vas a ejecutar en esa tarjeta.
Un detalle que ahorra disgustos: la primera ejecución descarga los pesos del modelo. large ocupa varios gigas. Hazlo con la conexión buena y no en mitad de una entrega.
Instalación y primer comando
La instalación de referencia necesita Python y ffmpeg. Ffmpeg es obligatorio: Whisper lo usa para leer cualquier formato de vídeo o audio y convertirlo a lo que espera el modelo.
pip install -U openai-whisper
Con eso ya tienes el comando whisper disponible. El uso básico es directo:
whisper entrevista.mp4 --model medium --language Spanish --output_format srt
Tres cosas de ese comando que conviene entender:
- Le puedes pasar el MP4 directamente. No hace falta extraer el audio antes, aunque hacerlo acelera un poco el arranque en archivos grandes.
--language Spanishevita que el modelo pierda tiempo detectando el idioma y, sobre todo, evita que se equivoque en los primeros segundos y transcriba el resto en portugués o italiano.--output_formataceptasrt,vtt,txt,tsvyjson. Conallte genera todos.
Si prefieres extraer el audio tú, con esto lo dejas en el formato exacto que Whisper consume por dentro:
ffmpeg -i entrevista.mp4 -vn -ac 1 -ar 16000 -c:a pcm_s16le audio.wav
Implementaciones más rápidas
La versión oficial es la referencia, no la más eficiente. Hay dos alternativas que valen la pena:
- faster-whisper, una reimplementación sobre CTranslate2. Mismos modelos, bastante menos memoria y notablemente más rápida, sobre todo con cuantización a int8. Si quieres usarla con la misma sintaxis de línea de comandos, instala el envoltorio
whisper-ctranslate2. - whisper.cpp, un port a C++ sin dependencias de Python. Es la opción para máquinas modestas, para Apple Silicon y para meter transcripción dentro de otra aplicación sin arrastrar medio ecosistema de Python detrás.
pip install whisper-ctranslate2
whisper-ctranslate2 audio.wav --model large-v3 --language es --vad_filter True
Ese --vad_filter activa un detector de voz que recorta los silencios antes de pasar el audio al modelo. Es la mejor defensa contra el problema que viene ahora.
Lo que Whisper hace mal
Esta parte es la que casi nadie cuenta y la que te va a costar tiempo.
Alucina en los silencios. Si hay treinta segundos de música o de sala vacía, Whisper puede inventarse una frase entera. Los clásicos son subtítulos tipo "Gracias por ver el vídeo" o "Subtítulos realizados por la comunidad", que vienen de los datos de entrenamiento. El filtro VAD, que descarta lo que no es voz antes de transcribir, es la defensa más eficaz.
Se queda en bucle. A veces repite la misma frase diez veces seguidas. Suele pasar con audio de mala calidad o con acentos muy marcados. Lo primero que hay que probar es --condition_on_previous_text False, que corta el arrastre del texto anterior. Si sigue pasando, limpia el audio o cambia de modelo.
No separa hablantes. Whisper no hace diarización. Te da un bloque de texto continuo sin saber quién habla. Para eso necesitas una capa extra como WhisperX, que además mejora los tiempos a nivel de palabra alineando con otro modelo.
Se inventa la puntuación con criterio propio. Es bastante buena, pero no es tu criterio. Si trabajas con transcripciones para publicar, cuenta con una pasada de edición.
Los nombres propios y la jerga técnica sufren. Marcas, apellidos, siglas de tu sector. Con --initial_prompt puedes darle un contexto corto con esos términos escritos bien y mejora bastante.
Y una advertencia general que aplica a todo lo que hagas con IA local: los tiempos que leas por ahí rara vez coinciden con los tuyos. Prueba con un archivo real de tu flujo antes de prometerle a nadie un plazo.
De transcripción a subtítulos legibles
Un .srt recién salido de Whisper suele tener líneas larguísimas que no caben en pantalla. Los parámetros de formato lo arreglan, pero necesitan tiempos a nivel de palabra:
whisper clase.mp4 --model medium --language Spanish --output_format srt \
--word_timestamps True --max_line_width 42 --max_line_count 2
Con eso tienes bloques de dos líneas de unos cuarenta caracteres, que es más o menos el estándar de legibilidad para subtítulo abierto. A partir de ahí:
- Importa el
.srten tu editor de vídeo. Premiere, DaVinci Resolve, CapCut y Final Cut leen SRT sin problema. - Revisa los primeros treinta segundos y los últimos treinta. Ahí es donde se concentran los fallos.
- Busca frases repetidas seguidas. Es la firma de un bucle.
- Si el vídeo es vertical, recorta más: cuarenta y dos caracteres se comen media pantalla en móvil.
Qué formato de salida te conviene
No todos los formatos sirven para lo mismo, y elegir mal significa repetir la transcripción entera:
| Formato | Para qué sirve |
|---|---|
srt |
El universal. Lo leen los editores de vídeo y casi todas las plataformas |
vtt |
El estándar de la web, el que pide la etiqueta de subtítulo de HTML |
txt |
Texto plano sin tiempos. Para buscar, resumir o reutilizar el contenido |
tsv |
Inicio, fin y texto separados por tabulaciones. Cómodo para hojas de cálculo |
json |
La salida completa con segmentos y, si activas los tiempos por palabra, palabra a palabra |
Si dudas, genera all. Los archivos de texto pesan nada al lado del vídeo y te ahorras volver a pasar el modelo por haber elegido mal a la primera.
Incrustar los subtítulos en el vídeo
Cuando ya tienes el .srt revisado hay dos formas de meterlo en el archivo final. La primera lo añade como pista, sin tocar la imagen:
ffmpeg -i video.mp4 -i subs.srt -c copy -c:s mov_text salida.mp4
Es instantáneo porque no recodifica nada, y el espectador puede activarlo o desactivarlo. El problema es que muchos reproductores y casi todas las redes sociales ignoran esa pista.
La segunda los quema en la imagen:
ffmpeg -i video.mp4 -vf "subtitles=subs.srt" -c:a copy salida.mp4
Aquí sí se recodifica el vídeo, así que tarda y pierdes algo de calidad, pero el texto se ve siempre y en cualquier sitio. Para vertical y redes es la opción por defecto. Un aviso de Windows: ejecuta el comando desde la carpeta donde está el .srt, porque el filtro se atraganta con las rutas que llevan dos puntos.
Para contenido corto el subtítulo no es un accesorio, es el formato. La mayoría de la gente ve los primeros segundos sin sonido, y esto conecta con todo el repertorio de herramientas de IA para producir vídeo corto que puedes encadenar detrás de la transcripción.
Cómo encajarlo en tu flujo de trabajo
La transcripción no es el objetivo final casi nunca. Es materia prima. Algunas cosas concretas que puedes montar encima:
- Buscador de tu propio archivo. Transcribe todo lo que grabas y guarda los
.txten una carpeta. Buscar una frase en tres años de vídeos pasa a ser ungrep. - Guiones y resúmenes. Le pasas el texto a un modelo local y sacas el resumen, los capítulos con marca de tiempo y la descripción para la plataforma.
- Reutilización. El texto de una charla de una hora es la base de cinco publicaciones, un boletín y un puñado de clips.
- Material para portadas. De la transcripción salen las frases con gancho, que son exactamente lo que necesitas cuando te sientas a generar miniaturas para YouTube con ChatGPT y no sabes qué texto poner.
Un patrón que funciona bien: una carpeta vigilada. Todo vídeo que cae ahí se transcribe solo con un script, deja el .srt y el .txt al lado y te avisa. En Linux o Mac lo montas con un bucle de shell en diez minutos. En Windows, con una tarea programada.
Dos costumbres que ahorran trabajo cuando esto se convierte en rutina. La primera: guarda siempre el json junto al srt. Ocupa poco y te permite volver a generar el subtítulo con otro ancho de línea sin transcribir de nuevo. La segunda: fija el modelo y el idioma en el script en lugar de escribirlos cada vez, porque el día que se te olvide el --language acabarás con media entrevista en portugués.
Preguntas frecuentes
¿Cuánto tarda en transcribir una hora de vídeo?
Depende demasiado del equipo como para dar una cifra fiable. La regla útil es comparativa: con GPU y un modelo medium la transcripción va varias veces más rápida que el tiempo real, y en CPU con ese mismo modelo puede tardar más que la duración del propio audio. Mide una vez con un archivo tuyo de cinco minutos y multiplica.
¿Whisper funciona bien con español de España?
Sí, y con latinoamericano también. Es uno de los idiomas mejor representados en su entrenamiento. Donde se nota la diferencia es en modelos pequeños: tiny y base en español dan resultados pobres, mientras que en inglés todavía son usables. Empieza por small como mínimo.
¿Puedo transcribir varios archivos a la vez?
Sí, el comando acepta varias rutas seguidas y las procesa en orden. Para lotes grandes tiene más sentido un script que recorra la carpeta, porque así controlas errores y no pierdes el trabajo hecho si uno falla. Ejecutar varias instancias en paralelo solo compensa si te sobra VRAM.
¿Necesito internet para usarlo?
Solo la primera vez, para descargar los pesos del modelo que elijas. A partir de ahí funciona sin conexión. Si vas a trabajar fuera, descarga antes los modelos que creas que vas a necesitar, porque el large no se baja en un momento.