Resumen de reunión automático: Whisper + LLM 100 % local
Elaborar un informe de reunión con IA consta de dos pasos: transcribir el audio y luego resumir el texto. El problema es que la mayoría de las herramientas SaaS envían la grabación completa de tu reunión —nombres, cifras, estrategia— a servidores de terceros. Esta guía monta el mismo flujo de procesamiento íntegramente en local: Whisper para la transcripción, un LLM con Ollama para extraer decisiones y acciones, sin que nada salga de tu máquina.
#Por qué el procesamiento local es necesario para las reuniones sensibles
Una reunión no es un archivo cualquiera. En una hora de grabación aparecen nombres de clientes, importes, decisiones de recursos humanos, planes de producto no anunciados y, a veces, datos personales en el sentido del RGPD. Confiar este audio a un servicio de generación automática de actas de reunión en la nube supone aceptar que todo este contenido se transfiera, se procese y, potencialmente, se conserve por parte de un tercero.
- Confidencialidad real
- El audio y la transcripción permanecen en tu equipo. Ningún dato profesional pasa por un servidor externo que pueda registrarlo o utilizarlo para entrenar un modelo.
- Cumplimiento simplificado del RGPD
- No hay transferencia a un subcontratista, a menudo situado fuera de la UE. El apartado «transferencia de datos personales» de tu evaluación de impacto se elimina de raíz.
- Cero costo recurrente
- Sin suscripción por usuario ni facturación por minuto transcrito. Una vez que la máquina esté lista, puedes procesar tantas reuniones como quieras.
- Funciona offline
- Un desplazamiento, un sitio sin conexión fiable, una reunión en una sala aislada: el procesamiento sigue disponible sin Internet.
#El principio del pipeline en dos fases
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
- Actualizaciones de por vida
Un informe de reunión generado por IA se descompone siempre en dos etapas distintas, que no se deben confundir. La primera convierte el sonido en texto: es la función de Whisper, el modelo de reconocimiento de voz de OpenAI, del que varias implementaciones de código abierto funcionan perfectamente en local. La segunda convierte este texto en bruto en un documento estructurado: es la función de un LLM local servido por Ollama.
- Transcripción (Whisper)
- Entrada: un archivo de audio o vídeo. Salida: el texto completo de la reunión, posiblemente con marcas de tiempo. Es un cálculo pesado pero mecánico.
- Síntesis (LLM Ollama)
- Entrada: la transcripción. Salida: un informe de la reunión con un resumen, las decisiones tomadas y las acciones que deben llevarse a cabo con su responsable. Ahí es donde el prompt marca la diferencia.
Separar las dos etapas tiene un beneficio práctico: puedes volver a generar el resumen tantas veces como quieras, con prompts diferentes, sin tener que repetir la transcripción, que es la parte más lenta.
#Prerrequisitos
- Ollama instalado
- El demonio escucha por defecto en http://localhost:11434. Si aún no has instalado Ollama, consulta la guía de instalación que aparece al final de la página.
- Un LLM para resumir
- Un modelo de 9 a 12B en Q4_K_M (≈7 GB de VRAM) bueno en francés es más que suficiente. Qwen 3.5 9B (256k de contexto, ideal para transcripciones largas) o Gemma 4 12B son excelentes opciones para resúmenes estructurados.
- Whisper
- Una implementación local: openai-whisper (simple), faster-whisper (rápido) o whisper.cpp (ligero, sin GPU). Esta guía utiliza las dos primeras.
- ffmpeg
- Indispensable para leer formatos de video (mp4 de Teams/Zoom) y convertir audio. Whisper lo utiliza en segundo plano.
- Hardware
- Una GPU acelera mucho Whisper, pero medium también funciona en CPU (más lentamente). Aproximadamente 2 GB de VRAM para el modelo small, más para large-v3.
#Paso 1: transcribir el audio de la reunión con Whisper
La instalación más directa es mediante el paquete openai-whisper, que proporciona un comando listo para usar desde la línea de comandos. Instálalo en un entorno Python, con ffmpeg instalado en el sistema.
La transcripción se realiza luego con un solo comando. Se especifica el modelo, el idioma (imponerlo evita errores de detección en reuniones cortas) y el formato de salida de texto.
Obtienes un archivo reunion.txt que contiene toda la reunión. Si también quieres subtítulos con marcas de tiempo (útiles para localizar un pasaje), añade --output_format srt, o all para generar todo de una vez.
Para una reunión de una hora, la transcripción puede tardar mucho en la CPU. Ahí es donde entra faster-whisper, una reimplementación que utiliza CTranslate2 y es mucho más rápida con la misma calidad. Aquí tienes un script de Python que transcribe y guarda el texto.
#Procesar una grabación de Teams o Zoom
Las grabaciones de Teams y Zoom son archivos de vídeo .mp4 (a veces .m4a si solo contienen audio). Whisper puede leerlos directamente porque se apoya en ffmpeg, pero extraer primero la pista de audio en mono a 16 kHz es más fiable y más rápido, sobre todo con whisper.cpp, que lo exige.
- -ar 16000
- Remuestrea a 16 kHz, la frecuencia esperada por Whisper. No es necesario mantener 48 kHz: el habla no necesita esa frecuencia.
- -ac 1
- Combina los canales en mono. Una reunión no tiene sentido en estéreo para la transcripción.
- -c:a pcm_s16le
- Genera WAV sin comprimir, el formato más seguro como entrada para Whisper.
¿Dónde encontrar el archivo? En Teams, las grabaciones se almacenan en OneDrive/SharePoint (carpeta «Recordings»): descarga el .mp4 en tu equipo antes de procesarlo. En Zoom, la grabación local se encuentra en la carpeta Documents/Zoom, con un archivo audio.m4a separado si la opción está activada: ese es el archivo que debes usar directamente, sin pasar por el vídeo.
#Paso 2: la síntesis mediante un LLM local
La transcripción sin procesar es ilegible: no tiene puntuación fiable ni estructura y contiene repeticiones. Es el LLM local el que la transforma en un informe utilizable. Se envía el texto a Ollama con instrucciones precisas sobre el formato de salida esperado.
La forma más sencilla de probar: enviar la transcripción a ollama run mediante una tubería. El modelo recibe el prompt seguido del texto de la reunión.
Para uso recurrente, es mejor usar la API REST de Ollama en el puerto 11434: separa correctamente el mensaje de sistema (el rol y el formato) del contenido (la transcripción) y hace que el resultado sea reutilizable en un script.
#El prompt que devuelve decisiones y acciones de forma clara
Esta es la clave de un buen informe de reunión generado por IA. Un prompt vago produce un extenso bloque de texto a modo de resumen; un prompt estructurado produce un documento directamente utilizable. La clave: imponer un formato de salida explícito, dividido en secciones, y pedir al modelo que distinga claramente lo que se ha decidido de lo que aún queda por hacer.
- Formato impuesto
- Los títulos de sección (##) obligan al modelo a organizar la información en lugar de mezclarlo todo. Obtienes un resultado homogéneo de una reunión a otra.
- La regla contra las alucinaciones
- «Incluye solo lo que realmente se dice» y «no especificado» reducen considerablemente el riesgo de que el LLM invente un plazo o un responsable que no exista.
- El responsable entre corchetes
- Indicar [Responsable] al inicio de cada acción permite pasar directamente del acta a la acción: se sabe quién hace qué de un vistazo.
#Automatizar todo el pipeline
Una vez validadas las dos etapas, se encadenan en un solo script: pásale un archivo de reunión y generará el informe de la reunión en Markdown. Así, el procedimiento se convierte en una herramienta de uso diario.
Ajusta synthese.py para que lea el archivo pasado como argumento y escriba el resultado en la salida estándar. Así obtienes un comando único: ./compte-rendu.sh reunion_teams.mp4, y el resumen en Markdown aparece unos minutos después, sin que un solo byte abandone la máquina.
#Solución de problemas
- Transcripción que sale en inglés
- Whisper ha detectado mal el idioma debido a un inicio silencioso o bilingüe. Fuerza siempre --language French (o language="fr").
- Nombres propios mal escritos
- Es normal: Whisper adivina fonéticamente. Añade un paso rápido de corrección en el prompt de síntesis («corrige los nombres claramente mal transcritos») o proporciona un glosario de nombres al LLM.
- Reunión demasiado larga para el contexto
- Divide la transcripción en bloques de aproximadamente 3.000 palabras, resume cada uno y haz una síntesis de los resúmenes. Aumenta también num_ctx en la llamada a Ollama si tu VRAM lo permite.
- Whisper muy lento
- Pasa a faster-whisper, activa vad_filter, usa un modelo más pequeño (medium → small) o pasa a ejecutar el modelo en GPU. whisper.cpp también es una buena opción en una máquina sin GPU.
- Voces que se superponen
- Whisper no distingue a los hablantes. Para un informe que indique «quién dijo qué», hay que añadir previamente una etapa de diarización (por ejemplo, pyannote), un tema que merece tratarse por separado.
#Para ir más allá
Esta guía combina dos módulos ya tratados en detalle en el sitio. Para profundizar en cada paso o reforzar la seguridad del conjunto:
- Whisper + Ollama: pipeline de transcripción y resumen 100% local
- La guía de referencia sobre el componente de audio, con las variantes de implementación de Whisper y un ejemplo completo, de principio a fin, de una reunión de una hora.
- Elegir tu cuantización (Q4, Q5, Q8, FP16)
- Para que un modelo de resumen de 14B o 32B quepa en tu GPU sin degradar la calidad del acta de la reunión.
- LLM local y RGPD: cumplimiento normativo para los datos privados en la empresa
- La vertiente normativa: procesar reuniones en local simplifica el cumplimiento normativo; esta guía detalla lo que aún queda por documentar.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.