Intermedio 12 minDesktop

Resoconto automatico della riunione: Whisper + LLM 100 % locale

Un resoconto di riunione generato dall'IA si basa su due componenti: trascrivere l'audio, poi riassumere il testo. Il problema è che la maggior parte degli strumenti SaaS invia la registrazione completa della tua riunione — nomi, cifre, strategia — a server di terzi. Questa guida realizza la stessa pipeline interamente in locale: Whisper per la trascrizione, un LLM Ollama per estrarre decisioni e azioni, senza che nulla lasci il tuo computer.

Di Marie L.·Agg. 2026-08-27·Testato su Windows, macOS e Linux

#Perché l'elaborazione in locale è necessaria per le riunioni sensibili

Una riunione non è un file innocuo. In un'ora di registrazione si trovano nomi di clienti, importi, decisioni sulle risorse umane, indirizzi di sviluppo del prodotto non annunciati, a volte dati personali ai sensi del GDPR. Affidare questo audio a un servizio cloud di redazione automatica dei resoconti significa accettare che tutto questo contenuto venga trasferito, elaborato e potenzialmente conservato da un soggetto terzo.

Confidenzialità reale
L'audio e la trascrizione restano sul tuo computer. Nessun dato aziendale passa attraverso un server esterno che potrebbe registrarlo o usarlo per l'addestramento.
Conformità al RGPD semplificata
Nessun trasferimento a un responsabile del trattamento, spesso situato fuori dall'UE. La sezione «trasferimento dei dati personali» della tua analisi d'impatto viene eliminata alla fonte.
Nessun costo ricorrente
Nessun abbonamento per utente né fatturazione per minuto trascritto. Una volta installata la macchina, puoi elaborare tutte le riunioni che vuoi.
Funziona offline
Uno spostamento, una sede senza connessione affidabile, una riunione in una sala isolata: l'elaborazione rimane disponibile senza Internet.
i
L'esecuzione in locale non esonera dall'informare i partecipanti
Registrare una riunione resta soggetto a regole: informa i partecipanti e ottieni il loro consenso. L'elaborazione in locale risolve la questione del trasferimento dei dati, non quella del consenso alla registrazione.

#Il principio della pipeline in due fasi

Il kit IA Locale

Il tuo ChatGPT privato e gratuito sulla tua macchina in 1 ora — LM Studio, Ollama, Open WebUI, i tuoi documenti, senza cloud.

  • Spazio online a vita
  • PDF + file
  • Aggiornamenti a vita

Un resoconto di riunione generato dall'IA si articola sempre in due fasi distinte, che non vanno confuse. La prima trasforma l'audio in testo: è il compito di Whisper, il modello di riconoscimento vocale di OpenAI, di cui diverse implementazioni open source funzionano perfettamente in locale. La seconda trasforma questo testo grezzo in un documento strutturato: è il compito di un LLM locale reso disponibile tramite Ollama.

Trascrizione (Whisper)
Input: un file audio o video. Output: il testo integrale della riunione, eventualmente con indicazioni temporali. È un'elaborazione computazionalmente pesante, ma meccanica.
Sintesi (LLM Ollama)
Input: la trascrizione. Output: un resoconto — sintesi, decisioni prese, azioni da intraprendere con il rispettivo responsabile. È qui che il prompt fa tutta la differenza.

Separare le due fasi ha un vantaggio pratico: puoi ripetere la sintesi tutte le volte che vuoi, con prompt diversi, senza rifare la trascrizione, che è la parte più lenta.

#Prerequisiti

Ollama installato
Il daemon ascolta per impostazione predefinita su http://localhost:11434. Se non hai ancora installato Ollama, consulta la guida di installazione elencata in fondo alla pagina.
Un modello LLM di sintesi
Un modello da 9 a 12B in Q4_K_M (≈7 GB di VRAM) con buone prestazioni in francese è più che sufficiente. Qwen 3.5 9B (256k di contesto, perfetto per trascrizioni lunghe) o Gemma 4 12B sono ottime scelte per riassunti strutturati.
Whisper
Implementazione locale: openai-whisper (semplice), faster-whisper (veloce) o whisper.cpp (leggero, senza GPU). Questa guida utilizza le prime due.
ffmpeg
Indispensabile per leggere i formati video (mp4 di Teams/Zoom) e convertire l'audio. Whisper lo usa dietro le quinte.
Hardware
Una GPU accelera notevolmente Whisper, ma medium funziona anche su CPU (più lentamente). Prevedi circa 2 GB di VRAM per il modello small, di più per large-v3.
→
Quale modello Whisper scegliere
Per il francese, small dà già buoni risultati con un audio pulito. Passa a medium per una riunione con più voci o un audio di qualità media, e a large-v3 quando la qualità della trascrizione conta più della velocità (accenti, gergo, sovrapposizioni).

#Passo 1: trascrivere l’audio della riunione con Whisper

Il metodo di installazione più diretto è usare il pacchetto openai-whisper, che fornisce un comando da riga di comando pronto all'uso. Installalo in un ambiente Python, con ffmpeg installato a livello di sistema.

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

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

La trascrizione si ottiene poi con un solo comando. Si specificano il modello, la lingua (forzarla evita errori di rilevamento nelle riunioni brevi) e il formato di output testuale.

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

Ottieni un file reunion.txt contenente l'intera riunione. Se vuoi anche sottotitoli con timestamp (utili per ritrovare un passaggio), aggiungi --output_format srt, oppure all per generare tutto in una volta.

Per una riunione di un'ora, la trascrizione su CPU può richiedere molto tempo. È qui che entra in gioco faster-whisper, una reimplementazione che sfrutta CTranslate2 ed è nettamente più veloce a parità di qualità. Ecco uno script Python che trascrive e salva il testo.

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'opzione vad_filter
Il filtro VAD (rilevamento dell'attività vocale) elimina i vuoti e i silenzi prima della trascrizione. In una riunione reale, piena di pause e tempi morti, accelera sensibilmente l'elaborazione senza compromettere il testo utile.

#Elaborare una registrazione di Teams o Zoom

Le registrazioni di Teams e Zoom sono file video .mp4 (a volte .m4a per il solo audio). Whisper sa leggerli direttamente perché si basa su ffmpeg, ma estrarre prima la traccia audio in mono a 16 kHz è più affidabile e più veloce — soprattutto con whisper.cpp, che lo richiede.

Estrarre l'audio dal .mp4
ffmpeg -i reunion_teams.mp4 \
  -ar 16000 -ac 1 \
  -c:a pcm_s16le \
  reunion.wav
-ar 16000
Ricampiona a 16 kHz, la frequenza attesa da Whisper. Non serve mantenere i 48 kHz: il parlato non ne ha bisogno.
-ac 1
Unisce i canali in mono. Per la trascrizione non c'è alcun vantaggio nel mantenere in stereo la registrazione di una riunione.
-c:a pcm_s16le
Produce WAV non compresso, il formato più sicuro come input per Whisper.

Dove trovare il file? Su Teams, le registrazioni vengono salvate in OneDrive/SharePoint (cartella « Recordings »): scarica il .mp4 in locale prima di elaborarlo. Su Zoom, la registrazione locale si trova nella cartella Documents/Zoom, con un file audio.m4a separato se l'opzione è attivata: è proprio questo il file da utilizzare direttamente, senza passare dal video.

!
Non elaborare i dati nel cloud SaaS
L'intera ragion d'essere dell'elaborazione locale viene meno se lasci che l'IA del fornitore (Teams Premium, Zoom AI Companion) generi il verbale lato server. Recupera il file grezzo ed elaboralo sul tuo computer: è l'unico modo per garantire che nessun dato trapeli.

#Passo 2: la sintesi con un LLM locale

La trascrizione grezza è illeggibile: nessuna punteggiatura affidabile, nessuna struttura, ripetizioni. È il LLM locale a trasformarla in un resoconto utilizzabile. Si invia il testo a Ollama con istruzioni precise sul formato di output atteso.

Il modo più semplice per fare una prova: passare la trascrizione tramite una pipe a ollama run. Il modello riceve il prompt seguito dal testo della riunione.

Sintesi rapida
ollama run qwen3.5:9b "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)"

Per un utilizzo ricorrente, meglio usare l’API REST di Ollama sulla porta 11434: separa correttamente il messaggio di sistema (il ruolo e il formato) dal contenuto (la trascrizione) e rende il risultato riutilizzabile in uno 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": "qwen3.5:9b",
    "stream": False,
    "messages": [
        {"role": "system", "content": SYSTEM},
        {"role": "user", "content": PROMPT + "\n\n---\n" + transcript},
    ],
})

print(resp.json()["message"]["content"])
i
Attenzione alla finestra di contesto
Una riunione di un'ora produce facilmente da 8.000 a 12.000 parole. Verifica che la finestra di contesto del modello sia abbastanza ampia (num_ctx). Se la trascrizione supera questo limite, suddividila in sezioni e riassumila a blocchi prima di una sintesi finale — una mini pipeline map-reduce.

#Il prompt che estrae decisioni e azioni in modo chiaro

È il cuore di un buon resoconto di riunione generato dall'IA. Un prompt vago produce un lungo blocco di testo riassuntivo; un prompt strutturato produce un documento direttamente utilizzabile. La chiave: imporre un formato di output esplicito, suddiviso in sezioni, e chiedere al modello di distinguere chiaramente ciò che è stato deciso da ciò che resta da fare.

Prompt di sintesi
À 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 formato obbligatorio
I titoli di sezione (##) costringono il modello a classificare l'informazione piuttosto che mescolarla. Ottieni un output omogeneo da una riunione all'altra.
La regola contro le allucinazioni
« Riprendi solo ciò che è realmente detto » e « non specificato » riducono notevolmente il rischio che il LLM inventi una scadenza o un responsabile che non esiste.
Il responsabile tra parentesi quadre
Indicare sistematicamente [Responsabile] all'inizio di ogni azione rende il verbale direttamente utilizzabile per passare all'azione — si capisce chi fa cosa a colpo d'occhio.
→
Prova diversi modelli su una stessa trascrizione
Poiché la trascrizione è già fatta, confrontare i modelli non costa nulla: riprova la sintesi con Qwen 3.5 9B poi Gemma 4 12B sullo stesso reunion.txt. Capirai subito quale struttura meglio le azioni in francese.

#Automatizzare tutta la pipeline

Una volta verificate le due fasi, le si esegue in sequenza in un unico script: gli passi un file della riunione e lo script produce il resoconto in Markdown. È questo che trasforma la procedura in uno strumento quotidiano.

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"

Adatta synthese.py in modo che legga il file passato come argomento e scriva il risultato sullo standard output. Ottieni così un unico comando: ./compte-rendu.sh reunion_teams.mp4, e il resoconto in Markdown appare qualche minuto dopo, senza che un solo byte abbia lasciato la macchina.

#Risoluzione dei problemi

Trascrizione che passa all'inglese
Whisper ha rilevato erroneamente la lingua a causa di un inizio silenzioso o bilingue. Forza sempre --language French (o language="fr").
Nomi propri scritti in modo errato
È normale: Whisper cerca di indovinare in base alla fonetica. Aggiungi un breve passaggio di correzione nel prompt di sintesi («correggi i nomi palesemente trascritti male») oppure fornisci un glossario dei nomi all'LLM.
Riunione troppo lunga per il contesto
Dividi la trascrizione in blocchi di circa 3.000 parole, riassumi ciascun blocco e poi fai una sintesi dei riassunti. Aumenta anche num_ctx nella chiamata a Ollama se la tua VRAM lo permette.
Whisper molto lento
Passa a faster-whisper, attiva vad_filter, scegli un modello più piccolo (medium → small) o passa alla GPU. Anche whisper.cpp è una buona opzione su una macchina senza GPU.
Voci che si sovrappongono
Whisper non distingue i parlanti. Per un resoconto di «chi ha detto cosa», occorre aggiungere a monte una fase di diarizzazione (es. pyannote) — un argomento a sé stante.

#Per approfondire

Questo manuale combina due componenti già trattate in dettaglio sul sito. Per approfondire ogni passaggio o per rendere più sicuro l'intero sistema:

Whisper + Ollama: pipeline di trascrizione e riassunto 100% locale
La guida di riferimento sulla componente audio, con le varianti di implementazione di Whisper e un esempio completo, dall'inizio alla fine, relativo a una riunione di un'ora.
Scegliere la quantizzazione (Q4, Q5, Q8, FP16)
Per far rientrare un modello di sintesi da 14B o 32B nella memoria della tua GPU senza degradare la qualità del resoconto.
LLM locale e GDPR: conformità in materia di dati privati in azienda
Il complemento sul piano normativo: elaborare le riunioni in locale semplifica la conformità; questa guida spiega in dettaglio ciò che resta da documentare.
Questa guida ti è stata utile?

Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.