le grand remake

This commit is contained in:
dan 2024-09-04 16:16:18 +02:00
parent ed75a5c8d8
commit 44cf4367ff
3 changed files with 67 additions and 154 deletions

221
README.md
View File

@ -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*

BIN
allunaggio.mp3 Normal file

Binary file not shown.

BIN
sboby-custom-action.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB