Trascrivere una riunione, un'intervista o un video di solito significa affidarsi a un servizio online, caricare i propri file su un server altrui e spesso pagare a minuto. Ma esiste un'alternativa gratuita, privata e sorprendentemente accurata: far girare Whisper, il modello di riconoscimento vocale di OpenAI, direttamente sul proprio computer. I file non lasciano mai il tuo PC, non c'è alcun abbonamento e la qualità in italiano è ottima.
Questa guida ti porta dall'installazione alla prima trascrizione, fino a generare i sottotitoli, usando la versione più efficiente del progetto. È pensata per chi ha un minimo di dimestichezza con il terminale, ma ogni comando è spiegato.
A chi serve e cosa ti serve prima di iniziare
Questa guida è utile a giornalisti, studenti, ricercatori, creatori di contenuti e a chiunque debba trasformare audio in testo in modo riservato. Alla fine avrai un file di testo (e, se vuoi, dei sottotitoli) a partire da qualsiasi registrazione.
Prerequisiti reali:
- Un computer Windows, macOS o Linux. Funziona anche solo con la CPU; una scheda grafica NVIDIA velocizza molto ma non è obbligatoria.
- Python 3.9 o superiore installato.
- FFmpeg, un programma gratuito che gestisce i formati audio/video (serve per leggere mp3, mp4, m4a e simili).
- Qualche gigabyte di spazio libero: i modelli si scaricano una volta sola e restano sul disco.
Quale strumento usare: le tre opzioni a confronto
Esistono più modi di eseguire Whisper in locale. Ecco i tre principali, con pro e contro per questo compito.
| Strumento | Pro | Contro |
|---|---|---|
| Whisper ufficiale (OpenAI) | Semplicissimo, comando pronto | Piu' lento e piu' pesante sulla memoria |
| faster-whisper | Fino a 4 volte piu' veloce, meno memoria, stessa qualita' | Richiede poche righe di Python |
| whisper.cpp | Leggerissimo, ottimo su Mac Apple Silicon | Installazione piu' tecnica (compilazione) |
La prima scelta consigliata è faster-whisper: offre la stessa accuratezza del modello originale ma è molto più rapido e leggero, grazie a un motore ottimizzato (CTranslate2). È il miglior compromesso per la maggior parte degli utenti. Chi vuole la via più immediata in assoluto può usare il Whisper ufficiale; chi ha un Mac con chip Apple e cerca la massima leggerezza può valutare whisper.cpp.
Passo 1: installare FFmpeg e faster-whisper
Prima installa FFmpeg. Su macOS con Homebrew:
brew install ffmpeg
Su Windows con il gestore pacchetti winget:
winget install Gyan.FFmpeg
Su Linux (Debian/Ubuntu):
sudo apt update && sudo apt install ffmpeg
Poi, è buona norma creare un ambiente virtuale Python per non sporcare il sistema, e installare la libreria:
python -m venv whisper-env
# attiva l'ambiente:
# macOS/Linux:
source whisper-env/bin/activate
# Windows:
whisper-env\Scripts\activate
pip install faster-whisper
Passo 2: la prima trascrizione
Crea un file trascrivi.py con questo contenuto:
from faster_whisper import WhisperModel
# "small" e' un buon compromesso; usa "medium" o "large-v3" per piu' precisione
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("riunione.mp3", language="it")
print("Lingua rilevata:", info.language)
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
Esegui con:
python trascrivi.py
Il risultato atteso è la trascrizione stampata a schermo, spezzata in segmenti con l'indicazione dei tempi. La prima volta il modello scelto («small») viene scaricato automaticamente; dalle volte successive parte subito. Se hai una GPU NVIDIA, sostituisci device="cpu", compute_type="int8" con device="cuda", compute_type="float16" per una trascrizione molto più veloce.
Passo 3: salvare il testo e creare i sottotitoli SRT
Per salvare la trascrizione in un file di testo e, contemporaneamente, generare i sottotitoli in formato SRT (quello che quasi tutti i lettori video riconoscono):
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("video.mp4", language="it")
def formatta_tempo(secondi):
ore = int(secondi // 3600)
minuti = int((secondi % 3600) // 60)
sec = secondi % 60
return f"{ore:02d}:{minuti:02d}:{sec:06.3f}".replace(".", ",")
with open("trascrizione.txt", "w", encoding="utf-8") as txt, \
open("sottotitoli.srt", "w", encoding="utf-8") as srt:
for i, seg in enumerate(segments, start=1):
txt.write(seg.text.strip() + "\n")
srt.write(f"{i}\n{formatta_tempo(seg.start)} --> {formatta_tempo(seg.end)}\n{seg.text.strip()}\n\n")
print("Fatto: trascrizione.txt e sottotitoli.srt creati.")
Il risultato sono due file: trascrizione.txt con il testo continuo e sottotitoli.srt pronto da caricare in un lettore video o in un editor di montaggio.
Quale modello scegliere
Whisper offre modelli di dimensioni crescenti: tiny, base, small, medium, large-v3. Più il modello è grande, più è preciso ma più lento e pesante. Per l'italiano, small è un ottimo punto di partenza; per interviste importanti o audio disturbato, medium o large-v3 ripagano l'attesa. Su una semplice CPU la trascrizione con i modelli grandi può richiedere diversi minuti per ogni ora di audio: mettila in conto.
Trascrivere più file in serie (elaborazione a lotti)
Se hai una cartella piena di registrazioni, non ha senso lanciare lo script uno alla volta. Puoi trascriverle tutte automaticamente. Crea batch.py:
import os
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
cartella = "registrazioni"
for nome in os.listdir(cartella):
if nome.lower().endswith((".mp3", ".mp4", ".m4a", ".wav")):
percorso = os.path.join(cartella, nome)
print("Trascrivo:", nome)
segments, _ = model.transcribe(percorso, language="it")
testo = " ".join(seg.text.strip() for seg in segments)
base = os.path.splitext(nome)[0]
with open(os.path.join(cartella, base + ".txt"), "w", encoding="utf-8") as f:
f.write(testo)
print("Tutte le trascrizioni completate.")
Il modello viene caricato in memoria una sola volta e riutilizzato per ogni file: è molto più efficiente che rilanciare lo script a ogni registrazione. Al termine, accanto a ogni audio troverai il suo file di testo.
Tradurre in inglese mentre si trascrive
Whisper sa anche tradurre: se imposti il compito su «translate», produce direttamente la trascrizione in inglese a partire da un audio in italiano (o in molte altre lingue). Basta aggiungere il parametro task:
segments, info = model.transcribe("intervista.mp3", task="translate")
È utile per sottotitolare in inglese un video parlato in italiano senza passaggi aggiuntivi. La traduzione è discreta ma non professionale: per usi editoriali conviene rivederla.
Migliorare il risultato: punteggiatura e termini difficili
Whisper già inserisce la punteggiatura, ma su audio tecnici può sbagliare nomi propri, sigle o termini di settore. Due accorgimenti aiutano molto. Il primo è usare il parametro initial_prompt per «suggerire» al modello il vocabolario atteso, scrivendo una frase che contenga i termini corretti:
segments, info = model.transcribe(
"riunione.mp3", language="it",
initial_prompt="Riunione su Kubernetes, API REST, PostgreSQL e microservizi."
)
Così il modello è più propenso a trascrivere correttamente quelle parole. Il secondo accorgimento è affidare la pulizia finale — punteggiatura, paragrafi, correzione di refusi — a un modello linguistico: incolli la trascrizione grezza in ChatGPT o Claude chiedendo di sistemarla senza cambiare le parole. È un ottimo abbinamento: Whisper per l'ascolto, un LLM per la rifinitura.
Errori comuni e come risolverli
- «ffmpeg not found» o errore nel leggere l'audio: FFmpeg non è installato o non è nel PATH. Reinstallalo e riapri il terminale.
- «No module named faster_whisper»: hai dimenticato di attivare l'ambiente virtuale, oppure l'installazione è avvenuta in un altro Python. Riattiva l'ambiente e ripeti
pip install faster-whisper. - Trascrizione lentissima: stai usando la CPU con un modello grande. Passa a un modello più piccolo o, se hai una GPU NVIDIA, usa
device="cuda". - Parole sbagliate o lingua errata: specifica sempre
language="it"per l'italiano; se ometti il parametro, il modello prova a indovinare e a volte sbaglia con audio brevi.
Varianti, alternative e prossimi passi
Chi ha bisogno di distinguere «chi parla» (la cosiddetta diarizzazione, utile per interviste a più voci) può guardare a WhisperX, che aggiunge questa funzione e allineamenti temporali più precisi. Chi non vuole scrivere codice può cercare interfacce grafiche costruite sopra Whisper. E chi lavora solo occasionalmente con file brevi può valutare i servizi cloud, tenendo però presente il compromesso su privacy e costi.
Quando non usare l'approccio locale: se devi trascrivere pochissimo e non hai vincoli di riservatezza, un servizio online può essere più comodo; se invece tratti dati sensibili — colloqui, dati clinici, riunioni riservate — la trascrizione in locale con Whisper è la scelta giusta, perché nulla lascia il tuo computer. Il codice ufficiale e la documentazione sono su GitHub di OpenAI e su quello di faster-whisper.




