WhisperX es una canalización de código abierto para audio largo mantenida por Max Bain y la comunidad. Combina detección de actividad vocal, transcripción por lotes mediante faster-whisper/CTranslate2, alineación forzada específica por idioma y diarización opcional de hablantes con pyannote. Su resultado no es solo «Whisper más rápido»: ofrece palabras con tiempos más finos y etiquetas anónimas de hablante. Cada etapa utiliza un modelo distinto y conserva sus propios modos de fallo.
WhisperX no sustituye el reconocedor por un nuevo ASR universal. Cambia la segmentación y la inferencia, alinea el texto reconocido con un modelo fonético y puede reconciliar las palabras con intervalos de hablantes. Un texto incorrecto no se vuelve verdadero por tener tiempos precisos. Si el diccionario del alineador no contiene una cifra, símbolo o escritura, el tiempo puede faltar o ser interpolado. Con voces simultáneas, una etiqueta SPEAKER_00 visualmente limpia todavía puede estar equivocada.
Qué añade WhisperX a Whisper
| Etapa | Implementación | Valor | Límite de fallo |
|---|---|---|---|
| Segmentación | VAD pyannote o Silero y Cut & Merge | Crea fragmentos de voz para batch | Puede cortar voz baja o unir turnos |
| Transcripción | faster-whisper/CTranslate2 | Batch y opciones cuantizadas | Decodificación distinta del upstream |
| Alineación | wav2vec2/ASR fonético por idioma | Mapea palabras a tiempos finos | Caracteres, cifras, símbolos o idioma fallan |
| Diarización | pyannote Community-1 | Asigna IDs anónimos | Solapamiento, turnos cortos, voces similares; no nombres |
| Salida | SRT/VTT/TSV/TXT/JSON | Subtítulos y procesamiento | Lectura, saltos y contenido requieren QA |
El artículo original aborda tres problemas de formato largo: Whisper con ventanas puede derivar, repetir o alucinar; la decodificación secuencial dificulta el batch; y las marcas por enunciado son demasiado gruesas. VAD Cut & Merge permite inferencia por lotes y la alineación fonética incorpora tiempos de palabra tras reconocer. Los resultados de velocidad y error publicados pertenecen a modelos, datos, configuración y GPU concretos. No los convertimos en un multiplicador universal ni en un WER actual sin contexto.
Estado actual y dependencias
WhisperX sigue mantenido. En la revisión, v3.8.6 era el último release estable mostrado y main ya declaraba 3.8.7rc1. Versiones recientes repararon tiempos de palabras no alineables, añadieron callbacks de progreso y ajustaron compatibilidad de Torch/TorchCodec. Es una señal positiva de mantenimiento, pero también la razón para fijar un release probado en producción en vez de instalar main en cada build.
| Frontera | Requisito actual | Implicación |
|---|---|---|
| Python | 3.10 hasta menor de 3.14 | Entorno aislado; actualización del sistema puede romper |
| ASR | faster-whisper≥1.2 y CTranslate2≥4.5 | Regresión de CUDA, modelo y decodificación |
| PyTorch | Torch/Torchaudio alrededor de 2.8 | Wheel, driver y CUDA deben coincidir |
| Diarización | pyannote.audio≥4 | TorchCodec, acceso cerrado y segundo ciclo de modelos |
| Licencias | WhisperX BSD-2; modelos/dependencias separados | Conservar avisos y condiciones individualmente |
Instalación y primera ejecución controlada
python -m venv .venv
source .venv/bin/activate
pip install whisperx
whisperx meeting.wav --model large-v2 --batch_size 4 --output_format json
whisperx meeting.wav --diarize --hf_token "$HF_TOKEN"El README recomienda PyPI para uso normal y advierte que la versión de desarrollo puede incluir experimentos y errores. La guía GPU documenta actualmente CUDA 12.8. CPU es posible con --device cpu --compute_type int8, pero hay que medir velocidad y calidad. Si falta memoria, reduce primero batch; después compara un ASR menor o int8, porque ambos pueden cambiar la transcripción. El token de Hugging Face solo sirve para descargar modelos cerrados y no debe quedar en historial, código ni metadatos.
Flujo de producción para audio largo
- Obtener consentimiento.Documentar propósito, fuente, retención y quién puede escuchar o exportar.
- Preservar el original.Crear una copia decodificada estable y conservar canales antes de convertir a mono.
- Construir una prueba privada.Incluir silencio, ruido, música, solapamiento, interrupciones, nombres, cifras, cambio de idioma y máxima duración.
- Fijar toda la pila.Registrar WhisperX, faster-whisper, ASR, alineador, VAD, pyannote, Torch/CUDA y compute type.
- Calibrar VAD y batch.Medir voz cortada, falsa voz, memoria GPU y factor de tiempo real a la vez.
- Conservar ASR previo.Guardar segmentos antes de alinear para no ocultar la hipótesis original.
- Marcar excepciones.Distinguir palabras alineadas, interpoladas y sin alinear y comprobar deriva en toda la grabación.
- Diarizar solo si aporta valor.Mantener token secreto, limitar número si se conoce y revisar solapamientos/turnos cortos.
- Aplicar puertas de salida.Revisar nombres, cifras, negación, alucinación, tiempos, cambios de voz y legibilidad.
- Exportar con manifiesto.Guardar JSON/SRT/VTT, versiones, estado de revisión y fecha de borrado.
Idiomas de alineación y fallos visibles
La alineación forzada es específica del idioma. El README menciona pipelines torchaudio por defecto para inglés, francés, alemán, español e italiano y más mapeos en DEFAULT_ALIGN_MODELS_HF. Si el idioma detectado no está, hay que proporcionar un ASR fonético con --align_model y validarlo en habla representativa. Que Whisper transcriba un idioma no significa que WhisperX alinee todas sus palabras.
Cifras, moneda, símbolos, escrituras mezcladas, code-switching y ortografía inusual pueden quedar fuera del diccionario. Releases recientes mejoraron el tratamiento temporal, pero nearest/linear es una estimación útil, no evidencia acústica. ignore conserva la ausencia. El sistema downstream debe guardar aligned/interpolated y no presentar todos los tiempos con igual confianza.
| Caso | Riesgo | Control |
|---|---|---|
| Cifras/moneda | Forma escrita fuera del diccionario | Revisar años, precios, fechas y unidades |
| Cambio de idioma | Un modelo no cubre ambas escrituras | Separar regiones o usar alineador validado |
| Nombres propios | La grafía ASR no coincide con lexicón | Puntuar texto/tiempo contra referencia humana |
| Música/silencio | VAD y ASR discrepan sobre voz | Etiquetar falsa voz y alucinación |
| Solapamiento | Las tres etapas degradan | Pruebas con crosstalk y hablante incierto |
| Turnos cortos | Poco solape palabra-intervalo | Revisar límites de interrupción |
pyannote: acceso, licencia y significado
La CLI actual usa pyannote/speaker-diarization-community-1 por defecto. El usuario acepta condiciones del modelo cerrado y crea un token de acceso de Hugging Face. La model card identifica Community-1 como CC-BY-4.0 y explica ejecución local/offline tras copiarlo. Esas condiciones son independientes de la licencia BSD-2 de WhisperX y de los modelos Whisper/faster-whisper.
Diarización responde qué cluster anónimo habla en cada momento; no identifica personas. SPEAKER_00 puede cambiar entre archivos, dividir a una persona o fusionar voces parecidas. min/max_speakers restringe, no garantiza. El solapamiento es una limitación oficial. Para derecho, investigación, atención telefónica o clínica, conserva el audio y trata la atribución como metadato revisable, no prueba de identidad.
Comparación con opciones cercanas
| Opción | Elígela cuando | Contrapartida |
|---|---|---|
| WhisperX | Audio largo necesita batch, palabras y hablantes locales | Varios modelos y errores compuestos |
| OpenAI Whisper | Referencia Python upstream y comportamiento simple | Tiempos gruesos, sin diarización/batch largo nativo |
| faster-whisper | Solo importa rendimiento CTranslate2 | Añadir alineación/diarización y QA |
| whisper.cpp | C/C++, CPU, Apple Silicon, edge/offline | Otro ecosistema; no incluye la pipeline |
| API gestionada | Delegar inferencia, escala y modelos actuales | Datos externos, coste y funciones variables |
Criterio independiente:WhisperX es una canalización de producción posterior al ASR, no un botón de más exactitud. Aporta valor cuando los tiempos de palabras y hablantes anónimos reducen trabajo editorial. Si basta texto, no hay alineador validado, domina el solapamiento o el equipo no mantiene Python/Torch/CUDA/modelos, faster-whisper, Whisper upstream, whisper.cpp o una API pueden ser más fiables en operación.
Preguntas frecuentes
¿Es un modelo nuevo distinto de Whisper?
No en el sentido habitual. Usa Whisper mediante faster-whisper y añade VAD, alineación y pyannote opcional.
¿Garantiza tiempos exactos por palabra?
No. Caracteres, cifras, símbolos, escritura mixta o modelo lingüístico incorrecto fallan; interpolar es estimar.
¿Identifica nombres reales?
No. Produce clusters anónimos como SPEAKER_00. Vincularlos con personas necesita evidencia separada.
¿Necesito token de HF?
No para transcripción central. La diarización pyannote por defecto exige aceptar condiciones y token de descarga.
¿Funciona offline?
Sí tras descargar ASR, alineación y diarización. También hay que auditar egress, logs, cachés y almacenamiento.
¿Por qué agota la GPU?
Batch, modelo ASR, compute type, alineación y diarización consumen. Baja batch primero y mide cada cambio.
¿Es fiable con voces solapadas?
No como verdad. El proyecto reconoce solapamiento y diarización imperfecta como límites.
¿Qué idiomas alinea?
Hay defaults torchaudio y mapeos HF en alignment.py. Si falta, valida un modelo fonético o omite transparentemente.
Fuentes revisadas
- Repositorio oficial WhisperX
- README y límites oficiales
- Artículo WhisperX
- Releases oficiales
- Metadatos de dependencias
- Código de alineación e idiomas
- Defaults CLI actuales
- Código de asignación de hablantes
- Model card pyannote Community-1
- faster-whisper
- Guía OpenAI de transcripción alojada
- Licencia BSD-2 WhisperX
Revisión técnica independiente: 2026-08-20. Versiones, dependencias, acceso e idiomas cambian. Fija las fuentes primarias y evalúa con audio privado.



