einfacher bool Test funktioniert nicht

  • Hi zusammen,

    Das Argument meiner Funktion PicShowPrepare "bgBlur" ist von Typ: bool.
    Nur funktioniert ein simpler Test nicht:

    Code
    ...
    # if bgBlur true
    item = (bgBlur == true) ? {
    		bb_left = pic.Crop(0,0,100,0)
    		bb_right = pic.Crop((pic_x + 100),0,0,0)
    		StackVertical(bb_left,pic,bb_right)
    	} : {
    		Overlay(bg_img,pic,padding,0,mode="Blend",opacity=1)
    	}
    ...

    Avisynth meldet einen Syntax error nach "(bgBlur == true)"
    Jemand 'ne Idee ?

  • Ich frage mich eher, ob AviSynth denn Blöcke mit geschweiften Klammern unterstützt. AviSynth ist nicht C. Der Ternär-Operator (? :) unterstützt je nach Zweig nur einen Term, dessen Ergebnis der linken Seite zugewiesen werden kann, aber kein komplettes Unterprogramm mit eigenen Zuweisungen (maximal noch punktverkettete Funktionen).

    Für ein ausführliches if-then-else in AviSynth braucht man Plugins, die diese Funktionalität simulieren.

  • Nein. Da hast du das wichtigste überlesen. Rund um "Example 2" steht da bei "Block statements" in etwa: Es wäre schön, wenn so etwas auch funktionieren würde...

    Zitat

    It would be nice to be able to construct two blocks of filter operations and branch in a single step, as in the (ideal) Example 2 below:

    Stattdessen muss man bei so komplexen Zweigen – wie dann im Rest des Dokumentes erklärt – entweder jeden komplexen Zweig in eine Eval()-Funktion verpacken (und dafür dreifache Anführungszeichen verwenden, wenn darin auch Zeichenketten auftauchen sollen), oder man verwendet ConditionalFilter(), oder man verwendet das Plugin "GScript" (das in AviSynth+ bereits eingebaut ist).

  • :wall: ... ja, hast recht ...

    Na gut, ich hab jetzt einfach zwei weitere Funktionen definiert die dich dann wechselseitig aufrufe ...

    Code
    item = (bgBlur == true) ? bgInBlur(ov_pic,padding,s_pic_y,r_pic_x,padBlur) : OverlayOut(bg_img,ov_pic,padding)

    Was anderes, sind die Variablen (ala bash) alle "global" ? D.h. wenn die innerhalb des Scriptes definiert sind muß ich sie nicht nochmal der Funktion übergeben ... oder muß ich explizit alle Variablen der Funktion mitgeben ?

  • Aha ... wie deklariert man die denn als Global ? (Außerhalb der Funktion ... wie bei C/Java ? )

    ... und gibt's ein "stärkeres" blur als das interne ... Mußte 6 Stück hintereinander hängen um ansatzweise den Effekt zu bekommen den ich gerne hätte. Und Ein GaussResize mit "p=1" geht dem schon voran !

  • New to AviSynth? Start here

    Script variables mit Beispielen für global deklarierte Variablen; auch der Artikel zu Import enthält einen kurzen Hinweis, dass importierbare Skripte sich eignen, dort globale Variablen zu deklarieren (mit der Endung *.avsi werden sie auch automatisch geladen, wenn sie im Autoload-Verzeichnis liegen; dann sollte man aber ziemlich eindeutige Namen bevorzugen).
    __

    Die Wirkung von Blur() ist beschränkt, eine Kaskade ist ein übliches Vorgehen. Eine andere Methode wäre starkes Verkleinern (Bilinear oder andere Kernel mit wenig Taps, die nicht überschwingen) und anschließendes Vergrößern (Gauss, Spline16 oder weiches Bicubic) auf ursprüngliche Größe.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!