Trascrivere a mano un'ora di riunione o un'intervista e' un lavoro lungo e noioso, e i servizi online a pagamento sollevano un problema di privacy quando l'audio e' riservato. La buona notizia: Whisper, il modello di riconoscimento vocale di OpenAI, e' open source e gira gratis sul tuo computer, anche offline. In questa guida lo installiamo e lo usiamo per trasformare audio e video in testo e in sottotitoli, con l'italiano supportato molto bene.
A chi serve: giornalisti, studenti, ricercatori, creator e chiunque debba trascrivere parlato. Cosa otterrai: file di testo e sottotitoli .srt a partire da qualsiasi audio o video. Prerequisiti: Python 3.9+ installato, un po' di dimestichezza col terminale, e qualche GB di spazio per i modelli. Una GPU NVIDIA accelera molto, ma si lavora benissimo anche solo con la CPU usando il modello giusto.
Quale Whisper scegliere: tre strade
Esistono diverse implementazioni e conviene scegliere consapevolmente:
- openai-whisper (ufficiale): semplice, comando pronto all'uso. Ottimo per iniziare, ma piu' lento e affamato di memoria.
- faster-whisper (consigliato): una reimplementazione ottimizzata fino a 4 volte piu' veloce e con meno consumo di RAM, a parita' di qualita'. E' la prima scelta per la maggior parte degli usi.
- whisper.cpp: scritto in C++, perfetto per macchine deboli e per chi vuole un eseguibile leggero senza Python.
In questa guida partiamo da faster-whisper per il miglior compromesso tra velocita' e facilita'. Tutto e' gratuito e open source; nessun limite d'uso oltre a quelli del tuo hardware.
Passo 1: installare FFmpeg e faster-whisper
Whisper ha bisogno di FFmpeg per leggere i file audio/video. Installalo prima:
# Windows (con Chocolatey)
choco install ffmpeg
# macOS (con Homebrew)
brew install ffmpeg
# Linux (Debian/Ubuntu)
sudo apt install ffmpeg
Poi crea un ambiente Python e installa la libreria:
python -m venv venv
# Windows: venv\Scripts\activate | macOS/Linux: source venv/bin/activate
pip install faster-whisper
Passo 2: la prima trascrizione in Python
Questo script trascrive un file e stampa il testo con i tempi. Salvalo come trascrivi.py e indica il tuo file audio o video.
from faster_whisper import WhisperModel
# "small" e' un buon equilibrio; su CPU usa compute_type="int8"
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("intervista.mp3", language="it")
print(f"Lingua rilevata: {info.language} (p={info.language_probability:.2f})")
for s in segments:
print(f"[{s.start:6.1f}s -> {s.end:6.1f}s] {s.text}")
Lancialo con python trascrivi.py. La prima volta scarica automaticamente il modello scelto. Se hai una GPU NVIDIA, sostituisci device="cpu" con device="cuda" e compute_type="float16" per andare molto piu' veloce.
Passo 3: scegliere il modello giusto
Whisper offre piu' dimensioni, dal piu' piccolo e veloce al piu' grande e accurato. Ecco come orientarsi:
| Modello | RAM circa | Qualita' | Quando usarlo |
|---|---|---|---|
| tiny / base | ~1-2 GB | bassa | test rapidi, audio pulito in inglese |
| small | ~2-3 GB | buona | uso quotidiano su CPU, italiano |
| medium | ~5-6 GB | molto buona | interviste, audio rumoroso |
| large-v3 | ~10 GB | massima | massima precisione, meglio con GPU |
Regola pratica: su un portatile senza GPU, small per l'italiano e' il punto di partenza ideale; se la precisione non basta e hai pazienza (o una GPU), sali a medium o large-v3.
Passo 4: generare i sottotitoli SRT
Spesso non serve solo il testo, ma i sottotitoli sincronizzati per un video. Questo script produce un file .srt pronto da caricare su YouTube o in un editor video.
from faster_whisper import WhisperModel
def t(sec):
h, r = divmod(int(sec*1000), 3600000)
m, r = divmod(r, 60000)
s, ms = divmod(r, 1000)
return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, _ = model.transcribe("video.mp4", language="it")
with open("sottotitoli.srt", "w", encoding="utf-8") as f:
for i, s in enumerate(segments, 1):
f.write(f"{i}\n{t(s.start)} --> {t(s.end)}\n{s.text.strip()}\n\n")
print("Creato sottotitoli.srt")
FFmpeg estrae automaticamente l'audio dal video, quindi puoi passare direttamente un .mp4. Il file SRT risultante e' uno standard universale: si carica come sottotitolo su qualunque piattaforma.
Prompt e trucchi per una resa migliore
Whisper accetta un initial_prompt: un breve testo che gli suggerisce contesto, termini tecnici e nomi propri, riducendo gli errori di trascrizione. Esempio:
initial_prompt: "Podcast su intelligenza artificiale. Termini: Anthropic, Hugging Face, Mistral, RAG, embedding, GPU."
In codice: model.transcribe("file.mp3", language="it", initial_prompt="..."). E' il modo piu' semplice per far scrivere correttamente sigle e nomi che altrimenti verrebbero storpiati.
Errori comuni e soluzioni
- "FFmpeg not found": FFmpeg non e' nel PATH. Reinstallalo col gestore di pacchetti del tuo sistema e riapri il terminale.
- Trascrizione in inglese di un audio italiano: imposta esplicitamente
language="it"invece di lasciare il rilevamento automatico. - Errore di memoria con i modelli grandi: scendi di dimensione (da large a medium o small) oppure usa
compute_type="int8"su CPU. - Frasi spezzate male nei sottotitoli: abilita
vad_filter=Truenella chiamata transcribe per segmentare meglio in base alle pause del parlato.
Trascrivere tante registrazioni in serie
Se devi smaltire una cartella intera di registrazioni - per esempio tutte le puntate di un podcast o le lezioni di un corso - conviene automatizzare. Lo script qui sotto carica il modello una sola volta e trascrive in sequenza ogni file audio della cartella, salvando un .txt accanto a ciascuno. Caricare il modello una volta sola fa risparmiare molto tempo rispetto a rilanciare lo script per ogni file.
import glob, os
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
for audio in glob.glob("registrazioni/*.mp3"):
segments, _ = model.transcribe(audio, language="it", vad_filter=True)
testo = " ".join(s.text.strip() for s in segments)
out = os.path.splitext(audio)[0] + ".txt"
with open(out, "w", encoding="utf-8") as f:
f.write(testo)
print("Fatto:", out)
Un consiglio sui tempi: su una CPU moderna il modello small trascrive grosso modo in tempo reale o poco meno, quindi un'ora di audio richiede all'incirca un'ora di elaborazione. Con una GPU si scende a pochi minuti. Se hai molti file, lancia l'elaborazione la sera e ritrovi tutto pronto al mattino.
Alternative e prossimi passi
Se non vuoi installare nulla, la via piu' rapida e' usare l'interfaccia grafica di whisper.cpp o app come Buzz e MacWhisper, che impacchettano Whisper con un'interfaccia a finestre. Per chi cerca la diarizzazione (capire "chi parla") esiste WhisperX, che aggiunge l'identificazione degli speaker. E se devi trascrivere centinaia di file, il modello large-v3 su una GPU resta il riferimento per qualita'.
Una volta ottenuta la trascrizione, il passo naturale e' darla in pasto a un modello linguistico per riassumerla, estrarre i punti chiave o generare le minute di una riunione - magari proprio con un sistema locale come quello che abbiamo costruito per i PDF. Dal parlato al testo, dal testo alla sintesi: tutto sul tuo computer, gratis e senza che una sola parola lasci la tua macchina. I comandi sono stati verificati sulla documentazione ufficiale di Whisper e faster-whisper alla data di pubblicazione.




