Trascrivere una riunione, sottotitolare un video, ricavare il testo di un podcast: sono compiti in cui l'intelligenza artificiale eccelle, e la cosa migliore e' che si possono fare gratis e in locale, senza caricare file riservati su servizi esterni. Lo strumento di riferimento e' Whisper, il modello di riconoscimento vocale open source di OpenAI, che funziona bene anche in italiano. In questa guida vediamo come installarlo e usarlo passo passo, dalla versione piu' semplice a quella professionale con GPU.

A chi serve e cosa otterrai

Questa guida e' pensata per chiunque abbia audio o video da trascrivere: giornalisti, studenti, ricercatori, creator, professionisti. Alla fine saprai installare Whisper, trascrivere un file in testo, generare sottotitoli sincronizzati (formato SRT) e, se hai una scheda grafica Nvidia, usare la variante veloce per trascrivere in una frazione del tempo. Non serve saper programmare: la maggior parte del lavoro si fa da riga di comando con istruzioni pronte da copiare.

Prerequisiti

  • Un computer Windows, macOS o Linux.
  • Python 3.9 o superiore installato (verifica con python --version o python3 --version).
  • FFmpeg, che Whisper usa per leggere audio e video. Su macOS: brew install ffmpeg; su Ubuntu/Debian: sudo apt install ffmpeg; su Windows si scarica dal sito ufficiale e si aggiunge al PATH, oppure si installa con winget install ffmpeg.
  • Facoltativo ma consigliato per la velocita': una GPU Nvidia con driver CUDA.

Quale strumento scegliere

Esistono tre implementazioni principali, tutte gratuite:

  • openai-whisper: l'originale, semplicissimo da usare da riga di comando. Ideale per iniziare. Pro: facile; contro: piu' lento e pesante.
  • faster-whisper: una reimplementazione ottimizzata (basata su CTranslate2) fino a 4 volte piu' veloce e con meno memoria, a parita' di qualita'. La prima scelta consigliata per chi ha molti file o una GPU.
  • whisper.cpp: versione in C++ leggerissima, ottima per girare su CPU o su Mac con chip Apple Silicon senza dipendenze Python. Ideale su computer poco potenti.

Cominciamo con openai-whisper per la sua semplicita', poi passiamo a faster-whisper per l'uso serio.

Whisper trascrive riunioni, podcast e video in italiano direttamente sul tuo computer.

Procedimento 1: la trascrizione facile con openai-whisper

Passo 1 — Crea un ambiente e installa. Conviene isolare l'installazione in un ambiente virtuale:

python3 -m venv whisper-env
source whisper-env/bin/activate      # su Windows: whisper-env\Scripts\activate
pip install -U openai-whisper

Passo 2 — Trascrivi un file. Metti l'audio o il video nella cartella e lancia:

whisper riunione.mp3 --language Italian --model small --output_format txt

Whisper scarica automaticamente il modello la prima volta e crea un file riunione.txt con la trascrizione. I modelli disponibili, dal piu' leggero al piu' accurato, sono: tiny, base, small, medium, large-v3 e turbo. Per l'italiano, small o medium offrono un buon equilibrio; large-v3 e' il piu' preciso ma piu' lento.

Passo 3 — Genera i sottotitoli. Per ottenere un file SRT sincronizzato da usare in un video:

whisper video.mp4 --language Italian --model medium --output_format srt

Il risultato e' un video.srt con i tempi di inizio e fine di ogni battuta, pronto da caricare in un player o in un software di montaggio.

Procedimento 2: velocita' e controllo con faster-whisper

Per trascrivere piu' rapidamente, soprattutto con GPU, si usa faster-whisper da Python. Installazione:

pip install -U faster-whisper

Uno script minimo che trascrive e stampa il testo con i tempi:

from faster_whisper import WhisperModel

# device="cuda" con GPU Nvidia, altrimenti "cpu"; compute_type "int8" risparmia memoria
model = WhisperModel("large-v3", device="cuda", compute_type="float16")

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

Il risultato atteso e' l'elenco dei segmenti con i timestamp e il testo. Su CPU, imposta device="cpu" e compute_type="int8": sara' piu' lento ma funziona ovunque. Per ottenere anche i tempi parola per parola (utili per sottotitoli precisi) aggiungi word_timestamps=True alla chiamata transcribe.

Salvare i sottotitoli SRT con faster-whisper

faster-whisper non scrive direttamente il file SRT, ma e' facile generarlo. Ecco una funzione di supporto:

def formato_tempo(s):
    h = int(s // 3600); m = int((s % 3600) // 60)
    sec = int(s % 60); ms = int((s - int(s)) * 1000)
    return f"{h:02d}:{m:02d}:{sec:02d},{ms:03d}"

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

Il file video.srt risultante e' compatibile con VLC, YouTube e i principali editor video.

Migliorare la qualita': tre accorgimenti

  1. Indica sempre la lingua (--language Italian o language="it"): evita che il modello sbagli lingua su audio brevi.
  2. Usa un "prompt iniziale" per suggerire nomi propri o termini tecnici ricorrenti. In faster-whisper: model.transcribe(..., initial_prompt="Riunione su budget, Rossi, Bianchi, EBITDA"). Aiuta il modello a scrivere correttamente parole altrimenti ambigue.
  3. Ripulisci l'audio: se il file e' rumoroso, un passaggio di normalizzazione con FFmpeg (ffmpeg -i input.mp3 -af "loudnorm" pulito.wav) puo' migliorare il risultato.

Quale modello scegliere: dimensioni, velocita', qualita'

La scelta del modello e' il compromesso principale tra velocita' e precisione. Ecco un orientamento pratico:

ModelloMemoria indicativaUso consigliato
tiny / base~1-1,5 GBProve rapide, audio pulito, computer poco potenti
small~2 GBBuon compromesso per l'italiano quotidiano
medium~5 GBRiunioni e interviste, qualita' elevata
large-v3~10 GBMassima precisione, audio difficile o rumoroso
turbo~6 GBQuasi come large ma molto piu' veloce

La regola pratica: parti da small o medium. Se il testo contiene troppi errori su nomi propri o parole tecniche, sali a large-v3; se invece la velocita' e' prioritaria e l'audio e' pulito, turbo offre un ottimo equilibrio. Ricorda che con faster-whisper e la quantizzazione (compute_type="int8") puoi usare modelli grandi con molta meno memoria.

Automatizzare: trascrizione in batch di una cartella

Se hai molti file, conviene automatizzare. Questo script trascrive in SRT tutti gli audio e i video di una cartella:

import os
from faster_whisper import WhisperModel

model = WhisperModel("medium", device="cpu", compute_type="int8")
cartella = "./da_trascrivere"
estensioni = (".mp3", ".wav", ".m4a", ".mp4", ".mov")

for nome in os.listdir(cartella):
    if not nome.lower().endswith(estensioni):
        continue
    percorso = os.path.join(cartella, nome)
    print("Trascrivo:", nome)
    segments, _ = model.transcribe(percorso, language="it")
    out = os.path.splitext(percorso)[0] + ".txt"
    with open(out, "w", encoding="utf-8") as f:
        for seg in segments:
            f.write(seg.text.strip() + "\n")
print("Fatto.")

Lo script scorre la cartella, trascrive ogni file e salva un .txt con lo stesso nome. E' la base per flussi di lavoro piu' complessi, per esempio l'archiviazione automatica dei verbali.

Errori comuni e soluzioni

  • "ffmpeg not found": FFmpeg non e' installato o non e' nel PATH. Installalo e riavvia il terminale.
  • "CUDA out of memory": il modello e' troppo grande per la tua GPU. Passa a un modello piu' piccolo (medium invece di large-v3) o usa compute_type="int8".
  • Trascrizione in inglese anche se l'audio e' italiano: hai dimenticato di specificare la lingua. Aggiungi --language Italian.
  • Installazione lenta o che fallisce su Windows: aggiorna pip (python -m pip install -U pip) e assicurati di usare una versione di Python a 64 bit.

Alternative e quando non usare Whisper

Su Mac con chip Apple Silicon e senza GPU Nvidia, whisper.cpp e' spesso la scelta migliore per velocita' ed efficienza. Se non vuoi installare nulla e i file non sono riservati, esistono servizi online che usano Whisper o modelli simili, ma perdi il vantaggio della privacy e del costo zero. Whisper non e' invece la scelta ideale per la trascrizione in tempo reale a bassissima latenza (per esempio sottotitoli dal vivo), dove servono soluzioni specializzate. Per tutto il resto — trascrizioni di file, sottotitoli, verbali — Whisper in locale offre oggi il miglior rapporto tra qualita', privacy e costo.

Un limite da conoscere: chi ha detto cosa

Whisper trascrive fedelmente il parlato ma non distingue automaticamente gli interlocutori: nel testo non trovi "Rossi:" e "Bianchi:", ma un flusso continuo. Questa funzione, chiamata "diarizzazione", richiede uno strumento aggiuntivo. Il piu' usato e' pyannote (libreria pyannote.audio), che identifica i cambi di voce e puo' essere combinato con Whisper per ottenere una trascrizione con le etichette degli interlocutori. E' un passaggio piu' avanzato, che richiede la registrazione a Hugging Face per scaricare il modello di diarizzazione, ma trasforma una trascrizione grezza in un verbale leggibile di una riunione a piu' voci. Se ti serve solo il contenuto e non chi lo ha detto, puoi ignorare questo aspetto; se invece produci verbali ufficiali, e' spesso indispensabile.

Come proseguire

Una volta padroneggiata la trascrizione, puoi automatizzare: uno script che processa in batch una cartella di file, oppure una pipeline che trascrive e poi passa il testo a un modello linguistico per generare un riassunto della riunione. E' proprio combinando Whisper con un LLM (locale o via API) che si ottengono i flussi di lavoro piu' utili: dall'audio grezzo al verbale sintetico, in automatico.