Recensubs HQ

yuy2asyv12()

« Older   Newer »
  Share  
view post Posted on 20/2/2017, 19:53     +1   +1   -1
Avatar

Bimbosp

Group:
Administrator
Posts:
9,780
Reputation:
+929
Location:
Gallarate (VA)

Status:


Ultimamente ho dovuto lavorare su un botto di roba nativa yuy2, ma ci sono molti filtri che lavorano solo a yv12.
Se mi serve solo il luma non è un problema, perché mi basta fare un mergeluma con dentro convert+filtro+convert senza troppi problemi, ma se ho bisogno di processare anche il chroma, le cose si complicano leggermente.
Nulla di esoso, ma scrivere tutto a mano ogni volta è una noia, per cui ecco qui la mia ennesima funzioncina di utility per semplificarmi la vita.

Il filtro va passato come stringa, per cui se all'interno del filtro stesso dovete passare delle stringhe come parametri, ricordatevi di usare le triple virgolette.
Il parametro lumaonly l'ho messo per pesaculaggine estrema, ma non si sa mai, in genere questo filtro dovrebbe tornare utile proprio se si deve processare anche il chroma.
Il parametro dhmode cambia come il filtro si comporta per far filtrare il luma. Il risultato dovrebbe essere identico nei filtri che trattano luma e chroma allo stesso modo, per cui vedete cosa va più veloce, mentre per filtri di derainbow e cose del genere, dhmode true vi consente di trattare il chroma realmente come chroma, al costo di far girare il filtro pure su un luma del doppio dell'altezza originale (quindi con materiali HD potrebbe risultare parecchio più lento del dovuto).

Tutto sommato potrebbe essere ottimizzabile più di così (come sempre quando ci sono io a scrivere filtri, del resto), ma a meno di sgamare errori mentre lo uso più estensivamente direi che il codice resterà così.

CODICE
function yuy2asyv12(clip c, string filter, bool "dhmode", bool "lumaonly") {
assert(c.isyuy2(),"Input clip must be YUY2.")
dhmode = default(dhmode,false)
lumaonly = default(lumaonly,false)
c
hack = ytouv(utoy().converttoyv12().scriptclip(filter).converttoyuy2(),vtoy().converttoyv12().scriptclip(filter).converttoyuy2(),converttoyv12().scriptclip(filter).converttoyuy2())
luma = converttoyv12().scriptclip(filter).converttoyuy2()
chroma = ytouv(utoy().converttoyv12(),vtoy().converttoyv12(),bicubicresize(width,height*2).converttoyv12()).scriptclip(filter)
return lumaonly ? mergeluma(luma) : dhmode ? mergechroma(luma,ytouv(chroma.utoy().converttoyuy2(),chroma.vtoy().converttoyuy2(),c)) : hack
}


PS: Se avete YV16 ve lo convertite da soli in YUY2 prima di usare il filtro. Kthxbai.

Edited by mirkosp - 20/2/2017, 20:30
 
Web  Top
0 replies since 20/2/2017, 19:53   207 views
  Share