Trascrivere interviste, riunioni, lezioni o podcast a mano è una perdita di tempo che nessuno può più permettersi. Whisper, il modello di speech-to-text rilasciato da OpenAI in open source, gira sul tuo computer (anche solo con la CPU), trascrive 99 lingue con qualità da servizio commerciale e non manda i file in cloud. Questa guida ti porta da zero alla trascrizione automatica di un audio italiano, con timestamp parola per parola, in meno di mezz'ora.
A chi serve e cosa otterrai
Il tutorial è pensato per giornalisti, ricercatori, studenti, creator e sviluppatori che vogliono trascrivere materiale audio senza pagare un servizio come Otter, Sonix o Trint, senza limiti orari e senza preoccupazioni di privacy. Al termine avrai:
- Whisper installato in un ambiente virtuale Python pulito.
- Uno script che trascrive qualsiasi file audio o video in italiano (e in altre 98 lingue).
- Output in tre formati: testo semplice, sottotitoli SRT e VTT.
- Una versione potenziata con faster-whisper che gira 4 volte più veloce a parità di qualità.
Prerequisiti hardware
Whisper ha sei modelli, dal tiny al large-v3. La scelta dipende dal tuo hardware:
| Modello | Parametri | VRAM/RAM richiesta | Velocità (CPU) | Qualità |
|---|---|---|---|---|
tiny | 39M | ~1 GB | ~32x tempo reale | Bassa, errori frequenti |
base | 74M | ~1 GB | ~16x | Sufficiente per inglese |
small | 244M | ~2 GB | ~6x | Buona per italiano semplice |
medium | 769M | ~5 GB | ~2x | Ottima qualità multilingua |
large-v3 | 1550M | ~10 GB | ~1x | Massima qualità |
turbo | 809M | ~6 GB | ~8x | Vicino a large, molto più veloce |
In pratica: con un Mac M1/M2/M3 o un PC con GPU NVIDIA da 8 GB di VRAM, usa large-v3. Con un portatile recente solo CPU, parti da small o turbo. Per audio italiano pulito, turbo è spesso il miglior compromesso.
Installazione (Linux, macOS, Windows)
Whisper ha una dipendenza non Python: ffmpeg, che decodifica i file audio/video.
Passo 1: ffmpeg
Su macOS con Homebrew:
brew install ffmpegSu Ubuntu/Debian:
sudo apt update && sudo apt install -y ffmpegSu Windows, scarica il binario da gyan.dev e aggiungi la cartella bin al PATH. Verifica con ffmpeg -version.
Passo 2: ambiente Python e Whisper
mkdir whisper-locale && cd whisper-locale
python3 -m venv .venv
source .venv/bin/activate # su Windows: .venv\Scripts\activate
pip install --upgrade pip
pip install openai-whisperSu PC con GPU NVIDIA aggiungi anche PyTorch con CUDA per usarla:
pip install torch --index-url https://download.pytorch.org/whl/cu121Primo test: trascrivere un file audio
Crea trascrivi.py:
import whisper
model = whisper.load_model("turbo") # cambia con small/medium/large-v3 se serve
result = model.transcribe(
"intervista.mp3",
language="it",
fp16=False # mettere True solo se hai una GPU
)
print(result["text"])Alla prima esecuzione il modello scarica i pesi (la cartella di cache di default è ~/.cache/whisper). Per turbo sono ~1,5 GB. Una volta finito, lancia:
python trascrivi.pyHai la trascrizione completa in result["text"]. Se il file è di tipo non standard (m4a, wav, mp4, mkv) Whisper se la cava lo stesso grazie a ffmpeg.
Esportare in SRT, VTT e con timestamp parola per parola
Per i sottotitoli serve l'allineamento temporale. Whisper restituisce un array segments con inizio e fine di ciascuna frase:
import whisper
from whisper.utils import get_writer
model = whisper.load_model("turbo")
result = model.transcribe("video.mp4", language="it", word_timestamps=True)
# Esporta SRT (per VLC, Final Cut, Premiere)
writer = get_writer("srt", ".")
writer(result, "video.mp4")
# Esporta VTT (per web e YouTube)
writer = get_writer("vtt", ".")
writer(result, "video.mp4")Il parametro word_timestamps=True abilita i timestamp parola per parola, utili per karaoke, sottotitoli sincronizzati al singolo termine, montaggi video. Trovi i dati in result["segments"][i]["words"].
Faster-whisper: 4 volte più veloce, stessa qualità
Il progetto faster-whisper reimplementa Whisper su CTranslate2 ed è circa 4 volte più rapido a parità di qualità, consumando metà della VRAM. Per un'ora di audio italiano, su un Mac M2, si passa da circa 12 minuti a meno di 4.
Installazione:
pip install faster-whisperEsempio:
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cpu", compute_type="int8")
# Per GPU NVIDIA: device="cuda", compute_type="float16"
segments, info = model.transcribe("intervista.mp3", language="it", beam_size=5)
print(f"Lingua rilevata: {info.language} ({info.language_probability:.2f})")
for seg in segments:
print(f"[{seg.start:6.2f}s -> {seg.end:6.2f}s] {seg.text}")L'output mostra ogni segmento con inizio e fine. La trascrizione è uguale a quella del Whisper originale; la velocità no.
Migliorare la qualità su audio italiano
Tre accorgimenti che fanno una differenza enorme su materiale reale:
- Specifica sempre la lingua: senza
language="it", Whisper a volte sbaglia il riconoscimento iniziale e trascrive bestemmie sicule come fossero inglese. Costa zero, evita disastri. - Pulisci l'audio prima: con ffmpeg si può normalizzare il volume e ridurre il rumore prima di trascrivere. Esempio:
ffmpeg -i sporco.mp3 -af "highpass=f=200, lowpass=f=3000, afftdn" pulito.wav - Usa un prompt iniziale: passa al modello un esempio di vocabolario specifico (nomi, sigle aziendali, acronimi). Con il Whisper originale si fa così:
Questo aiuta a evitare che "PNRR" diventi "penere" o "AI Act" diventi "AI act" con la a minuscola.result = model.transcribe( "intervista.mp3", language="it", initial_prompt="Intervista a Marco Bianchi su PNRR, ESG e AI Act." )
Diarizzazione: sapere chi sta parlando
Whisper trascrive ma non distingue gli speaker. Per intervistatore + intervistato ("Andrea:" / "Luca:") servono librerie esterne. Quella più usata è WhisperX, che integra Whisper con pyannote per la diarizzazione.
pip install whisperxRichiede un account su Hugging Face e l'accettazione delle condizioni del modello pyannote (gratis). In cambio si ottiene una trascrizione con etichette per ciascun parlante - manna per giornalisti che lavorano su molte ore di registrato.
Errori comuni e soluzioni
FileNotFoundError: ffmpeg: ffmpeg non è nel PATH. Reinstalla con il package manager del tuo sistema o aggiungilo manualmente.RuntimeError: CUDA out of memory: hai una GPU troppo piccola perlarge-v3. Passa aturboo usamedium.- Trascrizione che si ripete a loop: tipico su audio con lunghi silenzi. Aggiungi
condition_on_previous_text=Falsenella chiamatatranscribe. - Lentezza estrema su CPU: stai usando
large-v3su CPU. Passa aturboo a faster-whisper concompute_type="int8". - Punteggiatura inesistente: succede coi modelli più piccoli (
tiny,base). Sali asmallo oltre.
Quando NON usare Whisper
Whisper è eccellente sul registrato. Per la trascrizione in tempo reale di flussi live - sottotitoli durante un webinar, dittatura medica - conviene WhisperLive, che è una versione streaming, oppure il servizio cloud di Deepgram o AssemblyAI. Per lingue minori e dialetti italiani molto stretti, prova NVIDIA Parakeet, che su qualche dialetto si comporta meglio del large-v3.
Cosa fare adesso
Hai una trascrizione gratis, illimitata, privata. I prossimi passi sensati sono tre: scriverti un piccolo wrapper che batcha decine di file in una cartella; collegare la trascrizione a un riassuntore (GPT-5.5, Claude Opus 4.8, Gemini, Mistral) per ottenere automaticamente sintesi e to-do dalle riunioni; pubblicare i sottotitoli SRT generati su YouTube o Vimeo. In tutti e tre i casi, l'audio non lascia mai il tuo computer.




