Trascrivere automaticamente una riunione, sottotitolare un video o convertire un'intervista in testo è uno dei compiti in cui l'intelligenza artificiale fa davvero risparmiare ore di lavoro. La buona notizia è che puoi farlo gratis, sul tuo computer, senza inviare l'audio a nessun servizio esterno: ti basta Whisper, il modello di riconoscimento vocale open source di OpenAI, e uno dei suoi progetti derivati ancora più veloci. Questa guida ti accompagna passo passo, dalla scelta dello strumento giusto fino alla generazione dei sottotitoli, con i comandi reali da copiare.
A chi serve questa guida e cosa otterrai
È pensata per chi ha file audio o video (riunioni, lezioni, podcast, interviste, video di YouTube scaricati) e vuole ottenere una trascrizione in testo o un file di sottotitoli, mantenendo tutto in locale per ragioni di privacy o di costo. Alla fine saprai: installare gli strumenti, scegliere la dimensione del modello adatta al tuo PC, trascrivere un file e generare automaticamente i sottotitoli in formato SRT, anche in italiano.
Prerequisiti reali:
- Un computer Windows, macOS o Linux. Funziona anche solo con la CPU, ma una scheda grafica NVIDIA (o un Mac Apple Silicon) accelera molto.
- Python 3.9 o superiore installato (per le versioni in Python).
- FFmpeg installato: è il programma che legge e converte i file audio/video. È il requisito più spesso dimenticato.
- Qualche dimestichezza con il terminale (riga di comando).
Quale strumento scegliere: Whisper, faster-whisper o whisper.cpp
Esistono tre vie principali per usare Whisper in locale. Scegli in base alle tue esigenze:
- OpenAI Whisper (il pacchetto originale): semplice e ufficiale, ma più lento. Buono per provare.
- faster-whisper: reimplementazione basata su CTranslate2, fino a 4 volte più veloce e con minor consumo di memoria, a parità di qualità. È la prima scelta consigliata per la maggior parte degli utenti su PC con GPU.
- whisper.cpp: versione in C++ leggerissima, perfetta su Mac Apple Silicon e su computer senza scheda grafica dedicata o senza Python. Ottima per chi vuole il minimo ingombro.
Tabella riassuntiva delle dimensioni del modello (valgono per tutte le versioni):
| Modello | Memoria indicativa | Quando usarlo |
|---|---|---|
| tiny / base | ~1-1,5 GB | Prove rapide, audio chiaro, poca potenza |
| small | ~2 GB | Buon compromesso per uso quotidiano |
| medium | ~5 GB | Qualità alta, serve una GPU discreta |
| large-v3 | ~10 GB | Qualità migliore, ideale per l'italiano e l'audio difficile |
Procedimento con faster-whisper (la via consigliata)
Passo 1 — Installa FFmpeg. Su Windows con il gestore pacchetti winget: winget install Gyan.FFmpeg. Su macOS con Homebrew: brew install ffmpeg. Su Linux (Debian/Ubuntu): sudo apt install ffmpeg.
Passo 2 — Crea un ambiente Python e installa il pacchetto. Conviene isolare l'installazione:
python -m venv venv# Windows: venv\Scripts\activate# macOS/Linux:source venv/bin/activatepip install faster-whisperPasso 3 — Trascrivi un file. Crea un file trascrivi.py con questo contenuto:
from faster_whisper import WhisperModel# "small" e' un buon punto di partenza; usa "large-v3" per la massima qualita'model = WhisperModel("small", device="auto", compute_type="auto")segments, info = model.transcribe("riunione.mp3", language="it")print("Lingua rilevata:", info.language)for s in segments: print(f"[{s.start:.1f}s -> {s.end:.1f}s] {s.text}")Eseguilo con python trascrivi.py. Vedrai comparire la trascrizione con i tempi di inizio e fine di ogni segmento. Specificare language="it" migliora la precisione sull'italiano; se ometti il parametro, Whisper rileva la lingua da solo.
Generare i sottotitoli in formato SRT
Per ottenere un file di sottotitoli pronto da caricare in un lettore video, basta scrivere i segmenti nel formato SRT. Aggiungi questa funzione allo script:
def secondi_in_srt(t): h = int(t // 3600); m = int((t % 3600) // 60) s = int(t % 60); ms = int((t - int(t)) * 1000) return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"with open("sottotitoli.srt", "w", encoding="utf-8") as f: for i, s in enumerate(segments, start=1): f.write(f"{i}\n{secondi_in_srt(s.start)} --> {secondi_in_srt(s.end)}\n{s.text.strip()}\n\n")Il risultato è un file sottotitoli.srt che puoi affiancare al video (stesso nome del file video) o caricare su un editor. Nota: poiché i segmenti vengono "consumati" durante l'iterazione, se hai già stampato i segmenti prima, riesegui la trascrizione o trasformali in lista con segments = list(segments).
L'alternativa whisper.cpp (senza Python, ottima su Mac)
Se non vuoi usare Python o lavori su un Mac Apple Silicon, whisper.cpp è leggerissimo. In sintesi:
git clone https://github.com/ggml-org/whisper.cppcd whisper.cppcmake -B build && cmake --build build --config Release# scarica un modello (es. small)sh ./models/download-ggml-model.sh small# trascrivi e genera SRT (l'audio deve essere WAV 16kHz)./build/bin/whisper-cli -m models/ggml-small.bin -f audio.wav -l it -osrtPer convertire un qualsiasi file in WAV 16 kHz prima della trascrizione: ffmpeg -i input.mp4 -ar 16000 -ac 1 audio.wav.
Casi avanzati: chi parla e quando (diarizzazione)
Se ti serve sapere chi dice cosa — per esempio in un'intervista a due voci — il progetto WhisperX aggiunge timestamp parola per parola e la diarizzazione degli interlocutori. Si installa con pip install whisperx e richiede un token di Hugging Face per i modelli di diarizzazione. È più complesso da configurare, ma è la soluzione quando i sottotitoli devono indicare i diversi parlanti.
Un trucco utile: dopo la trascrizione puoi passare il testo grezzo a un modello linguistico (ChatGPT, Claude, Gemini o un modello locale) per ripulirlo. Un prompt efficace è:
Questa è la trascrizione automatica di una riunione. Correggi la punteggiatura, dividi in paragrafi leggibili, mantieni fedele il contenuto senza riassumere e segnala con [?] le parti che sembrano errori di trascrizione.
Il risultato atteso è un testo molto più pulito e pronto per essere letto o pubblicato.
Errori comuni e come risolverli
- «ffmpeg not found» o errore nell'apertura del file: FFmpeg non è installato o non è nel PATH. Reinstallalo e riavvia il terminale.
- «CUDA out of memory»: il modello è troppo grande per la tua GPU. Scendi di taglia (da large a medium o small) oppure imposta
device="cpu". - Trascrizione molto lenta: stai usando la CPU. È normale; usa un modello più piccolo, oppure una GPU. Su faster-whisper imposta
compute_type="int8"per ridurre il carico. - Parole sbagliate su nomi propri o termini tecnici: passa un suggerimento iniziale con il parametro
initial_promptelencando i termini ricorrenti, così il modello li riconosce meglio.
Quando conviene il cloud invece del locale
Il locale è imbattibile per privacy e costo zero, ma ha senso valutare un servizio cloud quando hai pochissima potenza di calcolo, devi trascrivere grandi volumi in tempi rapidi o ti serve qualità di altissimo livello senza configurare nulla. Soluzioni come la trascrizione di ElevenLabs o i sottotitoli generati on-device dei sistemi Apple e Android coprono questi casi. La regola pratica: se i contenuti sono riservati o il volume è gestibile, resta in locale con faster-whisper; se hai vincoli di tempo o di hardware, valuta il cloud. La documentazione di riferimento di Whisper e di faster-whisper è il punto di partenza per approfondire opzioni e parametri.




