Aggiungere sottotitoli automatici ad un video

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Come molti di voi sapranno, è possibile guardare un video su youtube (per esempio) con i sottotitoli automatici per esempio in inglese. A me capita spesso di non capire perfettamente qualche frase in inglese magari un po' troppo stretto o pronunciata troppo rapidamente, così attivo i sottotitoli automatici e magicamente compaiono le parole che vengono pronunciate. Capita a volte che l'automatismo non ci azzecchi al 100%, ma in gran parte la trovo una soluzione utile e comoda.

Ora, avrei un video in inglese scaricato in locale sul PC. Vorrei guardarlo aggiungendovi i sottotitoli automatici come quando si guarda un video da yoututbe.
Sì può fare in qualche modo?

Provo a scomporre il problema:
1- la traccia audio che viene diretta al mio speaker/cuffie dovrebbe essere fatta passare prima per un servizio online che mi traduca automaticamente l'audio attraverso una sorta di riconoscimento vocale.
2- una volta che questo testo è scaricato in locale servirebbe una qualche funzione di mplayer per esempio che lo tramuti nel formato opportuno per essere rappresentato a video come sottotitolo.

Se il processo si vuole ottenere al volo, cioè mentre si guarda il video venga creato e scaricato il sottotitolo avrei qualche difficoltà a capire come fare. Magari poi "si scopre" che mplayer ha la possibilità di inserire un'opzione in cui mettere l'indirizzo del servizio di riconoscimento vocale e stop.

Se invece si facesse in due tempi mi pare più fattibile:
- estraggo la traccia audio ottenendo un mp3 ad esempio
- la carico sull'ipotetico sito (google???) che mi offre il servizio di riconoscimento vocale
- da quel testo creo un file ".srt" contente i subs (in questo modo però non so come vengono gestiti i tempi di apparizione del testo. in modo automatico intendo).
- do tutto vido e sub in pasto ad mplayer

Ho scritto qui perchè ho pensato che qualcuno possa conoscere la risposta, però sinceramente non ho cercato troppo via google.
Cosa ne pensate?
Conoscete qualche soluzione facile?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Mi rispondo in parte da solo.
Per fare un esempio ho scaricato un video in inglese da youtube.. usando youtube-dl, uno scriptino che si trova online.
Poi ho copiato il link a quel video e l'ho incollato in questo sito:

keepsubs.com

Fatto questo mi viene fornita una lista di sottotitoli ottenuti automaticamente e scaricabili comodamente sono in formato ".SRT".

Poi basta lanciare come al solito:

Codice: Seleziona tutto

mplayer -sub sottotitolo.srt video.mp4
Quindi se il video è stato scaricato da youtube non c'è problema.
la mia domanda era però un po' più generale....

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Ho trovato un modo per introdurre i sottotitoli automatici di un video che abbiamo in locale. Cerco di riassumere un po' tutti i passaggi che ho fatto io.

Cosa serve:
1- Un proprio canale youtube. Basta avere un'account Gmail e automaticamente abbiamo anche un account youtube, dal sito di youtube facciamo il "Sign In" ovvero vi accediamo con la nostra email e attiviamo il nostro canale Youtube. Nella gestione dei nostri video dovremo anche abilitare i sottotitoli automatici.

2- Un'immagine qualsiasi a nostra scelta, in teoria più è leggera e meglio è. La utilizzeremo come sfondo di un nuovo "fake video" contenente la nostra traccia audio, sarà da caricare sul nostro canale youtube. Avevo provato con una gif molto leggera ma non funziona, invece con un'immagine jpg un po' più grande non ci sono stati problemi.

3- Ffmpeg con cui andremo ad estrarre la traccia audio dal nostro video di partenza. E con lo stesso in un secondo tempo andremo a creare il nostro nuovo fake video.

4- Il servizio messo a disposizione da "keepsubs.com" per scaricarci i sottotitoli automatici da youtube.

Vediamo l'idea della procedura:

1- Estraggo dal video la traccia audio:

Codice: Seleziona tutto

ffmpeg -i video.mp4 audio.aac
2- Creo il fake video usando la traccia estratta al punto 1 e un'immagine jpg, nel mio caso un quadrato nero (basta cercare nelle immagini google la chiave "black" ;) ):

Codice: Seleziona tutto

~$ wget http://blacklabelsociety.com/home/wp-content/uploads/2014/01/spacer.jpg -O black.jpg

~$ ffmpeg -loop 1 -i black.jpg -i audio.aac -c:v libx264 -tune stillimage -c:a aac -strict experimental -b:a 192k -pix_fmt yuv420p -shortest fakevideo.mp4]
Delle opzioni che ho incluso non so dire granchè, ma senza non funzionava e trovando in rete queste indicazioni ho brutalmente copiato. Il risultato è stato soddisfacente.

Adesso ho un piccolo video, molto facile da caricare perchè molto meno ingombrante del video originale. Qualche dato d'esempio, nel mio caso:

Codice: Seleziona tutto

video.mp4: 35 MB
fakevideo.mp4: 3 MB

3- Carico il fakevideo.mp4 sul mio canale youtube e lo marco come pubblico facendo attenzione al fatto che siano attivi i sottotitoli automatici. Posso anche verificare riproducendo il fakevideo da youtube che i sottotitoli siano effettivamente funzionanti.

4- A questo punto copio il link youtube al mio fakevideo e lo incollo sul sito keepsubs.com. Cliccando "Download" scarico il mio file ".SRT" contenente i sottotitoli automatici relativi al mio fake video, che poi no sono altro che i sottotitoli del video originale (perchè la traccia audio è identica).

5- Infine riproduco il video originale con mplayer per esempio aggiungendo i sottotitoli ottenuti sopra:

Codice: Seleziona tutto

mplayer -sub fakevideo\ \[English\].srt  video.mp4
Spero che la cosa possa essere di qualche utilità a chi legge.
Se avete qualche altra idea che vi sembra più facile o qualche considerazione che volete aggiungere, non esitate: sicuramente sarà utilie.

Alla prossima :D

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Butto lì un'idea al fine di migliorare il riconoscimento vocale ed ottenere così dei sottotitoli automatici con meno errori. Non so sinceramente se questa idea sia fondata oppure se sia una sciocchezza.

A volte capita che una parola o un paio di parole vengano pronunciate in modo troppo "stretto" o comunque non adeguato rispetto a quelli che sono i limiti del riconoscimento vocale automatico.

Domanda:
Potrebbe essere un problema di velocità del parlato?
Se quella stessa frase venisse "rallentata" ed inviata poi al riconoscimento vocale la situazione potrebbe teoricamente migliorare?
Oppure non c'entra perchè il tempo totale della frase non interessa al programma di riconoscimento, ma caso mai interessa la spaziatura (relativa tra le parole).
Mi spiego meglio:
a volte capita che chi parla pronunci ad esempio due parole come una sola e con una pronuncia che potrebbe essere ambigua e magari assomigliare ad un'altra parola intera o ad altre due parole diverse.

Noi umani ci districhiamo nella comprensione introducendo le parole nel contesto della frase.
Il programma di riconoscimento vocale evidentemente ha qualche difficoltà in più e (chiedo perchè di preciso non so come funziona) si limita a fare il match di quanto "sente" muovendosi in un database di parole.

Se funziona così, allora anche rallentando il parlato non cambierebbe il risultato perchè proprio il suono delle due parole pronunciate insieme in modo stretto non riesce a trovare corrispondenza nel database di cui sopra, lenta o veloce cha sia la pronuncia.

Domanda a voi allora:
rallentando una frase mal riconosciuta dal programma di riconoscimento automatico potrebbe migliorare la situazione?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Ho fatto una prova:

1- ho lanciato la riproduzione del video con i sottotitoli automatici creati attraverso yoututbe come descritto sopra
2- ho individuato un punto in cui vi è un errore da parte del traduttore automatico, che traduce la parola pronunciata "pippo" con il sottotitolo "pluto", errore quindi.
3- come dicevo una via per correggere potrebbe essere, rallentare il video nel punto in cui vi è l'errore e postare il video rallentato su youtube e riottenere i sottotitoli automatici sperando che sta volta siano corretti.

Vi riporto i comandi che ho usato, così se qualcuno lege e vuole provare no si deve sbattere a cercarsi la soluzione:

Col seguente comando prendo in input il video e ottengo in output lo stesso video ritagliato a partire dal secondo 27 e di durata pochi altri secondi.
Allo stesso tempo il tutto viene rallentato col fattore 0.5 (una nota, la tonalità del suono viene mantenuta... è come il filtro "scaletempo" di mplayer, almeno credo anche se non ho verificato oltre).

Codice: Seleziona tutto

ffmpeg -i input.mp4 -filter_complex "setpts=PTS/0.5;atempo=0.5" -ss 00:00:27 -t 00:00:02 cutted-slow.mp4
A sto punto faccio l'upload del video così creato su youtube e attivo i sottotitoli automatici, nel caso specifico in inglese.

Li scarico e con grande sorpresa mi accorgo che effettivamente le parole che vengono riconosciute sono diverse da quelle dei sottotitoli precedenti. Tuttavia non sono più corrette, anzi rilevo parecchi più errori di prima.

Se avete un video in inglese parlato magari un po' stretto e lo uploadate su youtube, aggiungete i sottotitoli automatici e riscontrate alcuni errori. Potete provare la stessa procedura che ho testato io e dovreste giungere alle stesse conclusioni.
In pratica rallentando il parlato non è detto che il riconoscimento vocale sia migliore.

Ni Po
Linux 0.x
Linux 0.x
Messaggi: 1
Iscritto il: sab 29 giu 2019, 1:18

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da Ni Po »

ciao, ho visto questo argomento interessante, dove, prticamente, hai parlato solo tu. ma non ho capito come si fa a creare i sottotitoli automatici per un video che ho sul pc. c'è ancora la possibilità di farlo?
sai anche se in un video si possono inserire due sottotitoli contemporaneamente (inglese/italiano)?
grazie

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3788
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Aggiungere sottotitoli automatici ad un video

Messaggio da joe »

Facevo un a ricerca nei miei messaggi sul forum e sono inciampato in questo post che mi era sfuggito.
Rispondo con mesi di ritardo...

In sintesi:
- prendi il tuo video
- lo carichi su youtube
- prendi il link pubblico al video su youtube appena caricato e copialo su un servizio online del tipo di quello indicato sopra, che era keepsub.com, attualmente non più funzionante (ma alcuni simili ci sono: http://www.lilsubs.com/ , https://savesubs.com/ , https://downsub.com/ ecc... google ne trova anche altri).
- ecco che hai ottenuto il file SRT del sottotitolo

Per quanto riguarda l'inserimento del sottotitolo nel video, basta leggere il manuale del player che si usa.
Oppure del programma che si usa per comporre il file multimediale: ad esempio mkvmerge del pacchetto mkvtoolnix (https://mkvtoolnix.download/doc/mkvmerge.html)

Codice: Seleziona tutto

mkvmerge -o mymovie.mkv mymovie.avi mymovie.srt
In pratica passi il file SRT che hai ottenuto come input al comando mkvmerge.
Per aggiungere più sottotitoli ad esempio in diverse lingue, idem come sopra, avrai un altro file SRT e lo aggiungi in coda agli input del comando.
Se preferisci creare il video finale da una applicazione grafica piuttosto che con i comandi al terminale, mkvtoolnix comprende anche un'interfaccia grafica https://mkvtoolnix.download/doc/mkvtoolnix-gui.html.
Lì puoi mettere tutto insieme, tracce audio, tracce video, sottotitoli, immagini tipo etichetta ecc ecc...

Rispondi