Rimuovere Loghi E Sottotitoli


Scritta da aytin il 15-03-2006

Le acquisizioni da TV spesso mostrano l'immancabile logo.
La sua rimozione è più semplice di quello che si crede. Basta che...



COME RIMUOVERE LOGHI E SOTTOTITOLI

- scritta da: ..::Aytin::..
- collaborazione, supporto, revisione: ..::Divxmania Staff::..


E' noto che nelle acquisizioni da tv bisogna scendere ad un compromesso relativamente alla presenza di loghi o sottotitoli a scorrimento che possono comparire nel corso della trasmissione.

I loghi possono essere rimossi in modo relativamente semplice facendo uso di poche, semplici applicazioni.

Alcuni plugin per VirtualDub (per es. MSU_DeLogo) sfruttano delle sofisticate analisi del moto per ricostruire, nelle scene in cui la camera si sposta, i particolari che il logo copre.
Tutto questo permette una certa precisione nell'eliminazione del logo che si paga con una notevole lentezza.

La tecnica suggerita di seguito fa uso di un altro strumento, molto semplice ed altrettanto potente, che unisce un buon risultato ad una velocità degna di nota.

Per eliminare loghji e sottotitoli basta usare Avisynth, uno strumento di video-editing molto potente che dispone di un numero sterminato di filtri e script che lo rendono estremamente versatile.

Peculiarità di Avisynth è l'assenza di un'interfaccia grafica (anche se esistono diverse GUI scritte da terze parti), l'uso avviene tramite script.

Per la rimozione di loghi e sottotitoli basta uno script di poche righe. Il vantaggio dell'approccio con Avisynth, oltre che per la velocità, nasce dal fatto che i suoi script possono essere utilizzati anche da Nero Recode.

Veniamo al succo.
Ciò che serve è: L'installazione di avisynth è semplicissima. Basta lanciare il setup dopodiché, tutto ciò che serve, è un editor di testo, anche il blocco note di Windows va benissimo.

PASSO 1: Installazione Avisynth

Basta lanciare il setup.
Gli script scaricati si possono posizionare in una qualunque cartella.
Per fissare le idee, nell'esempio si assumerà che gli script stiano in C:\myScript e l'avi in C:\myFilm

PASSO 2: Preparazione di una mask

Individuare un fotogramma nel video in cui il logo sia ben visibile come in figura 1:

user posted image

fig. 1 - Originale

Annotare con cura le coordinate (x,y) del log (serviranno nel passo 3), la sua altezza e la sua lunghezza.

Ciò che segue nella parte rimanente di questo passo non è obbligatorio. In alcuni casi si potrà farne anche a meno.
Nel caso in cui si abbia bisogno di usare una mask (più avanti verrà detto quanto ciò sarà opportuno e di conseguenza si capirà quando questo passo serva o meno), basta ritagliare il logo con qualunque programma di video editing.

user posted image

fig. 2 - Logo

Con un semplice programma di fotoritocco (ho usato PhotoFiltre) si ottiene con 2 click una mask come quella che si vede in figura 3:

user posted image

fig. 3 - Mask

PASSO 3: Preparazione dello script

QUOTE

Import("C:\myScript\DelogoMask.avsi") # permette di importare gli script avs

clip=AviSource("C:\myFilm\prova.avi") #consente di processare l'avi

maskclip=ImageReader("C:\myFilm\mask.jpg", 0, 0) # carica la mask salvata in precedenza
clip=clip.DelogoMask(maskclip,532, 392, 44,44) # rimuove il logo

return clip


DelogoMask(clip, maskLogo, Xp, Yp, X, Y):
(*) La lunghezza del logo dev'essere un numero pari altrimenti DelogoMask andrà in errore.

Lo script preparato si salva con estensione *.avs
A questo punto il risultato è immediatamente visibile.
Basta visualizzare il file avs con un qualunque player, ad es. Media Player Classic:

user posted image

fig. 4 - Uso di DelogoMask

Se il risultato è soddisfacente non rimane che codificare con VirtualDub Mod o Nero Recode.

Note:

1) Quando usare una mask? Sicuramente conviene in casi come questo, quando cioè il logo è piuttosto semplice e non troppo invasivo. Si riesce a recuperare un pezzo di video dai "buchi".
Quando invece il logo è massiccio, la presenza della mask è quasi ininfluente. Il "quasi" dipende dalla forma del logo.
Nel caso in cui sia un quadratone massiccio si può usare direttamente Delogo invece di DelogoMask
Lo script diventa ancora più semplice:

QUOTE

Import("C:\myScript\DelogoMask.avsi") # permette di importare gli script avs
AviSource("C:\myFilm\prova.avi") #consente di processare l'avi
Delogo(clip,532, 392, 44, 44, 255)
return clip

Delogo(clip, Xp, Yp, X, Y, Amount):
Le uniche differenza rispetto a DelogoMask sono costituite da:

Il risultato è il seguente (sulla base della fig. 4)

user posted image

fig. 5 - Uso di Delogo

Come si nota subito, se è il logo è posizionato su uno sfondo scuro, Delogo (a meno di non avere una mask ultra definita) si comporta benissimo perchè con i parametri opportuni il logo viene coperto senza via di scampo.
Quando la camera si sposta si apprezza invece di più la minore invasività di DelogoMask.

2) Dekafka(clip, maskLogo, Xp, Yp, X, Y, Amount):

Dekafka si usa nella stessa, precisa, identica maniera di Delogo ma ha bisogno di una mask necessariamente.
Unica avvertenza: la mask ha quasi sempre bisogno di essere ritoccata un pò, per evitare che parte del logo rimanga visibile.
Questo è uno dei motivi per cui ho usato DelogoMask che è più preciso da questo punto di vista.

Usando la stessa mask (che andrebbe ritoccata sugli orli ancora visibili, come dicevo prima), questo sarebbe il risultato:

user posted image

fig. 6 - Uso di Dekafka

Lo script:
QUOTE

Import("C:\myScript\DelogoMask.avsi") # permette di importare gli script avs

clip=AviSource("C:\myFilm\prova.avi") #consente di processare l'avi

maskclip=ImageReader("C:\myFilm\mask.jpg", 0, 0) # carica la mask salvata in precedenza
clip=clip.Dekafka(534, 394, 44,44 ,255)) # rimuove il logo

return clip

è uguale a quello usato per DelogoMask (ovviamente c'è Dekafka in questo caso)

Infine veniamo alla rimozione dei sottotitoli.

L'ultimo script incluso nel pacchetto che avete scaricato è il DeSubt che permette di eliminare i sottotitoli a scorrimento come quello riportato in figura 7:

user posted image

fig. 7 - originale con sottotitoli

Con un gioco di prestigio, questo script (se volete controllare sono 6 righe) usa il video stesso come mask.
L'invocazione è semplicissima:

DeSubt(clip, Xp, Yp, X, Y):

Lo script è il seguente:

QUOTE

Import("C:\myScript\Desubt.avsi") # permette di importare gli script avs

clip=AviSource("C:\myFilm\prova.avi") #consente di processare l'avi

a=clip.trim(0,110)
b=clip.trim(111,300).DeSubt(0,400,530,30) # (111,300) è il frammento del video su cui compaiono i sottotitoli

a+b


e questo è il risultato:

user posted image

fig. 8 - Uso di Desubt

user posted image

trim, che ricordo per chi non lo sapesse, serve per selezionare una porzione video. In questo caso quella in cui compaiono i sottotitoli.
Va ricordato che l'uso di Delogo, Dekafka o Desubt comporta un minimo artefatto inevitabile, di cui parlerò più avanti.
L'uso di trim serve proprio per ridurre al minimo indispensabile la presenza di tale artefatto.


Siccome siamo diventati bravi possiamo realizzare uno script che elimini sia loghi che sottotitoli:

QUOTE

Import("C:\myScript\Desubt.avsi") # permette di importare gli script avs
Import("C:\myScript\DelogoMask.avsi")

clip=AviSource("C:\myFilm\prova.avi") #consente di processare l'avi

maskclip=ImageReader("C:\myFilm\mask.jpg", 0, 0) # carica la mask salvata in precedenza
clip=clip.DelogoMask(maskclip,532, 392, 44,44) # rimuove il logo

a=clip.trim(0,110)
b=clip.trim(111,300).DeSubt(0,400,530,30) # (111,300) è il frammento del video su cui compaiono i sottotitoli

a+b


Il risultato sarà qualcosa del genere:

user posted image

fig. 9 - Combo DelogoMask e Desubt

Nelle ultime due immagini è più evidente il lavoro di fino che fa DelogoMask rispetto a Delogo.

Se avessimo usato Delogo perchè siamo pigri e non c'abbiamo nessuna voglia di fare delle mask:

QUOTE

Import("C:\myScript\Desubt.avsi") # permette di importare gli script avs
Import("C:\myScript\Delogo.avsi")

clip=AviSource("C:\myFilm\prova.avi") #consente di processare l'avi

clip=Delogo(clip, 532, 392, 44,44, 255) # rimuove il logo

a=clip.trim(0,110)
b=clip.trim(111,300).DeSubt(0,400,530,30) # (111,300) è il frammento del video su cui compaiono i sottotitoli

a+b


Il risultato sarà qualcosa del genere:

user posted image

fig. 10 - Combo Delogo e Desubt

Nelle ultime due immagini è più evidente il lavoro di fino che può compiere DelogoMask rispetto a Delogo

CONLUSIONI

Bastano pochissime righe per eliminare loghi e sottotitoli.
Il caso trattato riguarda un avi ma niente vieta di estendere il discorso a stream video di altro tipo che Avisynth riesce tranquillamente a processare.
Basta sostituire semplicemente l'istruzione che acquisisce l'avi (avisource) con: Certo, i risultati non possono essere pulitissimi.
La rimozione dei loghi e sottotitoli lascia delle tracce più o meno evidenti soprattutto quando un oggetto si muove sullo schermo o la camera si sposta.
Non si possono ricostruire particolari facendoli spuntare dal nulla (a meno di particolari analisi sul movimento presente nel video), tuttavia questo approccio ha il vantaggio di essere: Un ringraziamento ai ragazzi del forum di www.doom9.org
Gli script li ho trovati sul loro sito.
Le personalizzazioni che ho ritenuto di dover aggiungere hanno riguardato essenzialmente: Fonti:
  1. Dekafka: http://forum.doom9.org/showthread.php?p=65...8244#post658244
  2. Desubt: http://forum.doom9.org/showthread.php?p=65...8388#post658388
  3. Delogo: http://forum.doom9.org/showthread.php?p=65...7396#post657396
  4. DelogoMask: http://forum.doom9.org/showthread.php?p=65...7752#post657752

Pagina stampata da Divxmania.it
Vietata la copia e la distribuzione (anche parziale) senza la previa autorizzazione.