Intermedio 14 minAudio

WhisperX: marcas de tiempo palabra por palabra y locuteurs

Respuesta directa

WhisperX es una capa de software libre (licencia BSD-2-Clause, más de 24.000 estrellas en GitHub) sobre Whisper que añade dos cosas: una alineación forzada mediante un modelo fonético para obtener marcas de tiempo realmente exactas palabra por palabra, y una separación de hablantes mediante pyannote-audio. Todo funciona en local, con una inferencia por lotes que, según anuncia el proyecto, es hasta 70 veces más rápida que el tiempo real con Whisper large-v2, a costa de cargar tres modelos en lugar de uno solo.

Whisper transcribe muy bien y asigna marcas de tiempo aproximadas. WhisperX añade dos cosas que lo cambian todo en cuanto necesitas algo más que un simple documento: una alineación forzada que proporciona marcas de tiempo realmente exactas para cada palabra y una separación de hablantes que indica quién habló y cuándo. Esto es lo que convierte una transcripción en subtítulos utilizables y en un informe de reunión legible.

Por Mohamed Meguedmi·Actualización 2026-09-29·Probado en Windows, macOS y Linux

#Lo que Whisper por sí solo no resuelve

WhisperX es una capa de software libre, bajo licencia BSD-2-Clause, que añade a Whisper dos cosas que el modelo por sí solo no proporciona: marcas de tiempo palabra por palabra obtenidas mediante alineación forzada con un modelo wav2vec2 y una etiqueta de hablante generada por un modelo pyannote. Necesitas WhisperX si creas subtítulos que deben aparecer en el momento adecuado o un informe de reunión en el que se vea quién habló. Si solo quieres texto, basta con Whisper o faster-whisper. Esto implica cargar tres modelos en lugar de uno, disponer de un token de acceso de Hugging Face para la separación de hablantes y aceptar unas limitaciones documentadas: los números y los importes no se alinean, el habla simultánea se gestiona mal y la separación de hablantes sigue siendo imperfecta. Todo se ejecuta en local, tanto en GPU como en CPU o en Mac.

Whisper produce un texto excelente. Sus debilidades aparecen en cuanto se quiere algo más que texto. Según el repositorio de WhisperX, las marcas de tiempo de Whisper se dan por enunciado y no por palabra, y pueden presentar un desfase de varios segundos: algo imperceptible en un documento, pero inaceptable en la subtitulación, donde un subtítulo que aparece un instante demasiado tarde es peor que no tener ningún subtítulo. Y Whisper no distingue entre hablantes: dos horas de reunión se convierten en un monólogo sin diferenciación de voces.

WhisperX responde a ambos añadiendo etapas en lugar de reemplazar el modelo. Es esta elección de diseño la que conserva la calidad de transcripción que conoces. El proyecto, publicado bajo licencia BSD-2-Clause, supera actualmente las 24 000 estrellas en GitHub: una señal de que la necesidad que cubre, añadir marcas de tiempo y atribuir una transcripción, va mucho más allá del subtitulado.

#Las tres etapas

El kit de IA Local

Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.

  • Espacio en línea de por vida
  • PDF + archivos
  • Reembolsado 30 j
Qué hace cada paso y qué requiere
PasoRolLo que necesita
Detección de voz (VAD)La señal se divide en zonas de habla antes de la transcripciónUn detector de voz (pyannote por defecto, silero como opción)
TranscripciónEl audio se convierte en texto, a través de faster-whisper, una implementación rápida de WhisperUn modelo Whisper: su tamaño determina la calidad y el uso de memoria (el modelo predeterminado en la línea de comandos es small)
Alineación forzadaCada palabra se sitúa con precisión en el audio mediante wav2vec2Un modelo fonético específico del idioma
Separación de hablantesEl audio se divide por voz y los turnos se etiquetan mediante pyannote-audioEl modelo pyannote speaker-diarization-community-1 por defecto, cuyo acceso requiere aceptar condiciones

La detección de voz tiene una doble función: el repositorio indica que reduce las alucinaciones y permite agrupar los segmentos sin empeorar la tasa de error por palabra. La etapa de alineación suele subestimarse. Es la que hace fiables las marcas de tiempo de cada palabra, apoyándose en un modelo wav2vec2 para situar cada palabra en su posición real en la señal de audio. Depende del idioma: el repositorio especifica que se necesita un modelo wav2vec2 propio de cada idioma y que existen modelos predeterminados para el inglés, el francés, el alemán, el español y el italiano, además de muchos otros idiomas a través de Hugging Face. Para un idioma que no figure en la lista, hay que buscar por cuenta propia un modelo fonético y probarlo. La propia transcripción se beneficia de la inferencia por lotes: el proyecto anuncia hasta 70 veces la velocidad del tiempo real con el modelo large-v2, sin especificar el hardware en su README. Toma esa cifra como un máximo que debes comprobar en tu máquina.

#La separación de hablantes, sin falsas expectativas

El etiquetado funciona agrupando las características vocales de toda la grabación mediante pyannote-audio. El modelo predeterminado de WhisperX es actualmente speaker-diarization-community-1, publicado bajo la licencia CC-BY-4.0, que recibe una señal de audio mono a 16 kHz (el audio estéreo se convierte en mono y las señales con otras frecuencias de muestreo se remuestrean). La ficha del modelo afirma que funciona mucho mejor que el antiguo pipeline 3.1. El repositorio de WhisperX es franco sobre sus limitaciones: el habla superpuesta se gestiona de forma mediocre y la separación sigue estando «lejos de ser perfecta». Las tasas de error de diarización publicadas por pyannote lo demuestran: 11,7 % en AISHELL-4, 17,0 % en AMI (micrófonos individuales), 19,9 % en AMI (micrófono distante), 26,7 % en CALLHOME (parte 2) y 46,8 % en Ego4D, según el corpus. Son corpus académicos, no tus grabaciones, pero el orden de magnitud indica que sigue siendo necesaria una revisión. La situación empeora precisamente cuando las reuniones se complican: personas que se interrumpen, alguien lejos del micrófono, voces similares.

Dos observaciones prácticas. Se puede indicar un número mínimo y máximo de hablantes (opciones --min_speakers y --max_speakers), y el repositorio lo recomienda cuando conoces ese número: el modelo ya no tiene que adivinarlo. Además, las etiquetas son anónimas por diseño: el sistema indica que había tres voces y qué turnos corresponden a cada una, pero no identifica a las personas. Asociar una etiqueta a un nombre es un paso manual, y es también el momento en que la transcripción se convierte en un dato personal.

!
Tratar localmente no implica consentimiento
Una transcripción con identificación de los hablantes es un dato personal, salga o no de tu máquina. El procesamiento local es el enfoque técnico adecuado; no exime de informar a las personas grabadas y obtener su consentimiento.
i
Las condiciones de acceso, concretamente
El modelo de separación de hablantes está alojado en Hugging Face. El repositorio es público, pero la ficha exige aceptar sus condiciones para acceder a los archivos, y luego crear un token de acceso de lectura, que se debe pasar con --hf_token. Es gratuito, no hay pago, pero es un paso que no se debe descubrir durante un procesamiento en lote.

#Precisión real, no la del benchmark

La transcripción en sí merece una cifra, porque el benchmark habitual da una imagen demasiado favorable. Según VexaScribe, un servicio comercial de transcripción, Whisper large-v3 alcanza una tasa de error por palabra de aproximadamente el 2,7 % en LibriSpeech test-clean, un conjunto de audio limpio de un solo hablante. En audio real en inglés —reuniones, podcasts, llamadas—, el mismo sitio sitúa esta tasa en torno al 8-12 %. Son órdenes de magnitud publicados por un actor del sector, válidos para el inglés: no dicen nada sobre tus grabaciones en francés. WhisperX no mejora la transcripción en sí, que sigue siendo la de Whisper: lo que añade es saber exactamente dónde se encuentra cada palabra y quién la pronunció, dos datos que esta tasa de error no refleja.

Elegir la herramienta adecuada según la necesidad
NecesidadHerramienta
Texto plano, rápidoWhisper solo o una implementación rápida como faster-whisper
Subtítulos que aparecen en el momento adecuadoWhisperX: el alineamiento es toda su razón de ser
Resumen con quién dijo quéWhisperX con separación de hablantes activada
Transcripción en directo, baja latenciaUn motor orientado al procesamiento en streaming; esta cadena está diseñada para archivos

#Lo que requiere

El tamaño del modelo Whisper lo determina todo
Un modelo grande produce el mejor texto y requiere la mayor cantidad de memoria; el repositorio indica que un modelo más grande mejora la precisión de las marcas de tiempo a costa de más memoria de GPU, mientras que un modelo de alineación más grande apenas ayuda.
Se cargan tres modelos, no uno
El uso de memoria alcanza su máximo cuando los modelos de transcripción, alineación y separación están todos cargados en memoria. El ejemplo de Python del repositorio libera cada modelo después de su etapa (recolección de basura y, después, torch.cuda.empty_cache()), una solución habitual en una tarjeta pequeña.
Sin GPU, también en Mac
El repositorio da el comando para el procesador y para macOS: --compute_type int8 --device cpu. No publica ningún tiempo de procesamiento en procesador: mide en un fragmento antes de planificar un lote. Con un GPU NVIDIA, pide el kit CUDA 12.8, y el proyecto indica menos de 8 GB de memoria para large-v2 con beam_size=5.
El procesamiento en lote ayuda
El procesamiento por lotes explica la velocidad anunciada: el valor predeterminado en la línea de comandos es --batch_size 8. Reducirlo (el repositorio menciona 4) libera memoria GPU.
→
Falta de memoria GPU: tres formas de reducir el consumo
El repositorio enumera tres formas de reducir el consumo de memoria: bajar --batch_size (por ejemplo, a 4), elegir un modelo más pequeño (--model base) o un tipo de cálculo más ligero (--compute_type int8). Los dos últimos pueden degradar la calidad, según precisa. Por tanto, empieza por reducir el tamaño del lote.

#Instalar y comenzar una transcripción

La instalación se realiza mediante pip; el paquete requiere Python de la versión 3.10 a la 3.13. La línea de comandos escribe por defecto todos los formatos disponibles (srt, vtt, txt, tsv, json, aud), y la opción --highlight_words True subraya cada palabra en el momento en que se pronuncia en los subtítulos SRT y VTT. El JSON incluye las etiquetas de los hablantes cuando la separación está activada.

  1. 01
    Instalar WhisperX
    pip install whisperx installe le paquet ; avec un GPU NVIDIA, installer d'abord le kit CUDA 12.8, selon le dépôt. Le dépôt ajoute qu'il peut falloir installer aussi ffmpeg, en renvoyant aux instructions d'installation de Whisper.
  2. 02
    Transcribir y alinear
    Realizar una primera pasada con un modelo Whisper de tamaño medio (el predeterminado es small), especificando el idioma si se conoce de antemano: si no se especifica, el idioma se detecta automáticamente, y el modelo de alineación depende de ese idioma.
  3. 03
    Activar la separación si es necesario
    Añadir --diarize y el token de acceso de Hugging Face obtenido tras aceptar las condiciones del modelo pyannote, y indicar el número de hablantes si lo conoces.
  4. 04
    Leer de nuevo el archivo de salida
    Abrir el archivo SRT o JSON generado y revisar algunos fragmentos al azar, especialmente los turnos de habla en los momentos en que varias personas hablan casi al mismo tiempo.
Terminal
pip install whisperx

# Avec GPU : transcription, alignement et séparation des locuteurs
whisperx reunion.mp3 --model medium --language fr \
  --diarize --hf_token VOTRE_JETON --min_speakers 2 --max_speakers 5

# Sur processeur ou sur Mac
whisperx reunion.mp3 --model medium --language fr --compute_type int8 --device cpu

#Lo que la alineación no podrá marcar temporalmente

El repositorio enumera limitaciones que conviene conocer antes de prometer subtítulos perfectos. La primera tiene que ver con los números: las palabras cuyos caracteres no figuran en el diccionario del modelo de alineación, por ejemplo «2014.» o «£13.60», no pueden alinearse y, por tanto, no tienen ninguna marca de tiempo. En una reunión llena de importes y fechas, estas palabras aparecen sin una marca de tiempo propia en el SRT. La segunda es el habla simultánea, que tanto Whisper como WhisperX gestionan mal. La tercera es el idioma: hace falta un modelo wav2vec2 específico.

Dos diferencias con el Whisper original también explican las diferencias en el texto. Para procesar cada lote en una sola pasada, la inferencia se realiza sin marcas de tiempo de Whisper, lo que, según advierte el repositorio, puede generar divergencias respecto a la salida predeterminada. Además, la opción condition_on_prev_text está desactivada por defecto para reducir las alucinaciones. Desde 2026, la opción --interleaved_context restablece un contexto continuo entre segmentos, útil para la puntuación y el vocabulario técnico según el proyecto, pero es reciente: pruébala en un fragmento antes de adoptarla.

#Casos de uso concretos

Subtitulación de videos de formación
Las marcas de tiempo palabra por palabra evitan que los subtítulos se retrasen una frase entera respecto a la voz, un defecto que se nota de inmediato y resulta molesto en un contenido educativo.
Informe de una reunión con varios interlocutores
La separación de hablantes permite reconstruir quién propuso qué, una información que un resumen sin atribución no puede restituir fielmente.
Podcasts y entrevistas largas
La inferencia por lotes está pensada para grabaciones largas: eso es lo que anuncia el título del artículo de los autores, «Time-Accurate Speech Transcription of Long-Form Audio».
Archivos de audio para indexar
Un texto con marcas de tiempo para cada palabra permite que una búsqueda apunte directamente al instante exacto de la grabación, no solo al documento completo.
Extractos para redes sociales
Localizar el pasaje exacto en el que se pronuncia una frase destacada, con precisión palabra por palabra, facilita el recorte de un fragmento breve sin tener que volver a escuchar todo el vídeo.

Estos casos tienen un punto en común: ninguno requiere transcripción en tiempo real. Se trata de un archivo ya grabado que se procesa posteriormente, lo que deja tiempo para que la inferencia por lotes haga su trabajo sin restricciones de latencia. Cuando lo que se necesita es subtitular en directo —una conferencia retransmitida, una llamada en curso—, WhisperX deja de ser la herramienta adecuada, independientemente de la potencia de la máquina disponible.

#La transcripción es una entrada, no un entregable

En casi todos los casos reales, la transcripción no es el objetivo: sirve de entrada a un modelo local que elabora a partir de ella un informe, un registro de decisiones o un resumen. Esto tiene una consecuencia para la calidad esperada: un error de transcripción en una palabra poco frecuente importa menos que la estructura de los turnos de habla, porque es esta estructura la que permite al modelo atribuir correctamente lo dicho.

En la práctica, un flujo de producción razonable separa las dos tareas: WhisperX produce un texto con marcas de tiempo y etiquetas de hablante, y después un modelo de lenguaje distinto revisa ese texto para obtener un resumen estructurado. Mezclar ambas tareas en una sola llamada —pedir a un modelo que resuma directamente el audio— priva al flujo de procesamiento de la precisión de las marcas de tiempo que WhisperX está precisamente diseñado para aportar y dificulta la verificación posterior de un pasaje concreto.

Otro beneficio: la transcripción se realiza una sola vez y luego se reutiliza para varios entregables —resumen corto, registro de decisiones, subtítulos— sin volver al audio. El texto con marcas de tiempo y etiquetas se convierte en la fuente de verdad.

#FAQ

¿Es WhisperX gratuito?+
Sí, es un proyecto libre bajo licencia BSD-2-Clause que funciona localmente y tiene más de 24.000 estrellas en GitHub. La separación de hablantes utiliza un modelo pyannote alojado en Hugging Face: tienes que aceptar sus condiciones y crear un token. Es gratuito y no requiere ningún pago, pero debes completar estos pasos antes del primer procesamiento por lotes.
¿Cuál es la fiabilidad de la separación de hablantes?+
La fiabilidad es aceptable con un audio limpio y voces bien diferenciadas, pero es menor en cuanto las voces se superponen: el repositorio reconoce que la separación está «lejos de ser perfecta». Los errores publicados por pyannote van del 11,7 % al 46,8 % según el corpus. Indicar el número mínimo y máximo de hablantes ayuda, y una revisión humana sigue siendo necesaria.
¿Se necesita una GPU?+
No: el repositorio proporciona el comando para CPU y para macOS (--compute_type int8 --device cpu), pero no publica tiempos de procesamiento en esos entornos, así que mide primero. Con una GPU NVIDIA, el proyecto anuncia menos de 8 GB de memoria para large-v2 con beam_size=5, y el uso de memoria alcanza su máximo cuando la transcripción, la alineación y la separación están cargadas a la vez.
¿WhisperX o Whisper solo?+
Whisper por sí solo si solo necesitas texto, sin preocuparte por una sincronización precisa, por ejemplo para indexar el contenido de una entrevista. WhisperX cuando necesites marcas de tiempo palabra por palabra para que los subtítulos aparezcan en el momento adecuado, o etiquetas de hablantes para transcribir una reunión con varias voces de forma legible y aprovechable.
¿Funciona en francés?+
Sí: el repositorio menciona el francés entre los cinco idiomas (junto con el inglés, el alemán, el español y el italiano) que tienen un modelo de alineación predeterminado. Usa --language fr. Para un idioma no incluido en esta lista, tienes que encontrar por tu cuenta un modelo fonético wav2vec2 y probarlo antes de contar con marcas de tiempo fiables para cada palabra.
¿Puede transcribir en directo?+
No, está diseñado para archivos ya guardados, no para un flujo en directo. El subtitulado en directo requiere un motor orientado al procesamiento de flujos, con un equilibrio entre latencia y precisión distinto del que se busca aquí, y la inferencia por lotes que permite a WhisperX procesar rápidamente un archivo completo deja de tener sentido en un flujo de audio continuo que llega fragmento a fragmento.
¿Esta guía te ha ayudado?

¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.