Trascrivere un'intervista, sottotitolare un video, ricavare il testo di un podcast: sono compiti che oggi si possono svolgere gratis, in locale e senza inviare nulla nel cloud, grazie a Whisper, il modello di riconoscimento vocale rilasciato da OpenAI come open source. In questa guida vedremo due strade concrete e collaudate: whisper.cpp, leggerissimo e adatto anche a chi non conosce Python, e faster-whisper, ideale per chi lavora con Python e vuole massime prestazioni.

A chi serve e cosa otterrai

Questa guida e' pensata per giornalisti, ricercatori, studenti, creator e chiunque debba trasformare parlato in testo con regolarita', tenendo i file sul proprio computer per ragioni di privacy o di costo. Al termine avrai un sistema in grado di trascrivere file audio e video in italiano (e in decine di altre lingue) e di generare file di sottotitoli SRT pronti all'uso. Prerequisiti reali: un computer Windows, macOS o Linux ragionevolmente recente; almeno 8 GB di RAM (16 consigliati per i modelli grandi); qualche dimestichezza con il terminale. Una GPU non e' obbligatoria, ma accelera molto.

Quale strumento scegliere

  • whisper.cpp - implementazione in C++ che gira benissimo su CPU, in particolare sui Mac con chip Apple Silicon. Non richiede Python. E' la prima scelta per la maggior parte degli utenti: semplice, veloce da installare, nessuna dipendenza pesante.
  • faster-whisper - libreria Python basata su CTranslate2, fino a 4 volte piu' veloce dell'implementazione originale a parita' di accuratezza, con ottimo supporto GPU NVIDIA. Ideale per chi automatizza in Python o processa molti file.
  • Whisper "ufficiale" di OpenAI - il pacchetto Python di riferimento, semplice ma piu' lento. Utile per capire il funzionamento base.
  • Alternative con interfaccia grafica - app come MacWhisper (macOS) o interfacce basate su questi motori, per chi rifugge il terminale. Comode ma meno flessibili.

Costi: tutti gli strumenti citati sono gratuiti e open source. L'unica alternativa a pagamento e' l'API Whisper di OpenAI (circa 0,006 dollari al minuto), che ha senso solo se non vuoi installare nulla: per un uso regolare, il locale e' gratis e piu' riservato.

Passo 1: installare FFmpeg

Whisper lavora sull'audio, quindi serve FFmpeg per estrarre e convertire le tracce. Installalo cosi':

# macOS (con Homebrew)
brew install ffmpeg

# Ubuntu / Debian
sudo apt update && sudo apt install ffmpeg

# Windows (con winget)
winget install Gyan.FFmpeg

Verifica che funzioni con ffmpeg -version.

Passo 2: installare e compilare whisper.cpp

Scarica il progetto e compilalo. Su macOS e Linux bastano pochi comandi:

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

Ora scarica un modello. Per l'italiano, un buon compromesso tra qualita' e velocita' e' medium; se hai poca RAM parti da small, se vuoi la massima qualita' usa large-v3:

sh ./models/download-ggml-model.sh medium

Passo 3: la tua prima trascrizione

Prepara il file audio nel formato che Whisper preferisce (WAV a 16 kHz). Se parti da un video o da un mp3, converti con FFmpeg:

ffmpeg -i intervista.mp4 -ar 16000 -ac 1 -c:a pcm_s16le intervista.wav

Poi trascrivi, chiedendo anche i sottotitoli in formato SRT e la lingua italiana:

./build/bin/whisper-cli -m models/ggml-medium.bin -f intervista.wav -l it -osrt

Risultato atteso: a schermo scorre la trascrizione con i tempi, e nella cartella compare intervista.wav.srt, il file di sottotitoli pronto da caricare in un player o in un montaggio video.

Passo 4: la via Python con faster-whisper

Se preferisci automatizzare o hai una GPU NVIDIA, faster-whisper e' la scelta migliore. Installazione:

python -m venv venv
source venv/bin/activate   # su Windows: venv\Scripts\activate
pip install faster-whisper

Uno script minimo che trascrive e stampa i segmenti con i tempi:

from faster_whisper import WhisperModel

# device="cuda" se hai una GPU NVIDIA, altrimenti "cpu"
model = WhisperModel("medium", device="cpu", compute_type="int8")

segments, info = model.transcribe("intervista.wav", language="it")
print(f"Lingua rilevata: {info.language}")
for seg in segments:
    print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")

Il parametro compute_type="int8" riduce l'uso di memoria e accelera su CPU; su GPU usa float16. Da qui puoi facilmente salvare i segmenti in un file SRT o incrociarli con altri strumenti.

Varianti e casi avanzati

Per allineare le parole con precisione al secondo (utile per i sottotitoli "karaoke") esiste WhisperX, che aggiunge l'allineamento a livello di parola e la separazione degli interlocutori. Per file molto lunghi, conviene spezzare l'audio in blocchi ed elaborarli in sequenza. Se lavori in un'altra lingua, cambia semplicemente il codice con -l en, -l es e cosi' via, oppure ometti il parametro per la rilevazione automatica.

Errori comuni e soluzioni

  • "ffmpeg not found" - FFmpeg non e' installato o non e' nel PATH: ripeti il passo 1 e riapri il terminale.
  • Trascrizione lenta o che blocca il PC - stai usando un modello troppo grande per la tua RAM: scendi da large a medium o small.
  • Testo pieno di errori o lingua sbagliata - specifica sempre la lingua con -l it; l'audio di scarsa qualita' peggiora molto il risultato, prova a ripulirlo prima con FFmpeg.
  • "out of memory" su GPU - riduci il modello, usa compute_type="int8" o passa alla CPU.

Come migliorare la qualita' della trascrizione

La qualita' finale dipende soprattutto dall'audio di partenza e dalla scelta del modello. Alcuni accorgimenti che fanno una differenza concreta: registra o converti sempre a 16 kHz mono, il formato su cui Whisper e' stato addestrato; se l'audio ha rumore di fondo o piu' persone che parlano insieme, salta a un modello piu' grande (large-v3), che regge molto meglio le situazioni difficili; per contenuti tecnici o pieni di nomi propri, valuta di rileggere e correggere a mano i termini specialistici, che restano il punto debole di qualsiasi sistema automatico. Whisper tende inoltre a "inventare" testo nei lunghi silenzi: se noti frasi ripetute o senza senso, spesso si tratta di segmenti muti, che puoi eliminare tagliando i silenzi con FFmpeg prima della trascrizione. Infine, per l'italiano parlato veloce o dialettale, nessun modello e' perfetto: considera la trascrizione automatica come una bozza al 90%, da rifinire, non come un testo definitivo.

Automatizzare la trascrizione di piu' file

Se devi trascrivere decine di file, conviene scrivere un piccolo script che scorra una cartella e trascriva tutto in sequenza, salvando i risultati. Con faster-whisper bastano poche righe che ripetono la chiamata model.transcribe su ogni file trovato e scrivono l'output in un file di testo o SRT con lo stesso nome. E' proprio in questi flussi ripetitivi che la soluzione locale e gratuita batte nettamente i servizi a consumo: una volta impostato, elabora ore di audio senza costi aggiuntivi e senza inviare nulla in rete.

Quando conviene il cloud invece del locale

Il locale e' gratis, riservato e senza limiti d'uso, ma richiede tempo di elaborazione proporzionale alla potenza del tuo computer. Se devi trascrivere occasionalmente pochi minuti e non vuoi installare nulla, l'API a pagamento di OpenAI o strumenti online possono essere piu' comodi. Se invece tratti materiale sensibile (interviste riservate, documenti aziendali) o processi molte ore di audio, la soluzione locale con whisper.cpp o faster-whisper e' quasi sempre la scelta giusta: nessun dato lascia il tuo computer e il costo, dopo l'installazione, e' zero.