Artículo

Transcripción de reuniones sin la nube: Whisper y separación de hablantes

Equipo editorial de Avenex · 2026-10-13

Las grabaciones de reuniones a menudo no se pueden enviar a un servicio externo: contienen acuerdos, cifras y nombres. A continuación explicamos cómo montamos una transcripción que funciona por completo en un ordenador de trabajo y qué obtenemos de ella. Describimos nuestra propia herramienta de trabajo, no un producto cerrado.

De qué se compone el proceso

Primero, ffmpeg convierte la grabación a WAV de 16 kHz, el formato que esperan los modelos de reconocimiento de voz. Después, Whisper large-v3 reconoce el texto. En Mac con Apple Silicon usamos la versión mlx-whisper, que calcula en los núcleos gráficos mediante Metal. El modelo detecta el idioma por sí mismo, pero también se puede indicar.

La separación de hablantes (diarización) es un paso aparte y la hace pyannote speaker-diarization-3.1. Whisper responde a «qué se dijo» y pyannote a «quién lo dijo». Los resultados de ambos pasos se combinan en un solo texto con etiquetas de hablante y marcas de tiempo.

Cómo trabajar sin internet

Los modelos de pyannote están en Hugging Face; para la primera descarga hay que aceptar sus condiciones de uso e indicar un token. Después, los modelos se guardan en local. Nuestra herramienta tiene un modo sin conexión: si en el almacenamiento local falta aunque sea un archivo del modelo, la transcripción se detiene con un error en lugar de intentar descargarlo en silencio.

Para un portátil sin tarjeta gráfica hay otra opción. En nuestro asistente de dictado, el reconocimiento se hace con Whisper acelerado por GPU o con el modelo Parakeet, optimizado para un procesador normal. Antes del reconocimiento, un detector de actividad de voz (VAD) descarta el silencio: menos trabajo inútil y menos frases «fantasma» en los tramos vacíos.

Reconocer voces conocidas

Por sí solo, pyannote no conoce los nombres: devuelve etiquetas como SPEAKER_00, SPEAKER_01, etc. Etiquetar a los hablantes a mano cada vez es tedioso, así que mantenemos una galería de huellas de voz. Para cada hablante, pyannote devuelve un vector de voz promedio, que se compara con la galería mediante similitud coseno.

Se asigna un nombre solo si el mejor candidato obtiene al menos 0,5 y supera al segundo por un margen claro de al menos 0,1. Si no, queda SPEAKER_XX: más vale una etiqueta honesta que nombrar con seguridad a la persona equivocada. La voz de cada persona se añade a la galería una sola vez, a partir de una grabación ya etiquetada. Si se conoce el número de participantes, se puede indicar a la diarización.

De la transcripción a decisiones y tareas

Una transcripción en bruto todavía no es un acta. Antes de sacar conclusiones, marcamos quién se conectó y quién salió, y separamos el habla fiable del silencio, las voces superpuestas y las repeticiones del reconocimiento. Cada conclusión conserva su marca de tiempo para poder comprobarla en la grabación. Un fragmento reconocido con poca confianza puede convertirse en una pregunta de aclaración, pero no en la base de una tarea asignada a una persona concreta.

El error más común es registrar como decisión cualquier frase en futuro. Distinguimos varios niveles: se mencionó una idea, una propuesta sin acuerdo, un siguiente paso aceptado con responsable y plazo, una acción condicionada y una decisión final. Por ejemplo, «si aprueban el presupuesto, registramos» es un objetivo condicionado, no una decisión.

Dónde guardar el resultado

Las transcripciones y las huellas de voz son datos sensibles. En nuestra herramienta, los datos, los accesos y los resultados de cada proyecto se guardan por separado, y el procesamiento solo se ejecuta con un perfil de proyecto indicado explícitamente. El portal interno se construye a partir de registros revisados —decisiones, tareas, reuniones—, no de transcripciones en bruto.

Si implanta un esquema así, decida de antemano dónde se guardan las grabaciones y durante cuánto tiempo, quién ve la transcripción completa y quién solo las tareas resultantes, y quién revisa el acta antes de enviarla.