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:

ModelloParametriVRAM/RAM richiestaVelocità (CPU)Qualità
tiny39M~1 GB~32x tempo realeBassa, errori frequenti
base74M~1 GB~16xSufficiente per inglese
small244M~2 GB~6xBuona per italiano semplice
medium769M~5 GB~2xOttima qualità multilingua
large-v31550M~10 GB~1xMassima qualità
turbo809M~6 GB~8xVicino 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 ffmpeg

Su Ubuntu/Debian:

sudo apt update && sudo apt install -y ffmpeg

Su 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-whisper

Su PC con GPU NVIDIA aggiungi anche PyTorch con CUDA per usarla:

pip install torch --index-url https://download.pytorch.org/whl/cu121

Primo 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.py

Hai 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.

Whisper supporta 99 lingue e gira interamente in locale. Foto: Damian Sochacki / Pexels.

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-whisper

Esempio:

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.

Faster-whisper riduce i tempi di trascrizione del 75% senza perdere qualità. Foto: Stas Knop / Pexels.

Migliorare la qualità su audio italiano

Tre accorgimenti che fanno una differenza enorme su materiale reale:

  1. 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.
  2. 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
  3. Usa un prompt iniziale: passa al modello un esempio di vocabolario specifico (nomi, sigle aziendali, acronimi). Con il Whisper originale si fa così:
    result = model.transcribe(
        "intervista.mp3",
        language="it",
        initial_prompt="Intervista a Marco Bianchi su PNRR, ESG e AI Act."
    )
    Questo aiuta a evitare che "PNRR" diventi "penere" o "AI Act" diventi "AI act" con la a minuscola.

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 whisperx

Richiede 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 per large-v3. Passa a turbo o usa medium.
  • Trascrizione che si ripete a loop: tipico su audio con lunghi silenzi. Aggiungi condition_on_previous_text=False nella chiamata transcribe.
  • Lentezza estrema su CPU: stai usando large-v3 su CPU. Passa a turbo o a faster-whisper con compute_type="int8".
  • Punteggiatura inesistente: succede coi modelli più piccoli (tiny, base). Sali a small o 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.