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 è:
- Avisynth
- un semplice programma di fotoritocco (facoltativo, poi si capirà il perchè)
- i plugin per la rimozione dei loghi/sottotitoli:
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 AvisynthBasta 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:\myFilmPASSO 2: Preparazione di una maskIndividuare un fotogramma nel video in cui il logo sia ben visibile come in figura 1:
fig. 1 - OriginaleAnnotare 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.
fig. 2 - LogoCon un semplice programma di fotoritocco (ho usato
PhotoFiltre) si ottiene con 2 click una mask come quella che si vede in figura 3:
fig. 3 - MaskPASSO 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):
- clip: è il video
- maskLogo: è la mask del logo (jpg)
- Xp, Yp: coordinate (X,Y) dell'angolo in alto a sinistra del logo all'interno del frame (ritagliando il logo con un qualunque programma di fotoritocco dovrebbero essere immediatamente visibili insieme alle altre informazioni sottoelencate)
- X: lunghezza logo (*)
- Y: altezza logo
(*) La lunghezza del logo dev'essere un numero pari altrimenti DelogoMask andrà in errore.
Lo script preparato si salva con estensione
*.avsA questo punto il risultato è immediatamente visibile.
Basta visualizzare il file avs con un qualunque player, ad es. Media Player Classic:
fig. 4 - Uso di DelogoMaskSe 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
DelogoMaskLo 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:
- la mancanza del mask
- dal nuovo parametro Op che misura l'intensità con cui il logo viene rimosso.
- Amount = 0, nessuna azione. Il logo rimane visbile.
- Amount = 255, massimo blur ottenibile.
Il risultato è il seguente (sulla base della fig. 4)
fig. 5 - Uso di DelogoCome 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:
fig. 6 - Uso di DekafkaLo 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:
fig. 7 - originale con sottotitoliCon 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):
- clip: è il video
- Xp, Yp: coordinate (X,Y)
- X: lunghezza sottotitolo
- Y: altezza sottotitolo
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:
fig. 8 - Uso di Desubt
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:
fig. 9 - Combo DelogoMask e DesubtNelle 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:
fig. 10 - Combo Delogo e DesubtNelle ultime due immagini è più evidente il lavoro di fino che può compiere
DelogoMask rispetto a
DelogoCONLUSIONIBastano 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:
- DirectShowSource: per asf, wmv, DV type 1, o files che usano i soli codecs DirectShow.
- MPEG2Source: se la sorgente è un DVD (in questo caso servirebbe anche DGIndex)
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:
- semplice
- veloce
- applicabile, come ricordavo all'inizioa, sia a VirtualDub Mod che Nero Recode (che sono sicuro, farà piacere a qualcuno)
Un ringraziamento ai ragazzi del forum di
www.doom9.orgGli script li ho trovati sul loro sito.
Le personalizzazioni che ho ritenuto di dover aggiungere hanno riguardato essenzialmente:
- preservare la coerenza con lo spazio-colore (ho fatto in modo che il clip di ritorno stia sempre su YV12)
- parametrizzare le funzioni che all'origine cablavano al loro interno i parametri necessari per il trattamento di loghi e sottotitoli. Questo avrebbe rischiesto una modifica dello script ad ogni utlizzo
Fonti:
- Dekafka: http://forum.doom9.org/showthread.php?p=65...8244#post658244
- Desubt: http://forum.doom9.org/showthread.php?p=65...8388#post658388
- Delogo: http://forum.doom9.org/showthread.php?p=65...7396#post657396
- DelogoMask: http://forum.doom9.org/showthread.php?p=65...7752#post657752