Compte-rendu de réunion automatique : Whisper + LLM 100 % local
Un compte rendu de réunion par IA, c'est deux briques : transcrire l'audio, puis résumer le texte. Le problème, c'est que la plupart des outils SaaS envoient l'enregistrement complet de votre réunion — noms, chiffres, stratégie — sur des serveurs tiers. Ce guide monte le même pipeline entièrement en local : Whisper pour la transcription, un LLM Ollama pour extraire décisions et actions, et rien qui ne quitte votre machine.
#Pourquoi le local s'impose pour les réunions sensibles
Une réunion, ce n'est pas un fichier anodin. En une heure d'enregistrement, on trouve des noms de clients, des montants, des arbitrages RH, des orientations produit non annoncées, parfois des données personnelles au sens du RGPD. Confier cet audio à un service de compte rendu automatique dans le cloud, c'est accepter que tout ce contenu soit transféré, traité et potentiellement conservé par un tiers.
- Confidentialité réelle
- L'audio et la transcription restent sur votre poste. Aucune donnée métier ne transite par un serveur externe qui pourrait la journaliser ou l'entraîner.
- Conformité RGPD simplifiée
- Pas de transfert vers un sous-traitant, souvent hors UE. Le volet « transfert de données personnelles » de votre analyse d'impact disparaît à la source.
- Zéro coût récurrent
- Pas d'abonnement par utilisateur ni de facturation à la minute transcrite. Une fois la machine en place, vous traitez autant de réunions que vous voulez.
- Fonctionne hors ligne
- Un déplacement, un site sans connexion fiable, une réunion en salle isolée : le traitement reste disponible sans Internet.
#Le principe du pipeline en deux temps
Un compte rendu de réunion par IA se décompose toujours en deux étapes distinctes, qu'il ne faut pas confondre. La première transforme le son en texte : c'est le rôle de Whisper, le modèle de reconnaissance vocale d'OpenAI, dont plusieurs implémentations open source tournent parfaitement en local. La seconde transforme ce texte brut en document structuré : c'est le rôle d'un LLM local servi par Ollama.
- Transcription (Whisper)
- Entrée : un fichier audio ou vidéo. Sortie : le texte intégral de la réunion, éventuellement horodaté. C'est du calcul lourd mais mécanique.
- Synthèse (LLM Ollama)
- Entrée : la transcription. Sortie : un compte rendu — résumé, décisions prises, actions à mener avec leur responsable. C'est là que le prompt fait toute la différence.
Séparer les deux étapes a un avantage pratique : vous pouvez rejouer la synthèse autant de fois que vous voulez, avec des prompts différents, sans refaire la transcription qui est la partie la plus lente.
#Prérequis
- Ollama installé
- Le daemon écoute par défaut sur http://localhost:11434. Si ce n'est pas encore fait, voyez le guide d'installation d'Ollama listé en bas de page.
- Un LLM de synthèse
- Un modèle 14B en Q4_K_M (≈9 Go de VRAM) bon en français suffit largement. Qwen2.5 14B ou Mistral-Small sont d'excellents choix pour du résumé structuré.
- Whisper
- Une implémentation locale : openai-whisper (simple), faster-whisper (rapide) ou whisper.cpp (léger, sans GPU). Ce guide utilise les deux premières.
- ffmpeg
- Indispensable pour lire les formats vidéo (mp4 de Teams/Zoom) et convertir l'audio. Whisper s'appuie dessus en coulisses.
- Matériel
- Un GPU accélère fortement Whisper, mais medium tourne aussi sur CPU (plus lentement). Comptez ~2 Go de VRAM pour le modèle small, davantage pour large-v3.
#Étape 1 : transcrire l'audio de la réunion avec Whisper
L'installation la plus directe passe par le paquet openai-whisper, qui fournit une commande en ligne prête à l'emploi. Installez-le dans un environnement Python, avec ffmpeg côté système.
La transcription tient ensuite en une commande. On précise le modèle, la langue (la forcer évite les erreurs de détection sur les réunions courtes) et le format de sortie texte.
Vous obtenez un fichier reunion.txt contenant l'intégralité de la réunion. Si vous voulez aussi des sous-titres horodatés (utile pour retrouver un passage), ajoutez --output_format srt, ou all pour tout générer d'un coup.
Pour une réunion d'une heure, la transcription peut être longue sur CPU. C'est là qu'intervient faster-whisper, une réimplémentation qui exploite CTranslate2 et va nettement plus vite pour une qualité identique. Voici un script Python qui transcrit et enregistre le texte.
#Traiter un enregistrement Teams ou Zoom
Les enregistrements Teams et Zoom sont des fichiers vidéo .mp4 (parfois .m4a pour l'audio seul). Whisper sait les lire directement puisqu'il s'appuie sur ffmpeg, mais extraire d'abord la piste audio en mono 16 kHz est plus fiable et plus rapide — surtout avec whisper.cpp qui l'exige.
- -ar 16000
- Rééchantillonne à 16 kHz, la fréquence attendue par Whisper. Inutile de garder du 48 kHz : la parole n'en a pas besoin.
- -ac 1
- Fusionne les canaux en mono. Une réunion n'a aucun intérêt à rester stéréo pour de la transcription.
- -c:a pcm_s16le
- Sort du WAV non compressé, le format le plus sûr en entrée de Whisper.
Où trouver le fichier ? Sur Teams, les enregistrements atterrissent dans OneDrive/SharePoint (dossier « Recordings ») : téléchargez le .mp4 en local avant traitement. Sur Zoom, l'enregistrement local se trouve dans le dossier Documents/Zoom, avec un fichier audio.m4a séparé si l'option est activée — c'est celui-là qu'il faut viser directement, sans passer par la vidéo.
#Étape 2 : la synthèse par un LLM local
La transcription brute est illisible : pas de ponctuation fiable, aucune structure, des répétitions. C'est le LLM local qui la transforme en compte rendu exploitable. On envoie le texte à Ollama avec des consignes précises sur le format de sortie attendu.
Le plus simple pour tester : piper le transcript dans ollama run. Le modèle reçoit le prompt suivi du texte de la réunion.
Pour un usage récurrent, mieux vaut passer par l'API REST d'Ollama sur le port 11434 : elle sépare proprement le message système (le rôle et le format) du contenu (la transcription), et rend le résultat réutilisable dans un script.
#Le prompt qui sort décisions et actions proprement
C'est le cœur d'un bon compte rendu de réunion par IA. Un prompt vague donne un pavé de résumé ; un prompt structuré donne un document directement utilisable. La clé : imposer un format de sortie explicite, en sections, et demander au modèle de distinguer nettement ce qui est décidé de ce qui reste à faire.
- Un format imposé
- Les titres de section (##) forcent le modèle à trier l'information au lieu de tout mélanger. Vous obtenez un rendu homogène d'une réunion à l'autre.
- La règle anti-hallucination
- « Ne reprends que ce qui est réellement dit » et « non précisé » réduisent fortement le risque que le LLM invente une échéance ou un responsable qui n'existe pas.
- Le responsable entre crochets
- Formaliser [Responsable] en tête d'action rend le compte rendu directement actionnable — on sait qui fait quoi d'un coup d'œil.
#Automatiser tout le pipeline
Une fois les deux étapes validées, on les enchaîne dans un seul script : donnez-lui un fichier de réunion, il produit le compte rendu en Markdown. C'est ce qui transforme la manipulation en outil quotidien.
Adaptez synthese.py pour qu'il lise le fichier passé en argument et écrive le résultat sur la sortie standard. Vous obtenez alors une commande unique : ./compte-rendu.sh reunion_teams.mp4, et le compte rendu Markdown apparaît quelques minutes plus tard, sans qu'un seul octet n'ait quitté la machine.
#Dépannage
- Transcription qui part en anglais
- Whisper a mal détecté la langue sur un début silencieux ou bilingue. Forcez toujours --language French (ou language="fr").
- Noms propres mal orthographiés
- Normal : Whisper devine phonétiquement. Ajoutez un rapide passage de correction dans le prompt de synthèse (« corrige les noms manifestement mal transcrits ») ou fournissez un glossaire des noms au LLM.
- Réunion trop longue pour le contexte
- Découpez la transcription en blocs de ~3 000 mots, résumez chacun, puis faites une synthèse des résumés. Augmentez aussi num_ctx dans l'appel Ollama si votre VRAM le permet.
- Whisper très lent
- Passez à faster-whisper, activez vad_filter, réduisez le modèle (medium → small) ou basculez sur GPU. whisper.cpp est aussi une bonne option sur machine sans GPU.
- Voix qui se chevauchent
- Whisper ne sépare pas les locuteurs. Pour un compte rendu « qui a dit quoi », il faut ajouter une étape de diarisation (ex. pyannote) en amont — sujet à part entière.
#Pour aller plus loin
Ce guide combine deux briques déjà traitées en détail sur le site. Pour approfondir chaque étape ou sécuriser l'ensemble :
- Whisper + Ollama : pipeline transcription et résumé 100% local
- Le guide de référence sur la brique audio, avec les variantes d'implémentation Whisper et un exemple de réunion d'une heure de bout en bout.
- Choisir sa quantification (Q4, Q5, Q8, FP16)
- Pour faire tenir un modèle de synthèse 14B ou 32B sur votre GPU sans dégrader la qualité du compte rendu.
- LLM local et RGPD : la conformité données privées en entreprise
- Le pendant réglementaire : traiter des réunions en local simplifie la conformité, ce guide détaille ce qu'il reste à documenter.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.