Home
RecentChanges

Search:

» AviSynth is a powerful video FrameServer for Win32.

AviSynth Links:
»Download
»Learn to script
»FAQ
»Manual
»Discussion fora
»Project page
»External filters
»FeedBack

» You can add pages to this website immediately. No login required.
Edit this document

» AboutAviSynth

 

Avisynth 
Logo

ConditionalFilter Deutsch

( This site in flag-uk.gif english )

ConditionalFilter

ConditionalFilter(clip "testclip", clip "source1", clip "source2", string "filter", string "operator", string "value", bool "show")

ConditionalFilter gibt source1 zurück, wenn die Bedingung, die durch filter+operator+value angegeben ist, zutrifft. Andernfalls wird source2 zurückgegeben. Wenn filter nicht ausdrücklich auf einen Clip angewendet wird, so wird der auf den testclip angewendet. Der Ton wird source1 entnommen.

Beispiel:

Es werden Frames von "vid_blur" genommen, wenn der durchschnittliche Helligkeitswert eines Frames unter 20 ist. Ansonsten wird der Original-Frame "vid" genommen. Wenn man am Ende "true" hinzufügt, werden der aktuelle Wert angezeigt:

vid = AviSource("Dateiname.avi")

vid_blur = vid.Blur(1.5)

ConditionalFilter(vid, vid_blur, vid, "AverageLuma()", "lessthan", "20")

Mit filter kann jeder interner Filter sein, aber auch einige vordefinierte Funktionen (siehe unten).

Für operator kann man "equals", "morethan" oder "lessthan" wählen. Oder natürlich stellvertretend "=", ">" oder "<".

Die internen Funktionen (bis jetzt) sind:

  • AverageLuma(clip)
  • AverageChromaU(clip)
  • AverageChromaV(clip)
Dies gibt den durchschnittlichen Wert des Pixels einer Ebene (Kanal) zurück. (Erfordert YV12 und IntegerSSE).
  • RGBDifference(clip1, clip2)
  • LumaDifference(clip1, clip2)
  • ChromaUDifference(clip1, clip2)
  • ChromaUDifference(clip1, clip2)
Diese Funktionen geben als Dezimalzahl zwischen 0 und 255 die absolute Differenz zwei Ebenen (Kanälen) zurück. (Erfordert YV12 und IntegerSSE).

Diese Funktionen beziehen sich immer auf "last". Da man diesen Parameter nicht spezifizieren braucht, wurde er durch den Testclip ersetzt.

Andere interne Funktionen sind:

  • RGBDifferenceFromPrevious(clip)
  • YDifferenceFromPrevious(clip)
  • UDifferenceFromPrevious(clip)
  • VDifferenceFromPrevious(clip)
  • RGBDifferenceToNext(clip)
  • YDifferenceToNext(clip)
  • UDifferenceToNext(clip)
  • VDifferenceToNext(clip)

Diese Funktionen sollte recht nett sein, wenn man Szenenwechsel erkennen will:

Beispiel:

Es wird der letzte Frame vor einem Szenenwechsel durch den ersten Frame nach dem Szenenwechsel ersetzt:

ConditionalFilter(last, last, last.trim(1,0), "YDifferenceToNext?()", ">", "10", true)

Weitere interne Funktionen:

  • YPlaneMax(clip, float threshold)
  • UPlaneMax(clip, float threshold)
  • VPlaneMax(clip, float threshold)
  • YPlaneMin(clip, float threshold)
  • UPlaneMin(clip, float threshold)
  • VPlaneMin(clip, float threshold)
  • YPlaneMedian(clip)
  • UPlaneMedian(clip)
  • VPlaneMedian(clip)
  • YPlaneMinMaxDifference(clip, float threshold)
  • UPlaneMinMaxDifference(clip, float threshold)
  • VPlaneMinMaxDifference(clip, float threshold)

Threshold ist das Verhältnis, wieviel Prozent an Pixeln sind über oder unter dem Minimum erlaubt sind. Der Schwellenwert ist optional und standardmäßig 0.


ScriptClip

ScriptClip(clip "clip", string "function", bool "show")

ScriptClip gibt den Clip zurück, der von der Funktion für jeden Frame ausgewählt wurde.

Beispiele:

Dies zeigt den Unterschied zwischen gegenüber den vorherigen Frame im aktuellen Frame an:

clip = AviSource("C:\Dateiname.avi")

ScriptClip(clip, "Subtitle(String(YDifferenceFromPrevious?))")

Hier wird Blur auf jeden Frame angewendet entsprechend dem Unterschied zum vorherigen Frame. Außerdem zeigt es, wie Fehler angezeigt werden bei manchen Frames :)

clip = AviSource("C:\Dateiname.avi")

ScriptClip(clip, "Blur(YDifferenceFromPrevious?/20.0)")

Dies wendet TemporalSoften in sehr ruhigen Szenen und Blur mit variablen Parametern in bewegten Szenen an. Wir weisen auch eine Variable zu, weshalb es einen Zeilensprung gibt:

function fmin(float "f1", float "f2") {

return (f1<f2) ? f1 : f2

}

clip = AviSource("C:\Dateiname.avi")

ScriptClip(clip, "diff = YDifferenceToNext?()"+chr(13)+"diff > 2.5 ? Blur(fmin(diff/20,1.5)) : TemporalSoften(2,7,7,3,2)")

Beschränkungen: Das Ergebnis des Skriptes MUSS exakt die gleichen Eigenschaften (Farbraum, Breite und Höhe) haben wie der Clip, den ScriptClip bekommen hat. Das Ergebnis kann eine andere Länge haben, aber mindestens die des Quellclips. Der Ton eines Clips wird unverändert durchgeschleift. Bei zwei unterschiedlichen Quellen (z.B. Mpeg2Dec3 und AviSource) kann es zu Problemen mit dem Farbräumen kommen - ein beliebter Fehler.


FrameEvaluate

FrameEvaluate(clip "clip", script "function" [,bool after_frame])

Ähnlich wie ScriptClip, außer dass das Ergebnis des Filters ignoriert wird. Kann dazu genutzt werden, um Variablen usw. zuzuweisen. Die Frames werden direkt durchgeschleift.

Seit AviSynth v2.53 gibt es die after_frame Option. Diese gibt an, ob das Skript, bevor (Standard) oder nachdem der Frame von den obigen Filtern geholt wurde, ausgewertet werden soll.

SourceForge Logo

 


Edit this document | View document history
Document last modified Thu, 14 Aug 2003 01:46:27