View Full Version : Script avisynth per confronto visivo codifica
einstein1969
18-08-2012, 15:07
Salve, vorrei realizzare uno script avisynth che permetta di vedere visivamente in movimento e in fermo immagine la differenza tra un video originale e uno codificato.
Avevo questa idea:
dividere lo schermo in quattro parti
+----------------------+---+
| | |
| | |
| Codificato/confronto | |
| 1 | 3 |
| | |
+----------------------+---+
| | |
| | |
| Originale | |
| 2 | 4 |
| | |
+----------------------+---+
1) Filmato codificato che scorre e una banda verticale del 10-20% del filmato originale che scorre a ping-pong orizzontalmente e si sovrappone sul filmato codificato.
2) Filmato originale che scorre.
3) differenza(della banda sovrapposta) in luminanza dei due filmati
4) differenza(della banda sovrapposta) in crominanza dei due filmati
Ciao.
Ho capito in parte:
1) Filmato codificato che scorre e una banda verticale del 10-20% del filmato originale che scorre a ping-pong orizzontalmente e si sovrappone sul filmato codificato.
La banda deve rivelare la porzione del filmato originale sovraimpressa a quello codificato?
O deve essere semplicemente una banda verticale semitrasparente?
3) differenza(della banda sovrapposta) in luminanza dei due filmati
4) differenza(della banda sovrapposta) in crominanza dei due filmati
Devono corrispondere al punto dove la banda si trova in quel momento?
einstein1969
19-08-2012, 18:27
Ciao.
Ho capito in parte:
La banda deve rivelare la porzione del filmato originale sovraimpressa a quello codificato?
O deve essere semplicemente una banda verticale semitrasparente?
Devono corrispondere al punto dove la banda si trova in quel momento?
1) La banda deve rivelare solo il filmato originale. Ho pensato che se si sovrappone non si comprende a vista d'occhio la differenza e viene un pasticcio. Quindi senza semitrasparenza.
3) e 4) Si le informazioni sono relative solo alla banda e nel punto in cui si trova.
[/code]
Per il layout non ci sono grossi problemi, lo scorrimento della porzione del video originale si può fare con una maschera in movimento e la comparazione visiva con Layer o Overlay, oppure animando il filtro Crop.
Il problema nasce nella comparazione scritta:
1) va trovato il filtro giusto, Compare non fa al caso e dando un'occhiata uno che raffronti Luma e Chroma e riporti un testo su video non l'ho trovato.
2) mi sembra che ogni filtro di debug stampi le info sulla clip in esame e non le archivi come dati richiamabili altrove e quindi stampabili su un'altro sfondo.
einstein1969
20-08-2012, 12:38
Non so cosa sono le maschere...
1) Pensavo al subtract
2) Per le informazioni io pensavo piu' che altro a informazioni "visive" (ma se ci sono anche a supporto quelle numeriche ben venga, ma non sono necessarie)
Comunque se non e' possibile passare le informazioni su un altro punto , va bene metterle nel punto in cui si calcolano.
Ok. Ti posto uno script di esempio.
maschera=avisource("mask.avi").bicubicresize(640,360).ConvertToRGB32().loop()
clip1=AviSource("test1_1.avi").bicubicresize(640,360).ConvertToRGB32()
clip2=AviSource("test4.avi").bicubicresize(640,360).ConvertToRGB32()
clip_mask1=avisource("test1_1.avi").bicubicresize(640,360).converttorgb32.mask(maschera)
clip_mask2=avisource("test4.avi").bicubicresize(640,360).converttorgb32.mask(maschera)
banda=Layer(clip1,clip_mask2)
datiC=Layer(clip_mask1,clip_mask2).bicubicresize(260,360)
datiC2=compare(clip1,clip2).bicubicresize(260,360)
dati=stackvertical(datiC,datiC2).bicubicresize(260,720)
video=stackvertical(banda,clip1).bicubicresize(640,720)
comp=StackHorizontal(video,dati)
return comp
Questa è la maschera in movimento:
83109
Usa la maschera e sostituisci i file.avi con quelli che hai tu per provare lo script e vediamo se può essere un punto di partenza.
Poi vediamo come modificarlo per le tue esigenze.
einstein1969
21-08-2012, 21:56
Ho il pc con l'hd che sta morendo... Per il momento non posso proseguire con i test. Almeno finche' non ripristino il tutto... Che p....!
einstein1969
28-08-2013, 23:24
... dopo un anno ...
Ho provato lo script con la maschera e il risultato ottenuto e' quello che volevo ma mi sono reso conto che non e' sufficiente per vedere le differenze.
Esavoc, complimenti per tutto quell'effort con tanto di mask mobile!
Comunque, per effettuare il confronto ti conviene utilizzare Masktool (http://manao4.free.fr/mt_masktools.html). Una volta installati i suoi plug in ti conviene spostarti in yv12 invece che lavorare in RGB, quindi sostituire i ConvertToRGB32() con ConvertToYV12() e poi effettuare i confronti in questo modo:
Luma: mt_makediff(clip_mask1,clip_mask2).histogram("luma")
Chroma: mt_makediff(clip_mask1,clip_mask2, U=3,V=3).mt_lut(Y=128,U=2,V=2)
essenzialmente con il primo per il luma vai a fare una differenza tra le due clip (da un punto di vista matematico clip1-clip2+128) poi con Histogram("luma") vai a buttare via il chroma ed evidenzi il luma. Invece la seconda va prima a fare la differenza tra le due clip e poi va a scartare il luma e lasciare solo il chroma. U=3 e V=3 essenzialmente vanno a forzare l'elaborazione delle 2 componenti cromatiche visto che di default masktool elabora solamente il luma.
Grazie. :)
In realtà ho creato questo script come base da cui partire, volevo sapere se era quel tipo di layout che einstein1969 voleva ottenere.
Riguardo la comparazione hai ragione però ci sarebbero alcune incompatibilità tra i formati colore, mask per esempio lavora solo in RGB32. Andrebbe ripensato nel suo insieme magari mantenendone le funzionalità.
E' passato un'anno...
Grazie. :)
In realtà ho creato questo script come base da cui partire, volevo sapere se era quel tipo di layout che einstein1969 voleva ottenere.
Riguardo la comparazione hai ragione però ci sarebbero alcune incompatibilità tra i formati colore, mask per esempio lavora solo in RGB32. Andrebbe ripensato nel suo insieme magari mantenendone le funzionalità.
E' passato un'anno...
Ormai diciamo che in avisynth si preferisce lavorare in yv12 sia perché la stramaggioranza dei filtri lavorano in quel colorspace, sia perché con ogni probabilità ti ritrovi ad importare file yv12 e quindi eviti conversioni di colorspace. Ad esempio, per fare il lavoro fatto da mask ma in yv12 puoi tranquillamente utilizzare la funzione mt_merge di masktool.
einstein1969
29-08-2013, 18:18
La parte della luminanza sembra buona... E' amplificata 16 volte ?
Si potrebbe amplificare anche la crominanza e trasformarla in luminanza e poi aggiungerla?
Al risultato poi vorrei aggiungere la clip originale in semitrasparenza.
Ho provato a prendere degli spunti in giro ed ho abbozzato una funzione che devo ancora capire bene... vorrei usare la mt_diff anche qui se e' meglio.
function ODiff(clip A,clip B) {
#amplificazione crominanza
# 2048 default
AmpYUV=2048
#amplificazione luminanza
# 8 default
AmpY=8
Diff=subtract(A,B)
DY=Overlay(Diff,Diff.invert(),x=0,y=0,mode="lighten",opacity=1).ColorYUV(off_y=-128).Levels
(0,1,256/AmpY,0,255,coring=false).greyscale()
DUV=Diff.ColorYUV(off_y=-255,cont_u=AmpYUV,cont_v=AmpYUV)
DYUV=DY.MergeChroma(Diff.ColorYUV(cont_u=AmpYUV,cont_v=AmpYUV))
# trasformo in luminanza la crominanza
# Chroma to lumina
VY=Diff.ColorYUV(off_y=-255,cont_u=AmpYUV,cont_v=AmpYUV).VToY().ColorYUV(off_y=-128)
UY=Diff.ColorYUV(off_y=-255,cont_u=AmpYUV,cont_v=AmpYUV).UToY().ColorYUV(off_y=-128)
UVY=overlay(VY,UY,x=0,y=0,mode="add",opacity=1).BilinearResize(Diff.width, Diff.height) # verificata opacity 1.0 va bene
# Mix (mergeluma?)
UVYY=overlay(UVY,DY,x=0,y=0,mode="add",opacity=1)
O=Overlay(UVYY,A,x=0,y=0,mode="add",opacity=0.1)
OC=Overlay(DYUV,A,x=0,y=0,mode="add",opacity=0.1)
OO=Overlay(DY,A,x=0,y=0,mode="add",opacity=0.2)
OOC=Overlay(OO,DUV,x=0,y=0,mode="add",opacity=0.5)
#return interleave(A.subtitle("A"),B.subtitle("B"),DY,DUV,DYUV,UY.BilinearResize(Diff.width, Diff.height),VY.BilinearResize(Diff.width, Diff.height),UVY,UVYY,O)
return OOC
}
La parte della luminanza sembra buona... E' amplificata 16 volte ?
Si potrebbe amplificare anche la crominanza e trasformarla in luminanza e poi aggiungerla?
Al risultato poi vorrei aggiungere la clip originale in semitrasparenza.
Si, histogram("luma") amplifica di 16 volte la "differenza", di conseguenza anche piccole variazioni di luma vengono rese molto visibili.
I piani sono 3, u,v e y quindi diciamo che non puoi portare sia u che v su y, ma puoi portare prima uno poi l'altro e poi sommare queste differenze. Quindi potresti fare una cosa del tipo:
v_Clip=mt_makediff(clip_mask1,clip_mask2, U=3,V=3).mt_lut(Y=128,U=2,V=2).vtoy()
u_Clip=mt_makediff(clip_mask1,clip_mask2, U=3,V=3).mt_lut(Y=128,U=2,V=2).utoy()
mt_lutxy(v_Clip, u_Clip, "x y +").spline36resize(1280,720).histogram("luma")
in questo modo lo rendi molto più visibile. Essenzialmente vtoy() sostituisce i due piani v e y, analogamente utoy() sostituisce u e y. mt_lutxy invece ti permette di scrivere una equazione in 2 variabili, che sono appunto x e y le quali rappresentano i valori in luminanza dei pixel delle due clip. Le equazioni devono essere scritte in reverse polish notation. Il resize l'ho messo poiché se lavori in yv12 il dettaglio di chroma è pari alla metà di quello del luma, e quindi dopo xtoy() ti ritroveresti con una risoluzione pari a 320x180.
visto che parlate di maschere...
qualcuno sa dirmi come funziona mt_merge?
ho provato così
clip1 = AviSource("D:\questo.avi")
clip2 = AviSource("D:\quello.avi")
mt_merge(clip1, clip2)
e così
clip1 = AviSource("D:\questo.avi")
clip2 = AviSource("D:\quello.avi")
clip1.mt_merge(clip2)
ma non funziona
altrimenti quali alternative ci sono per le maschere?
con la maschera che devo usare non va bene Overlay(clip1, clip2, mode="blend", opacity=100, y=0, x=0)
visto che parlate di maschere...
qualcuno sa dirmi come funziona mt_merge?
ho provato così
clip1 = AviSource("D:\questo.avi")
clip2 = AviSource("D:\quello.avi")
mt_merge(clip1, clip2)
e così
clip1 = AviSource("D:\questo.avi")
clip2 = AviSource("D:\quello.avi")
clip1.mt_merge(clip2)
ma non funziona
altrimenti quali alternative ci sono per le maschere?
con la maschera che devo usare non va bene Overlay(clip1, clip2, mode="blend", opacity=100, y=0, x=0)
It merges two clips according to the mask. The bigger the mask value, the more the second clip will be taken into account
essenzialmente come argomenti ha clip1, clip2 e mask (più altri che sono sempre descritti qui (http://manao4.free.fr/mt_masktools.html#mt_merge)). La mask immaginala come un frame con parti nere e bianche, le parti nere le prenderà dalla prima clip, quelle bianche dalla seconda e le fonde (merge). La mask o la fai a mano oppure cerchi di crearla con qualche riga di codice in base a quello che ti serve (diciamo che per fare questo serve un po' di esperienza). Ovviamente non considera solo nero e bianco, ad esempio se la mask avesse delle zone grigie in corrispondenza di quelle andrebbe a fare una sorta di "blend" delle due clip.
la maschera è questa (quella sotto che inizia con ### BEGIN SCRIPT ###)
http://forum.doom9.org/showpost.php?p=1177432&postcount=10
in realtà non credo che sia quella giusta... cioè non è quella che produce proprio questo risultato
http://forum.doom9.org/showpost.php?p=1177500&postcount=13
il risultato è una maschera grigia, mentre dovrebbe essere nera
agendo sui livelli si ottiene qualcosa di simile, ma non uguale
credo che lo script che ha usato sia diverso e non lo ha condiviso (oppure è quello che ha messo + qualcosa che non so)
il thread completo è questo
http://forum.doom9.org/showthread.php?t=140623
faccio fatica a capirci qualcosa in inglese :stordita:
ancora non ho capito che script devo usare per fondere la source con la maschera
scrivendo mt_merge(clip1, clip2) mi dice "invalid argument to function..."
aggiungendo il parametro "mask" mi dice I don't know "mask" means
questo: mt_merge : clip clip1, clip clip2, clip mask, bool "luma"(false), non so come usarlo
uso masktools-v2.0a48
:help:
la maschera è questa (quella sotto che inizia con ### BEGIN SCRIPT ###)
http://forum.doom9.org/showpost.php?p=1177432&postcount=10
in realtà non credo che sia quella giusta... cioè non è quella che produce proprio questo risultato
http://forum.doom9.org/showpost.php?p=1177500&postcount=13
il risultato è una maschera grigia, mentre dovrebbe essere nera
agendo sui livelli si ottiene qualcosa di simile, ma non uguale
credo che lo script che ha usato sia diverso e non lo ha condiviso (oppure è quello che ha messo + qualcosa che non so)
il thread completo è questo
http://forum.doom9.org/showthread.php?t=140623
faccio fatica a capirci qualcosa in inglese :stordita:
ancora non ho capito che script devo usare per fondere la source con la maschera
scrivendo mt_merge(clip1, clip2) mi dice "invalid argument to function..."
aggiungendo il parametro "mask" mi dice I don't know "mask" means
questo: mt_merge : clip clip1, clip clip2, clip mask, bool "luma"(false), non so come usarlo
uso masktools-v2.0a48
:help:
non c'è una mask generica, la devi creare te. Poi la vai a dare come argomento a mt_merge per specificargli come fondere le due clip. Comunque, cosa stai cercando di fare con mt_merge? magari posso aiutarti direttamente su quello.
non c'è una mask generica, la devi creare te. Poi la vai a dare come argomento a mt_merge per specificargli come fondere le due clip. Comunque, cosa stai cercando di fare con mt_merge? magari posso aiutarti direttamente su quello.
mi fai ripetere... :D
come riferimento ho le caps presenti qui http://forum.doom9.org/showpost.php?p=1177500&postcount=13
credo che si dovrebbe fondere la prima ORIGINAL, con la seconda HALO MASK, per ottenere la terza FIXED
giusto o sbagliato?
la mask non è generica, ma viene creata con lo script presente qui http://forum.doom9.org/showpost.php?p=1177432&postcount=10
come ho già detto... probabilmente non è lo script definitivo che ha usato... e se tu sapessi come ottenere il risultato della seconda cap HALO MASK, sarebbe fantastico
magari mt_merge non è il giusto metodo per fondere... questo non lo so
se mi fai lo script (che non ci capisco un cavolo) per "dare come argomento a mt_merge per specificargli come fondere le due clip" mi faresti un favore
grazie mille per l'aiuto
mi fai ripetere... :D
come riferimento ho le caps presenti qui http://forum.doom9.org/showpost.php?p=1177500&postcount=13
credo che si dovrebbe fondere la prima ORIGINAL, con la seconda HALO MASK, per ottenere la terza FIXED
giusto o sbagliato?
la mask non è generica, ma viene creata con lo script presente qui http://forum.doom9.org/showpost.php?p=1177432&postcount=10
come ho già detto... probabilmente non è lo script definitivo che ha usato... e se tu sapessi come ottenere il risultato della seconda cap HALO MASK, sarebbe fantastico
magari mt_merge non è il giusto metodo per fondere... questo non lo so
se mi fai lo script (che non ci capisco un cavolo) per "dare come argomento a mt_merge per specificargli come fondere le due clip" mi faresti un favore
grazie mille per l'aiuto
E figurati ^^
Il punto è che il tizio di quel thread ha postato immagini di un video che ha molto haloing, e quindi chiedeva come poteva eliminare quell'haloing e gli vengono proposte delle soluzioni che coinvolgono delle mask. Quindi, te stai cercando di correggere dell'haloing e stai cercando come maskarlo per filtrare solo quello? Non mi sembra che sia questo il caso, per questo ti chiedevo... Purtroppo non esistono formule magiche che migliorano a priori, ma dipende da quello che stai cercando di correggere e dalla sorgente... poi sulla base di questi decidi cosa fare. Comunque se può consolarti, anche io fatico a capire quei codici postati li, non a caso didée non è esattamente l'ultimo arrivato ^^
si certo, è proprio un de-halo che mi servirebbe
uso da sempre il BlindDeHalo3. Mi piace molto perchè affina l'immagine e toglie l'oversharp, quindi non lo uso solo per togliere gli aloni, anzi... credo che non si possa considerare un de-halo efficacissimo, come ad esempio il DeHalo_alpha, ma quello che non mi piace di quest'ultimo è che squadra un po' l'immagine
per me il discorso della squadratura è importanre... ed evito il più possibile filtri di sharp che tendono a squadrare... praticamente quasi tutti
la maschera che usa Avisynth_challenged mi sembra piuttosto buona proprio perchè mantiene l'immagine abbastanza fedele all'originale
allora non sai proprio come fare il merge usando quella maschera? :cry:
Didée lo considero un genio di Avisynth da una parte, e uno che fa tanti disastri dall'altra :asd:
si certo, è proprio un de-halo che mi servirebbe
uso da sempre il BlindDeHalo3. Mi piace molto perchè affina l'immagine e toglie l'oversharp, quindi non lo uso solo per togliere gli aloni, anzi... credo che non si possa considerare un de-halo efficacissimo, come ad esempio il DeHalo_alpha, ma quello che non mi piace di quest'ultimo è che squadra un po' l'immagine
per me il discorso della squadratura è importanre... ed evito il più possibile filtri di sharp che tendono a squadrare... praticamente quasi tutti
la maschera che usa Avisynth_challenged mi sembra piuttosto buona proprio perchè mantiene l'immagine abbastanza fedele all'originale
allora non sai proprio come fare il merge usando quella maschera? :cry:
Didée lo considero un genio di Avisynth da una parte, e uno che fa tanti disastri dall'altra :asd:
Purtroppo il caso che considerano li è molto specifico, io ti consiglio di usare DeHalo_alpha, se tweakkato bene funziona benissimo.
Purtroppo il caso che considerano li è molto specifico, io ti consiglio di usare DeHalo_alpha, se tweakkato bene funziona benissimo.
il tweak riguarda colore, contrasto e cose simili, o sbaglio?
non sono capace di tweakkare per migliorare il DeHalo_alpha..... ma mi sembra strano che il tweak possa togliere l'effetto di squadratura (che ricordo avesse)
se hai voglia di passarmi uno script con il tweak che migliora il DeHalo_alpha... :Prrr:
e poi c'è la questione FixVHSOversharp (http://www.geocities.ws/mrtibsvideo/fixvhsoversharp.html), che mi produce questi effetti
http://s22.postimg.org/o6e1v9n0h/source.png
http://s22.postimg.org/vvaw6zni9/Fix_VHSOversharp.png
FixVHSOversharp(30,12,8)
FixVHSOversharpL(30,12,8)
#FixVhxOversharp(30,14,10)
e poi VirtualDub mi dice: the is no function named "FixVhxOversharp"
il tweak riguarda colore, contrasto e cose simili, o sbaglio?
non sono capace di tweakkare per migliorare il DeHalo_alpha..... ma mi sembra strano che il tweak possa togliere l'effetto di squadratura (che ricordo avesse)
se hai voglia di passarmi uno script con il tweak che migliora il DeHalo_alpha... :Prrr:
e poi c'è la questione FixVHSOversharp (http://www.geocities.ws/mrtibsvideo/fixvhsoversharp.html), che mi produce questi effetti
http://s22.postimg.org/o6e1v9n0h/source.png
http://s22.postimg.org/vvaw6zni9/Fix_VHSOversharp.png
FixVHSOversharp(30,12,8)
FixVHSOversharpL(30,12,8)
#FixVhxOversharp(30,14,10)
e poi VirtualDub mi dice: the is no function named "FixVhxOversharp"
No no, percarità, lascia perdere tweak xD Intendevo dire se settato a dovere da ottimi risultati ^^
Anche per dehalo_alpha, non è che ci sia la formula magica... purtroppo ti tocca leggere la documentazione/thread su doom9 e vedere come impostarlo per ottenere quello che vuoi. Ti ripeto, io mi ci sono sempre trovato bene, ma più che altro l'ho utilizzato su anime vecchi... su film non saprei. L'altro che dici te sinceramente non lo conosco. Per quanto riguarda la mask purtroppo te la devi fare da te in modo da applicare il filtro solo dove ti serve senza andare a fare danni altrove, ma per fare questo ti serve molta dimestichezza con masktool
sul doom9 un utente mi ha risposto che probabilmente per la maschera di Avisynth_challenged non è stato usato l'mt_merge
ho chiesto cosa può aver usato ma non mi ha risposto
quali altri merge hanno la funzione della maschera?
sul doom9 un utente mi ha risposto che probabilmente per la maschera di Avisynth_challenged non è stato usato l'mt_merge
ho chiesto cosa può aver usato ma non mi ha risposto
quali altri merge hanno la funzione della maschera?
Che io sappia solo con masktool puoi, comunque ti ritroveresti nelle stesse difficoltà. Masktool è estremamente utile, ma non troppo facile da usare diciamo ^^ Per capire come funziona la mask guarda l'avi che ha fatto esavoc nel primo post. È tutto bianco con una striscia nera che si muove, facendo mt_merge tra 2 clip con quella mask ti ritrovi sul bianco la prima clip e in corrispondenza della sbarra nera che si muove la seconda clip.
Che io sappia solo con masktool puoi, comunque ti ritroveresti nelle stesse difficoltà. Masktool è estremamente utile, ma non troppo facile da usare diciamo ^^ Per capire come funziona la mask guarda l'avi che ha fatto esavoc nel primo post. È tutto bianco con una striscia nera che si muove, facendo mt_merge tra 2 clip con quella mask ti ritrovi sul bianco la prima clip e in corrispondenza della sbarra nera che si muove la seconda clip.
ecco... questa cosa è interessante!
però non so ancora come fare... mi devo s-cervellare :muro:
ho provato a fare (una cavolata) un fondo nero per il clip1, il video originale per il clip2 e la maschera di Avisynth_challenged per la mask..... ma risulta uno sfondo nero con gli aloni bianchi
non ho idea di come procedere :(
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.