daun.pw

Transcribir y subtitular vídeo con Whisper en tu propio equipo

· 11 min de lectura · 2332 palabras

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

Del vídeo al subtítulo, sin que el archivo salga de tu equipo
Del vídeo al subtítulo, sin que el archivo salga de tu equipo

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:

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:

  1. Le puedes pasar el MP4 directamente. No hace falta extraer el audio antes, aunque hacerlo acelera un poco el arranque en archivos grandes.
  2. --language Spanish evita 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.
  3. --output_format acepta srt, vtt, txt, tsv y json. Con all te 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:

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í:

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:

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.