Intermédiaire 12 minBureau

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.

Par Marie L.·Màj 2026-07-31·Testé sur Windows, macOS, Linux

#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.
i
Local ne dispense pas de prévenir
Enregistrer une réunion reste soumis à des règles : informez les participants et recueillez leur accord. Le local règle la question du transfert de données, pas celle du consentement à l'enregistrement.

#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.
Quel modèle Whisper choisir
Pour du français, small donne déjà de bons résultats sur un audio propre. Passez à medium pour une réunion à plusieurs voix ou un son moyen, et à large-v3 quand la qualité de transcription prime sur la vitesse (accents, jargon, chevauchements).

#É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.

Installation
# ffmpeg (Debian/Ubuntu)
sudo apt install ffmpeg

# Whisper (dans un venv de préférence)
pip install -U openai-whisper

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.

Terminal
whisper reunion.mp3 \
  --model medium \
  --language French \
  --output_format txt \
  --output_dir ./transcriptions

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.

transcrire.py
from faster_whisper import WhisperModel

# device="cuda" si GPU NVIDIA, sinon "cpu"
model = WhisperModel("medium", device="cuda", compute_type="float16")

segments, info = model.transcribe(
    "reunion.mp3",
    language="fr",
    vad_filter=True,   # coupe les silences, gagne du temps
)

with open("reunion.txt", "w", encoding="utf-8") as f:
    for seg in segments:
        f.write(seg.text.strip() + "\n")

print(f"Langue détectée : {info.language} — durée : {info.duration:.0f}s")
L'option vad_filter
Le filtre VAD (détection d'activité vocale) supprime les blancs et les silences avant transcription. Sur une réunion réelle, pleine de pauses et de temps morts, il accélère sensiblement le traitement sans dégrader le texte utile.

#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.

Extraire l'audio du .mp4
ffmpeg -i reunion_teams.mp4 \
  -ar 16000 -ac 1 \
  -c:a pcm_s16le \
  reunion.wav
-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.

!
Ne traitez pas depuis le cloud SaaS
Toute l'idée du local tombe si vous laissez l'IA du fournisseur (Teams Premium, Zoom AI Companion) générer le compte rendu côté serveur. Récupérez le fichier brut et traitez-le sur votre poste : c'est la seule façon de garantir que rien ne fuit.

#É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.

Synthèse rapide
ollama run qwen2.5:14b "Résume ce compte rendu de réunion en français, \
en listant les points clés, les décisions et les actions à mener. \
Voici la transcription :

$(cat reunion.txt)"

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.

synthese.py
import requests

transcript = open("reunion.txt", encoding="utf-8").read()

SYSTEM = """Tu es un assistant qui rédige des comptes rendus de réunion clairs et concis en français.
Tu ne inventes rien : tu ne t'appuies que sur la transcription fournie."""

resp = requests.post("http://localhost:11434/api/chat", json={
    "model": "qwen2.5:14b",
    "stream": False,
    "messages": [
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": PROMPT + "\n\n---\n" + transcript},
    ],
})

print(resp.json()["message"]["content"])
i
Attention à la fenêtre de contexte
Une réunion d'une heure produit facilement 8 000 à 12 000 mots. Vérifiez que le contexte du modèle est assez grand (num_ctx). Au-delà, découpez la transcription en sections et résumez par morceaux avant une synthèse finale — un mini pipeline map-reduce.

#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.

Prompt de synthèse
À partir de la transcription de réunion ci-dessous, produis un compte rendu structuré en français, en respectant EXACTEMENT ce format :

## Résumé
Trois à cinq phrases sur l'objet et les conclusions de la réunion.

## Décisions prises
- Une puce par décision actée, formulée clairement.

## Actions à mener
- [Responsable] Action précise — échéance si mentionnée.

## Points en suspens
- Sujets évoqués sans conclusion, à traiter plus tard.

Règles :
- Ne reprends que ce qui est réellement dit dans la transcription.
- Si le responsable ou l'échéance d'une action n'est pas mentionné, écris « non précisé ».
- Reste factuel, pas de reformulation marketing.
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.
Testez plusieurs modèles sur la même transcription
Comme la transcription est déjà faite, comparer les modèles ne coûte rien : rejouez la synthèse avec Qwen2.5 14B puis Mistral-Small sur le même reunion.txt. Vous verrez vite lequel structure le mieux les actions en français.

#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.

compte-rendu.sh
#!/usr/bin/env bash
set -euo pipefail

INPUT="$1"                 # reunion.mp4 ou reunion.mp3
BASE="$(basename "${INPUT%.*}")"

# 1. Extraire l'audio en 16 kHz mono
ffmpeg -y -i "$INPUT" -ar 16000 -ac 1 -c:a pcm_s16le "$BASE.wav"

# 2. Transcrire
whisper "$BASE.wav" --model medium --language French \
  --output_format txt --output_dir .

# 3. Synthétiser avec le LLM local
python synthese.py "$BASE.txt" > "$BASE-compte-rendu.md"

echo "Compte rendu prêt : $BASE-compte-rendu.md"

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.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.