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.

faster-whisper trascrive fino a 4 volte piu' veloce a parita' di qualita'.

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:

ModelloRAM circaQualita'Quando usarlo
tiny / base~1-2 GBbassatest rapidi, audio pulito in inglese
small~2-3 GBbuonauso quotidiano su CPU, italiano
medium~5-6 GBmolto buonainterviste, audio rumoroso
large-v3~10 GBmassimamassima 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.

Dai sottotitoli SRT pronti per YouTube alla trascrizione di interviste.

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=True nella 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.