Dank der großartigen und geduldigen Hilfe von Didée ist die GradientMask-Funktion in einem funktionsfähigen Stadium angekommen. Nicht hübsch, aber tut:
# V0.1
# Gradientstaerke wird festgelegt durch tp,bp,lp,rp.
# Gesamtgröße incl. Gradient durch width, und height.
# Bildrate durch fps und Länge in Frames durch length.
function GradientMask(int width, int height, int tp, int bp, int lp, int rp, int fps, int length){
blankclip(width=64,height=64,pixel_type="YV12",length=length,fps=fps)
w = mt_lut("255")
b = w.mt_invert()
base = stackvertical(stackhorizontal(b,b),stackhorizontal(b,w))
base9 = stackvertical(stackhorizontal(b,b),stackhorizontal(b,w)).TurnRight()
base18 = stackvertical(stackhorizontal(b,b),stackhorizontal(b,w)).FlipVertical().FlipHorizontal()
base27 = stackvertical(stackhorizontal(b,b),stackhorizontal(b,w)).TurnLeft()
top_left_edge = base.bicubicresize(lp,tp,1,0, 63,63,2,2)
top_right_edge = base9.bicubicresize(rp,tp,1,0, 63,63,2,2)
bottom_right_edge = base18.bicubicresize(rp,bp,1,0, 63,63,2,2)
bottom_left_edge = base27.bicubicresize(lp,bp,1,0, 63,63,2,2)
top_border = base.bicubicresize(width-(rp+lp),tp,1,0, 65,63,2,2)
bottom_border = base.bicubicresize(width-(rp+lp),bp,1,0, 65,63,2,2).FlipVertical()
left_border = base18.bicubicresize(lp,height-(tp+bp),1,0, 63,0,2,2).FlipHorizontal()
right_border = base18.bicubicresize(rp,height-(tp+bp),1,0, 63,0,2,2)
center = blankclip(width=width-(rp+lp),height=height-(tp+bp),pixel_type="YV12",color=$FFFFFF)
top = StackHorizontal(top_left_edge,top_border,top_right_edge)
middle = StackHorizontal(left_border,center,right_border)
bottom = StackHorizontal(bottom_left_edge,bottom_border,bottom_right_edge)
combined = StackVertical(top,middle,bottom).greyscale()
return combined
}
Alles anzeigen
Mit der Gradientmask lassen sich z.B. die Ränder eines UGLARM-Logoaway-Filters oder eines lokalen blurs zur verbesserten Logoentfernung mit Delogo oder Delogos PP-Mode an den Rändern verschönern.
----------------------------------
Hallo Leute,
da ich viele TV-Aufnahmen archiviere und gerne Logos und Einblendungen entferne, benötige ich oft Verlaufsmasken.
Ich möchte mir nun eine Funktion schreiben, mit der ich diese Masken direkt generieren kann, und so nicht mehr auf Photoshop & Co angewiesen bin. Für den einmaligen Einsatz ist die Methode die Maske extern zu erzeugen sicherlich in Ordnung, wenn man sie aber oft und in unterschiedlichsten Größen und Verlaufsstärken benötigt, dann wirds nervig.
Ich habe dann nun das Avisynth-Wiki rauf und runtergelesen, Rekursion und if...else versucht, aber ich bin offensichtlich nicht tief genug in der Materie um etwas hinzubekommen oder schlicht zu blöde.
Das Ziel ist eine Funktion, der - Breite, Höhe, Stärke des Verlauf, Bildanzahl und Bildrate - angegeben werden, und die daraus einen Verlaufsmaskenclip erstellt.
In etwa so:
function GradientMask(clip c, int width, int height, int GPower, int GMframecount, int GMframerate) {
}
In meiner Verzweiflung wollte ich einen weißen Blankclip mit width und height erstellen, mit der Bildanzahl von GPower, diesen dann ausfaden über GPower-1, dann jedes Bild entsprechend seiner Frameposition um eben diese runtherum croppen, und danach mittels Overlay die einzelnen Bilder übereinanderlegen.
Ich habs wie gesagt nicht hinbekommen.
Ansonsten habe ich nur Gradient Mask Maker gefunden, bei diesem kann man aber nur eine Verlaufsmaske über die komplette Fläche erstellen, keine mit variablem Innenraum, respektive Gradientdicke.
Gibt es sowas schon, oder hat jemand so flinke Finger, dass er sowas schnell heruntertippen kann?
Bin für eure Hilfe dankbar, und hoffe anhand von evtl. auftauchenden Beispielcodes auch selbst mehr zu lernen.
Grüße