Trascrizione audio in italiano con faster-whisper small—
I webinar tecnici su Kubernetes o Postgres sono materiale che riascoltare nei tempi morti non riesco quasi mai, ma che vorrei rileggere come testo per estrarre comandi citati, riferimenti a CVE e nomi di tool da approfondire dopo. Da qualche mese ho montato un piccolo flusso di sbobinatura locale basato su whisperx (faster-whisper small come motore). Niente cloud, niente upload, gira tutto sul mio host mentre faccio altro, e l’audio non lascia mai la macchina.
Il punto che mi ha convinto è la combinazione fra peso del modello e qualità sull’italiano parlato pulito. Il small in formato CTranslate2 sta sotto i 500 MB, e su una CPU con qualche anno sulle spalle gira a una velocità più che ragionevole se gli si dà la quantizzazione int8. La taglia è il compromesso che uso per quasi tutto: italiano da microfono o registrazione di un webinar, qualche minuto di rumore di fondo accettabile.
Setup con whisperx
Tutto dentro un virtualenv dedicato, senza toccare i pacchetti di sistema. Su Debian 13 lato server la procedura è la stessa che uso sul portatile.
sudo apt install -y ffmpeg python3-venv
python3 -m venv ~/.venvs/whisper
source ~/.venvs/whisper/bin/activate
pip install --upgrade pip
pip install whisperx
L’unica dipendenza di sistema è ffmpeg, che whisperx invoca per normalizzare qualsiasi formato in PCM 16 kHz mono. Niente download manuale di pesi: il modello viene scaricato la prima volta in ~/.cache/huggingface/hub/ e da lì non si muove.
Per sbobinare un webinar mi basta un comando, nella sua forma più minimale. La regola che mi sono dato (e che rispetto sempre quando la macchina lavora mentre faccio altro) è di limitare i thread a 8, così il sistema resta reattivo e la ventola non parte.
whisperx webinar-postgres.m4a \
--model small \
--language it \
--compute_type int8 \
--threads 8
whisperx scrive il transcript accanto all’audio (webinar-postgres.txt, oltre ai vari formati). I sottotitoli SRT non mi servono quasi mai: quello che voglio è un riassunto sintetico di cosa è stato detto, da incollare negli appunti. Siccome il transcript è già testo sul mio host, lo passo a un modello locale via Ollama, così anche il riassunto resta sulla macchina senza nessun upload.
ollama run qwen2.5:7b "Riassumi questo webinar tecnico in punti elenco, \
mettendo in evidenza comandi citati, CVE e nomi di tool da approfondire:
$(cat webinar-postgres.txt)"
Un esempio reale
Un caso tipico: la registrazione di un webinar tecnico su Postgres, durata 42 minuti, in un file .m4a. L’ho buttato nella cartella di lavoro e ho lanciato whisperx mentre continuavo a fare altro.
Il portatile ci ha messo otto minuti a trascrivere quei 42, mantenendo gli otto thread sotto il limite. Nel frattempo ho continuato a scrivere i miei appunti in Markdown senza notare rallentamenti. Il testo finale era pulito al punto da poter fare grep -i "wal" per ritrovare al volo tutti i passaggi dove si discuteva dei segmenti WAL. Due refusi su sigle tecniche (pgbouncer diventato “pg buncer” un paio di volte), risolti con un sed veloce.
Cosa fa bene
Italiano tecnico parlato chiaramente, microfono decente, una persona alla volta o al massimo due con turni netti: il small fa un lavoro pulito, restituisce timestamp affidabili e gestisce bene gli inglesismi che noi sysadmin infiliamo ovunque (kubectl, ingress, statefulset, sidecar non lo confondono).
Cosa fa meno bene
Le sigle pronunciate lettera per lettera (TLS, mTLS, PVC, CIDR) le scrive a orecchio e va corretto. Sui nomi propri di persona inventa. Quando due voci si parlano sopra perde qualche secondo. Per audio veramente sporco passo al medium, che è la prossima taglia.
Privacy – vantaggio del modello locale
Tutto gira sulla mia macchina. L’audio di un webinar o di una sessione tecnica, che potrebbe contenere riferimenti a stringhe di connessione, hostname o dettagli interni di infrastruttura, non lascia mai l’host. Confrontato con servizi cloud equivalenti come l’API Whisper di OpenAI, dove il file audio viene caricato e ha policy di retention che dipendono dal piano, qui non c’è nessun trasferimento e nessuna policy di terzi a cui sottostare.
I pesi del modello stanno in ~/.cache/huggingface/hub/models--Systran--faster-whisper-small/ e si liberano con un rm -rf quando voglio fare spazio. Niente telemetria, niente upload, nessuna chiamata di rete una volta scaricato il modello.
Sul fronte licenze: il modello Whisper di OpenAI è MIT, faster-whisper come libreria è MIT, il runtime CTranslate2 sotto è MIT, whisperx come wrapper è BSD-4 con dipendenze MIT/Apache. Tutto stack permissivo, posso usarlo in qualsiasi contesto senza pormi domande di compatibilità.
In pratica
Il flusso si è incastrato bene nella mia giornata: prendo la registrazione di un webinar tecnico, la lascio trascrivere durante la pausa pranzo o mentre faccio altro, e ritrovo il testo grezzo in pochi minuti. Diventa l’input per i miei appunti, mai un output pubblicato senza riletture. Partire da un transcript pieno di timestamp mi ha tagliato parecchio il tempo di scrittura: ritrovare un passaggio e citarlo è enormemente più veloce che riascoltare tutto e prendere appunti a mano.
Immagine generata con ComfyUI Mac M1 / RealVisXL V5 Lightning.
Articolo originale su rpi.temporiti.net
Commenti
Caricamento commenti...
Lascia un commento