Un'ora di diretta radiofonica, tre ospiti, tante chiacchiere e altrettanta musica. Volevamo conservare e condividere le parole dell'intervista, con i sottotitoli, lasciando da parte le canzoni: sia per rendere il materiale più agile, sia per rispetto del diritto d'autore sui brani trasmessi. Farlo a mano significa ore di ascolto, taglio e trascrizione. Abbiamo provato ad automatizzare quasi tutto con strumenti liberi e gratuiti, su un computer portatile tutt'altro che recente. Ecco com'è andata.
Il punto di partenza
Il materiale era la registrazione di una puntata di A Touch of Music su Radio Studio 91 Live: 61 minuti in cui l'intervista si alterna a canzoni, sigle e jingle. L'obiettivo:
- riconoscere automaticamente dove si parla e dove c'è musica;
- ottenere due versioni audio: una con solo il parlato (musica tagliata) e una di durata originale con la musica silenziata;
- generare i sottotitoli in formato SRT, da rivedere e correggere.
Un primo tentativo, basato su un rilevatore di musica pensato per altri scopi e su qualche regola "a soglia", non aveva dato risultati soddisfacenti: parlato e musica si confondevano troppo spesso. Siamo quindi ripartiti scegliendo strumenti nati per questo tipo di lavoro.
Gli strumenti che abbiamo scelto, e perché
inaSpeechSegmenter: chi parla e chi canta
inaSpeechSegmenter è sviluppato dall'INA, l'istituto francese che conserva gli archivi della radio e della televisione pubblica. È stato addestrato proprio su trasmissioni radio-TV e distingue parlato, musica, rumore e silenzio. È la scelta naturale per una registrazione radiofonica: riconosce come parlato anche la voce del conduttore sopra un sottofondo musicale, e considera musica il cantato.
Sulla nostra puntata ha classificato 31 minuti di parlato e 29 di musica in meno di tre minuti di calcolo, con confini tra intervista e canzoni sostanzialmente corretti. Qualche regola di pulizia aggiuntiva accorpa i frammenti troppo brevi (un colpo di batteria in mezzo a una frase, una parola cantata in mezzo a un brano).
Whisper (faster-whisper): dalle parole ai sottotitoli
Per la trascrizione abbiamo usato faster-whisper, una reimplementazione ottimizzata del modello di riconoscimento vocale Whisper di OpenAI. Rispetto alla versione originale è molto più rapido sul processore e occupa meno memoria, a parità di qualità. Trascriviamo solo il parlato: si risparmia metà del tempo e si evita che Whisper provi a "trascrivere" i testi delle canzoni.
Abbiamo confrontato tre modelli sullo stesso minuto di intervista:
| Modello | Tempo per 1 minuto di audio | Qualità |
|---|---|---|
small |
32 secondi | nomi propri storpiati, frasi imprecise |
medium |
86 secondi | buona, ma poca punteggiatura |
large-v3-turbo |
82 secondi | la migliore: nomi, punteggiatura e frasi corretti |
Il modello large-v3-turbo è veloce quanto medium ma scrive decisamente meglio, ed è diventato la scelta predefinita. Per aiutarlo con i nomi degli ospiti gli si può suggerire un breve testo iniziale con i nomi scritti correttamente.
ffmpeg e Python: il montaggio
ffmpeg è il "coltellino svizzero" dell'audio e del video: decodifica la registrazione e codifica i file finali. Il montaggio vero e proprio lo fa un piccolo programma in Python, che in un'unica passata produce sia la versione tagliata sia quella silenziata, con brevi dissolvenze a ogni taglio per evitare click e salti bruschi. Abbiamo verificato che nei tratti musicali la versione silenziata sia davvero muta: il livello misurato è di −91 dB, cioè silenzio digitale.
I sottotitoli vengono generati sulla versione tagliata e poi "riportati" sui tempi della registrazione originale, così ciascuna versione audio ha il suo file SRT sincronizzato.
uv: un solo file, niente installazioni complicate
Tutto è raccolto in un unico script Python gestito con uv. Le librerie necessarie sono dichiarate in testa allo script stesso: al primo avvio uv le scarica in un ambiente isolato, senza toccare il resto del sistema. In pratica si lancia così:
./intervista_radio.py registrazione.webm
Un dettaglio che ha fatto la differenza: la libreria di segmentazione, di serie, si porta dietro diversi gigabyte di componenti per le schede grafiche NVIDIA, inutili su un portatile che non ne ha una. Con una semplice regola nell'intestazione dello script li abbiamo esclusi, e l'installazione è passata da oltre 7 GB di download a poche centinaia di megabyte.
Un flusso di lavoro "umano nel mezzo"
L'automazione non sostituisce la revisione, la rende più rapida. Per questo lo script salva:
- la segmentazione parlato/musica in una semplice tabella (un file di testo apribile anche con un foglio di calcolo), che si può correggere a mano: basta cambiare "parlato" in "musica" su una riga e rilanciare;
- la trascrizione grezza, così dopo una correzione i sottotitoli si rigenerano in pochi secondi, senza ripetere i 40 minuti di Whisper.
Nella nostra puntata la revisione si è ridotta a pochi punti: un breve verso cantato scambiato per parlato, un jingle della radio da tenere o togliere, qualche nome proprio da ricontrollare. Il risultato finale conta circa 650 sottotitoli, leggibili (al massimo due righe, pochi secondi ciascuno) e senza le classiche frasi "inventate" che Whisper talvolta aggiunge nei silenzi.
Su un PC modesto, un risultato più che buono
Tutto il lavoro è stato svolto su un portatile con processore Intel Core i5-5200U (due core, uscito nel 2015), 16 GB di memoria e nessuna scheda grafica dedicata. I tempi:
- segmentazione parlato/musica dell'intera ora: meno di 3 minuti;
- produzione delle due versioni audio: pochi minuti;
- trascrizione dei 31 minuti di parlato con il modello migliore: circa 40 minuti.
Meno di un'ora di calcolo, lasciato girare da solo mentre si faceva altro, per un lavoro che a mano avrebbe richiesto un pomeriggio intero. Non serve quindi hardware costoso per iniziare: un computer datato, strumenti liberi e un po' di pazienza bastano.
Il prossimo passo: una GPU
La trascrizione resta la fase più lenta, ed è proprio quella che trae più vantaggio da una scheda grafica. Per le prossime puntate ci stiamo attrezzando con una macchina Ubuntu dotata di una NVIDIA GeForce GTX 1060 da 6 GB: una scheda di qualche generazione fa, reperibile usata a meno di 100 euro, ma sufficiente per i modelli Whisper più grandi. Ci aspettiamo che la trascrizione passi da decine di minuti a pochi minuti; lo verificheremo sul campo.
Lo script è già pronto: di default usa la GPU se la trova e, se qualcosa non va, torna automaticamente al processore. Le librerie NVIDIA necessarie si aggiungono al momento del lancio, sempre tramite uv, senza installarle nel sistema.
E c'è già un'idea per il futuro: sovrapporre al video un orologio con l'ora esatta della diretta, ricavata confrontando la registrazione con un secondo salvataggio dello streaming. Ma questa è un'altra storia, e magari un altro articolo.
Il lavoro è stato svolto con l'aiuto di Claude Code, l'assistente di programmazione di Anthropic, che ha contribuito alla scelta degli strumenti, alla scrittura dello script e alle verifiche sui risultati.
