diff --git a/README.md b/README.md index 01e3cf0..b4993d2 100644 --- a/README.md +++ b/README.md @@ -1,214 +1,127 @@ # sboby - Trascrivere una registrazione audio -*Sbobinare, parola amara.* +*"Sbobinare, parola amara". Anonimo, De Labore Bastardo. Senzatempo ed.* ![sboby](sboby.jpg) -Il metodo gramo, passo passo ma così educazionale che ti sale la gioia. -Feel free di saltare le parti ovvie o di arredare il tunnel come meglio si crede. +*Sbobinare - v. tr. riportare per iscritto il contenuto di discorsi, interviste, conferenze registrati su nastro magnetico*. -Funziona con Debian 11 stable. +Si usa raramente il nastro magnetico, ma si lavora comunque a comporre un testo da un audio, un file digitale come WAV, OGG o MP3. -# Installare il software che verrà utilizzato +Di seguito una breve guida pratica per implementare la trascrizione automatica di un audio sul proprio Pc, funzionante anche +senza collegamento internet perché il modello linguistico verrà scaricato e usato in locale, in autonomia. - sudo apt install python3 ffmpeg unzip mediainfo +Nota: La trascrizione sarà esatta circa al 90% e si raccomanda dunque, prima di pubblicare, di ascoltare l'audio leggendo la +trascrizione ottenuta in modo da poter correggere gli errori. Ad esempio per individuare delle frasi di senso compiuto, ma +che non sono mai state dette, cioé le cosiddette: "allucinazioni". Anche i nomi propri di persona non possono venir +riconosciuti e vengono approssimati. Certamente una dettatura scandita nel microfono otterrà risultati migliori di un audio +ambientale mentre in sottofondo friggono mistiche patatine fritte. E dunque seppure riascoltar si deve, il testo ricavato +*autonomaticagigamente* risulterà una buona base e andrà ad alleviare il lavoraccio di trascrizione. -Lanciare un terminale e creare una directory dove lavorare con il file ad esempio: **audio.mp3** +tl;dr non ti fidare e riascolta l'audio mentre rileggi. - mkdir ~/sbobina +Useremo il Vosk speech recognition toolkit: https://alphacephei.com/vosk/ - cd ~/sbobina/ +Debian GNU/Linux OS libero: https://www.debian.org/ -audio.mp3 +Un file audio: "allunaggio.mp3" che verrà usato negli esempi è a disposizione. -# Convertire il file in mp4 +Sono supportati sia MP3 che WAV che OGG e AAC. - ffmpeg -i audio.mp3 audio.mp4 +# Elenco delle operazioni -audio.mp4 +Partiamo da GNU/Linux, Debian 12 (stabile). -# Se il file è molto lungo +nota: qualsiasi OS con un ambiente python3 funzionante andrà bene, questa guida usa Debian 12. -*es: più di due ore e mezzo* +Andiamo a installare python e altre cose utili: -Sarà utile spezzarlo in più parti, sennò lo script potrebbe fallire perché -gli finisce la memoria, ma non gliene faremo una colpa. +`sudo apt install python3 python3-full python3-venv ffmpeg unzip mediainfo` -Sapere quanto dura: +Creiamo la cartella: "sboby" e al suo interno, la sotto-cartella: "vosk". - mediainfo audio.mp4 | grep Duration +`mkdir -p ~/sboby/vosk` -Duration: 2 h 00 min +Entriamo nella cartella sboby/vosk/. -In questo esempio il file esattamente dura due ore e lo si vuole dividere in due -parti di un'ora ciascuna: +`cd ~/sboby/vosk/` - ffmpeg -ss 00:00:00 -t 01:00:00 -i audio.mp4 -vcodec copy -acodec copy audio-0-1.mp4 +Scarichiamo il modello, anche [https://en.wikipedia.org/wiki/Large_language_model](LLM), vosk-italiano, circa 2GB: - ffmpeg -ss 01:00:00 -t 01:00:00 -i audio.mp4 -vcodec copy -acodec copy audio-1-2.mp4 +`wget https://alphacephei.com/vosk/models/vosk-model-it-0.22.zip` -audio-0-1.mp4 -audio-1-2.mp4 +Altre lingue sono scaricabili alla pagina dei [Vosk models](https://alphacephei.com/vosk/models). -# Trascrivere i file +Scompattiamo il modello appena scaricato: -Per trascrivere (o sbobinare), si installeranno videogrep e vosk +`unzip vosk-model-it-0.22.zip` - pip3 install videogrep +Opzionale: possiamo ora cancellare il file zip. - pip3 install vosk +`rm vosk-model-it-0.22.zip` -# Modulo lingua italiana per Vosk +Usciamo dalla cartella ~/sboby/vosk/ -Scaricare e scompattare il modulo lingua italiana per Vosk +`cd` -https://alphacephei.com/vosk/models +Creiamo un ambiente virtuale per Python -al momento la versione da usare è la small-it-0.22 (48MB) +`python3 -m venv /home/$USER/sboby` - unzip vosk-model-small-it-0.22.zip +Usiamo Python per scaricare e installare wheel (una libreria necessaria) e vosk-transcriber: -# Trascrivere +`./sboby/bin/pip3 install wheel` -la prima ora: +`./sboby/bin/pip3 install vosk` - videogrep --input audio1.mp4 --model vosk-model-small-it-0.4/ --transcribe +Ora possiamo effettuare la prima trascrizione, useremo ad esempio l'audio ![allunaggio.mp3](allunaggio.mp3). -Durata della conversione: circa 15 minuti. La durata dipenderà dalla potenza del PC usato. +Prima, vediamo quanto dura: -la seconda ora: +`mediainfo allunaggio.mp3 | grep Duration` - videogrep --input audio2.mp4 --model vosk-model-small-it-0.4/ --transcribe +> Duration: 1 min 16 s -Si ottengono due JSON file +A seconda delle risorse disponibili, varierà il tempo di elaborazione. +Per un Pc di media potenza, un audio di 1 ora, potrebbe impiegare circa 1 ora. -audio1.json -audio2.json +Possiamo ora invocare il programma: "vosk-transcriber", indicando (-i) quale audio sbobinare, che modello usare (--model) e dove (-o) appoggiare il testo. -I JSON file sono comodissimi dal punto di vista di una macchina. Se lo scopo -della trascrizione è editare il video automaticamente usando videogrep, si può -procedere. Tra i link c'è il tutorial di videogrep. +`~/sboby/bin/vosk-transcriber -i ~/sboby/allunaggio.mp3 --model /share/software/vosk/vosk-model-it-0.22/ -o ~/sboby/allunaggio.txt` -Se lo scopo è fare dei sottotitoli, occorrerà convertire da JSON in SRT o XML. +Possiamo anche ottenere la trascrizione in formato testo sottotitolo (SRT) con time-code: -Ma in questo caso siamo umani, si vuole ottenere del testo semplice da -allegare alla registrazione per ricerca e archivio (and for great justice). +`~/sboby/bin/vosk-transcriber -i ~/sboby/allunaggio.mp3 --model /home/$USER/sboby/vosk/vosk-model-it-0.22/ -t srt -o ~/sboby/allunaggio.srt` -Here comes Bomboclat, il quale ha scritto questo piccolo script che converte -(guarda un po') un JSON in un SRT. +Opzionale: Possiamo mettere tutto nello script sboby.sh in ~/bin/ che renderemo eseguibile (`chmod 755 ~/bin/sboby.sh`). -# Convertire da JSON a SRT +` +#!/bin/sh +~/sboby/bin/vosk-transcriber -i ${1+"$@"} --model ~/sboby/vosk/vosk-model-it-0.22/ -o ${1+"$@"}.txt ; +sleep 5s ; +~/sboby/bin/vosk-transcriber -i ${1+"$@"} --model ~/sboby/vosk/vosk-model-it-0.22/ -t srt -o ${1+"$@"}.srt +echo 'bye bye sboby' +` -Ecco lo script [json2srt](json2srt.py) +In modo da ottenere la trascrizione tramite il semplice comando: sboby.sh [FILE].. -Per l'utilizzo lasciamo la parola a Bomboclat, cui rendiamo merito: +`sboby.sh allunaggio.mp3` -`sudo apt install python3-venv` +Infine, se usiamo XFCE4 come ambiente scrivania, si potrà inserire una [custom action](https://docs.xfce.org/xfce/thunar/custom-actions) +in Thunar da usare cliccando col tasto destro sull'audio: -*nella tua home dai questo comando* +`/home/$USER/bin/sboby.sh %f` -`python3 -m venv json_to_srt` - -*ti crea una cartella json_to_srt -con dentro python3 -fatto questo comando ne dai un altro per attivarlo* - -`source ~/json_to_srt/bin/activate` - -*a sto punto hai lo script che ora ti passo aggiornato -ha ancora un difetto, le ore sono espresse con una cifra -percio' anziche' scrivere per esempio: -00:00:00,000 -ore minuti secondi, millesimi -scrive solo -0:00:00,000 -che si risolve facile -aggiungendo lo 0 a mano nella stringa finale -ma per ora lasciamo perdere sto dettaglio* - -`python json2srt.py -i un_file.json -o il_suo_output.srt` - -A me mi funziona anche solo mettendo lo script in ~/bin e dandogli i permessi di esecuzione: - - mv json2srt.py ~/bin/ - - chmod 755 ~/bin/json2srt.py - -Però è anche vero che non si dice: "a me mi", dunque anche il vostro -chilometraggio potrebbe variare. - -Una volta installato lo script, si può fare la conversione da JSON a SRT. - -Tornando al nostro esempio: - - json2srt.py -i audio1.json -o audio1.srt - - json2srt.py -i audio2.json -o audio2.srt - -Ora si potranno ricongiungere i due file, finalmente. - - cat audio1.srt audio2.srt > audio.srt - -E così ottenere l'agognato file: - -**audio.srt** - -# Il file audio.SRT - -Un file SRT è testo puro e si presenta così: - -1 -0:00:01,680 --> 0:00:06,810 -bla bla bla bla, bla bla bla - -2 -0:00:08,372 --> 0:00:13,830 -bla bla bla bla e ancora bla - -cioè: - -* Numeroriga -* Timecode -* Testo -* Spazio - -È già umanamente leggibile, ma per poterlo pubblicare come testo semplice si -potranno togliere le righe che contengono, come espressioni regolari, Numeroriga -e Timecode. - - sed '/[0-9]/d' audio.srt > trascrizione.txt - -Ed eventualmente anche levare la riga vuota! - - sed '/^$/d' trascrizione.txt > wallof.txt - -Poi rileggere, riascoltare e correggere. +![sboby custom action](sboby-custom-action.png) # Share and enjoy -Shoutz a Debian, ffmpeg, videogrep e vosk, Bomboclat per lo script, ilLobo per -aver scoperto videogrep, dan che ha scritto, e Shoutz a te che leggi, possa la -sbobinatura esserti lieve. +*"Dove si smangiuca, dio mi conduca. Dove si lavora, non venga mai l'ora". Skiantos, 2009, Una vita spesa a skivar la fresa*. -This is a: DIWO (Do It With Others) +Commenti? Kudos? Consigli? Vaffa? Grazie! -- dan [at] autistici [dot] org -**WE ARE NOT MEN! WE ARE DIWO!** +Prima versione: 2022-06-06 -# Links - -Debian GNU/Linux Free OS -https://www.debian.org/ - -ffmpeg -https://ffmpeg.org/ - -Videogrep Tutorial -https://lav.io/notes/videogrep-tutorial/ - -Vosk speech recognition toolkit -https://alphacephei.com/vosk/ - -Vosk models -https://alphacephei.com/vosk/models +Ultimo aggiornamento: 2024-09-04 *bye bye sboby* diff --git a/allunaggio.mp3 b/allunaggio.mp3 new file mode 100644 index 0000000..7d6062b Binary files /dev/null and b/allunaggio.mp3 differ diff --git a/sboby-custom-action.png b/sboby-custom-action.png new file mode 100644 index 0000000..e1e9ae8 Binary files /dev/null and b/sboby-custom-action.png differ