Trascrivere un'intervista, generare i sottotitoli di un video, ricavare il testo di un podcast: sono compiti che oggi si possono svolgere gratis e in totale privacy sul proprio computer, senza caricare nulla su servizi online. Il merito è di Whisper, il modello di riconoscimento vocale rilasciato da OpenAI come open source, e dei progetti che lo hanno reso veloce e leggero. Questa guida spiega, passo passo, come ottenere una trascrizione e un file di sottotitoli SRT in italiano.

Perché Whisper e perché in locale

Whisper è un modello addestrato da OpenAI su centinaia di migliaia di ore di audio in decine di lingue, italiano compreso. La sua forza è la robustezza: regge accenti, rumore di fondo, musica e parlato sovrapposto molto meglio dei vecchi sistemi di dettatura. Essendo open source, può girare interamente sul tuo computer. Questo ha tre vantaggi concreti: la privacy (l'audio non lascia mai la tua macchina, cosa decisiva per interviste riservate o dati sensibili), il costo zero anche su volumi alti (niente abbonamenti a minuti) e l'assenza di limiti di caricamento. Lo svantaggio è che la velocità dipende dal tuo hardware: una buona GPU trascrive in pochi minuti un'ora di audio, una CPU può metterci di più.

A chi serve e cosa ti serve prima di iniziare

È una guida per chi crea contenuti, studia, lavora con video e audio, o semplicemente vuole evitare di pagare servizi di trascrizione mensili. Funziona su Windows, macOS e Linux. Prerequisiti:

  • Python 3.10 o superiore installato (per le opzioni 1 e 2).
  • FFmpeg, lo strumento che estrae e converte l'audio. Su macOS si installa con brew install ffmpeg, su Windows con winget install Gyan.FFmpeg, su Linux con sudo apt install ffmpeg.
  • Una scheda grafica (GPU) accelera molto, ma non è obbligatoria: tutto funziona anche su CPU, solo più lentamente.

Quale strumento scegliere: tre strade

Ci sono tre modi principali di usare Whisper, con pro e contro diversi:

  • openai-whisper: l'implementazione ufficiale, semplicissima da riga di comando. Ottima per iniziare, un po' lenta su CPU.
  • faster-whisper: una riscrittura ottimizzata (basata su CTranslate2) fino a diverse volte più veloce e con meno consumo di memoria. È la prima scelta consigliata per il miglior equilibrio tra velocità, qualità e consumo.
  • whisper.cpp: scritto in C++, eccellente su Mac con chip Apple Silicon e su macchine senza GPU; usa modelli in formato GGUF/GGML.

Per l'italiano, i modelli medium e large-v3 danno i risultati migliori; large-v3-turbo è un buon compromesso tra qualità e velocità. I modelli piccoli (tiny, base) vanno bene solo per prove rapide. Se preferisci un'interfaccia grafica senza toccare il terminale, esistono applicazioni che impacchettano Whisper con un'interfaccia a finestre, come Buzz (multipiattaforma) o MacWhisper (su Mac): sotto il cofano fanno lo stesso lavoro descritto qui.

Con Whisper la trascrizione resta sul tuo computer, senza inviare audio online.

Strada 1: la via rapida con openai-whisper

È il modo più immediato per ottenere subito dei sottotitoli. Installa e lancia:

pip install -U openai-whisper

# Trascrive in italiano e crea direttamente il file .srt
whisper "intervista.mp4" --model medium --language Italian --output_format srt

Al termine troverai accanto al video un file intervista.srt con i tempi e il testo. Per ottenere anche un .txt e un .vtt, usa --output_format all. La prima volta che lanci un modello, Whisper lo scarica automaticamente: i file vanno da poche decine di MB (tiny) a oltre un gigabyte (large), quindi metti in conto qualche minuto di download iniziale.

Strada 2: faster-whisper, la scelta consigliata

Più veloce e parco di memoria. Installa con pip install faster-whisper, poi usa questo script che trascrive e scrive un file SRT:

from faster_whisper import WhisperModel

# Su GPU NVIDIA: device="cuda", compute_type="float16"
# Su CPU: device="cpu", compute_type="int8" (piu' leggero)
model = WhisperModel("large-v3", device="cpu", compute_type="int8")

segments, info = model.transcribe("intervista.mp4", language="it", beam_size=5)
print("Lingua rilevata:", info.language)

def t(s):
    h = int(s // 3600); m = int((s % 3600) // 60); sec = s % 60
    return f"{h:02d}:{m:02d}:{sec:06.3f}".replace(".", ",")

with open("intervista.srt", "w", encoding="utf-8") as f:
    for i, seg in enumerate(segments, 1):
        f.write(f"{i}\n{t(seg.start)} --> {t(seg.end)}\n{seg.text.strip()}\n\n")
print("File intervista.srt creato")

Risultato atteso: un file intervista.srt pronto da caricare su YouTube, da importare in un editor video o da rifinire a mano. Il parametro beam_size=5 migliora un po' l'accuratezza a costo di qualche secondo in più; abbassalo a 1 se hai fretta.

Strada 3: whisper.cpp per Mac e PC senza GPU

Se hai un Mac con Apple Silicon o un PC senza scheda grafica dedicata, whisper.cpp è spesso la soluzione più scattante:

git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp
cmake -B build && cmake --build build --config Release

# Scarica un modello (es. large-v3)
sh ./models/download-ggml-model.sh large-v3

# Converti l'audio a WAV 16 kHz e trascrivi in SRT
ffmpeg -i intervista.mp4 -ar 16000 -ac 1 audio.wav
./build/bin/whisper-cli -m models/ggml-large-v3.bin -f audio.wav -l it -osrt

Otterrai un file audio.wav.srt con i sottotitoli in italiano. Su Apple Silicon whisper.cpp sfrutta l'accelerazione del chip e raggiunge velocità sorprendenti anche senza GPU dedicata.

Casi avanzati: traduzione, parole e voci diverse

  • Tradurre invece di trascrivere: aggiungi --task translate (in openai-whisper) per ottenere il testo tradotto in inglese.
  • Timestamp parola per parola: in faster-whisper passa word_timestamps=True a transcribe, utile per sottotitoli "karaoke".
  • Distinguere chi parla (diarizzazione): serve uno strumento aggiuntivo come WhisperX con pyannote, che assegna le battute ai diversi interlocutori. È il passaggio più complesso, perché richiede un token di accesso al modello di diarizzazione, ma è l'unico modo per ottenere trascrizioni del tipo "Relatore 1 / Relatore 2".
  • Audio lunghissimi: per file di molte ore conviene tagliarli in blocchi con FFmpeg e trascriverli in sequenza, per evitare che un eventuale errore costringa a rifare tutto da capo.

Errori comuni e come risolverli

  • "ffmpeg not found": FFmpeg non è installato o non è nel PATH. Reinstallalo e riapri il terminale.
  • "CUDA out of memory": il modello è troppo grande per la tua GPU. Usa un modello più piccolo (medium) o passa a compute_type="int8".
  • Lingua sbagliata o testo in inglese: il rilevamento automatico ha sbagliato. Forza la lingua con --language Italian o language="it".
  • Trascrizione lenta su CPU: è normale. Usa faster-whisper con int8, oppure un modello più piccolo per le bozze.
  • Frasi ripetute o "allucinate" nei silenzi: capita nei tratti senza parlato. Attiva il filtro del silenzio (in faster-whisper, vad_filter=True) per ridurre il problema.

Come rifinire e quando non usare Whisper

Una volta ottenuto l'SRT, puoi correggere gli errori con un editor gratuito come Subtitle Edit, oppure "incollare" i sottotitoli dentro il video con FFmpeg: ffmpeg -i intervista.mp4 -vf subtitles=intervista.srt video_sottotitolato.mp4. Per i contenuti pubblicati conviene sempre una rilettura umana, perché Whisper può sbagliare nomi propri, termini tecnici e punteggiatura. Un trucco utile è preparare un piccolo glossario dei nomi ricorrenti e fare un "trova e sostituisci" finale sul file di testo.

Quando non vale la pena: per un clip di trenta secondi, un servizio web è più rapido che configurare l'ambiente; se ti serve la diarizzazione precisa di una riunione con molte persone, valuta strumenti dedicati. Ma per la maggior parte dei casi — privacy, volumi alti, costo zero — Whisper in locale è oggi la soluzione più solida e flessibile, e una volta impostato l'ambiente trascrivere un nuovo file è questione di un solo comando.