le grand remake
This commit is contained in:
parent
ed75a5c8d8
commit
44cf4367ff
221
README.md
221
README.md
|
@ -1,214 +1,127 @@
|
||||||
# sboby - Trascrivere una registrazione audio
|
# sboby - Trascrivere una registrazione audio
|
||||||
|
|
||||||
*Sbobinare, parola amara.*
|
*"Sbobinare, parola amara". Anonimo, De Labore Bastardo. Senzatempo ed.*
|
||||||
|
|
||||||
![sboby](sboby.jpg)
|
![sboby](sboby.jpg)
|
||||||
|
|
||||||
Il metodo gramo, passo passo ma così educazionale che ti sale la gioia.
|
*Sbobinare - v. tr. riportare per iscritto il contenuto di discorsi, interviste, conferenze registrati su nastro magnetico*.
|
||||||
Feel free di saltare le parti ovvie o di arredare il tunnel come meglio si crede.
|
|
||||||
|
|
||||||
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é
|
`sudo apt install python3 python3-full python3-venv ffmpeg unzip mediainfo`
|
||||||
gli finisce la memoria, ma non gliene faremo una colpa.
|
|
||||||
|
|
||||||
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
|
`cd ~/sboby/vosk/`
|
||||||
parti di un'ora ciascuna:
|
|
||||||
|
|
||||||
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
|
Altre lingue sono scaricabili alla pagina dei [Vosk models](https://alphacephei.com/vosk/models).
|
||||||
audio-1-2.mp4
|
|
||||||
|
|
||||||
# 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
|
Possiamo ora invocare il programma: "vosk-transcriber", indicando (-i) quale audio sbobinare, che modello usare (--model) e dove (-o) appoggiare il testo.
|
||||||
audio2.json
|
|
||||||
|
|
||||||
I JSON file sono comodissimi dal punto di vista di una macchina. Se lo scopo
|
`~/sboby/bin/vosk-transcriber -i ~/sboby/allunaggio.mp3 --model /share/software/vosk/vosk-model-it-0.22/ -o ~/sboby/allunaggio.txt`
|
||||||
della trascrizione è editare il video automaticamente usando videogrep, si può
|
|
||||||
procedere. Tra i link c'è il tutorial di videogrep.
|
|
||||||
|
|
||||||
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
|
`~/sboby/bin/vosk-transcriber -i ~/sboby/allunaggio.mp3 --model /home/$USER/sboby/vosk/vosk-model-it-0.22/ -t srt -o ~/sboby/allunaggio.srt`
|
||||||
allegare alla registrazione per ricerca e archivio (and for great justice).
|
|
||||||
|
|
||||||
Here comes Bomboclat, il quale ha scritto questo piccolo script che converte
|
Opzionale: Possiamo mettere tutto nello script sboby.sh in ~/bin/ che renderemo eseguibile (`chmod 755 ~/bin/sboby.sh`).
|
||||||
(guarda un po') un JSON in un SRT.
|
|
||||||
|
|
||||||
# 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`
|
![sboby custom action](sboby-custom-action.png)
|
||||||
|
|
||||||
*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.
|
|
||||||
|
|
||||||
# Share and enjoy
|
# Share and enjoy
|
||||||
|
|
||||||
Shoutz a Debian, ffmpeg, videogrep e vosk, Bomboclat per lo script, ilLobo per
|
*"Dove si smangiuca, dio mi conduca. Dove si lavora, non venga mai l'ora". Skiantos, 2009, Una vita spesa a skivar la fresa*.
|
||||||
aver scoperto videogrep, dan che ha scritto, e Shoutz a te che leggi, possa la
|
|
||||||
sbobinatura esserti lieve.
|
|
||||||
|
|
||||||
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
|
Ultimo aggiornamento: 2024-09-04
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
*bye bye sboby*
|
*bye bye sboby*
|
||||||
|
|
BIN
allunaggio.mp3
Normal file
BIN
allunaggio.mp3
Normal file
Binary file not shown.
BIN
sboby-custom-action.png
Normal file
BIN
sboby-custom-action.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue
Block a user