Avisynth Script Nachhilfe benötigt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Avisynth Script Nachhilfe benötigt

    Anzeige
    Hallo zusammen,

    ich versuche gerade vom Frameserver, bzw Sony Vegas wegzukommen.
    Das einzige, was ich noch an den Videos ändere ist das Ein-/Ausfaden und eine Bauchbinde nach ca. 10 Sekunden.

    Bislang habe ich nach dem Frameserver den SSM genutzt und das hat auch super funktioniert.
    Wie genau kann ich das nun ohne Vegas umsetzen?

    Ich habe hier im Forum bereits folgenden Thread gelesen, in dem @Sagaras ein Script gepostet hatte:
    AviSynth Skript erstellen

    Dieses habe ich versucht an meine Bedürfnisse anzupassen (s. Spoiler).
    Leider bekomme ich nun eine Fehlermeldung:
    The scripts return was not a videoclip.​


    Hier mal mein zusammengefrickeltes Script:
    Spoiler anzeigen

    Quellcode

    1. ​####################################
    2. #
    3. # Dieses Skript funktioniert nur mit AVI Aufnahmen
    4. #
    5. ####################################
    6. # Dein Videofile
    7. vfile = "C:\Users\Huntzman\Desktop\WorldOfTanks Magic444_Test.avi"
    8. # Automatische FPS Erkennung (Diese Werte sind für die tatsächliche FPS des Videos da. !!! NICHT FÜR ÄNDERUNGEN !!!)
    9. # (Mögliche Werte: "Auto" für Automatische Bestimmung oder "Igno." für eine direkte Erkennung oder irgendwas anderes für eine manuelle Entscheidung (Siehe FPSnum und FPSden))
    10. # FPS = FPSnum / FPSden (Muss nicht angegeben werden, wenn FPSauto auf "Auto" steht)
    11. auto = "Auto"
    12. FPSnum = 30
    13. FPSden = 1
    14. # Lade Video
    15. video = AVISource(vfile, false).AutoFPS(auto, FPSnum, FPSden)
    16. video = video.Spline16Resize(1920, 1080)
    17. faktor = 0.2
    18. # Nach 10 Minuten eine Bauchbind bei einer FPS von x.
    19. # FPS gibt das Video vor, 10 Minuten = 600sek sind gegeben
    20. # Gesucht ist die dazugehörige Frameanzahl
    21. # Frame = 600 * FPS = 10Minuten Framemenge
    22. pos10m = 600 * (video.frameratenumerator / video.frameratedenominator)
    23. # 1 sek (Ein und Ausfaden)
    24. poshalf1s = (1 * (video.frameratenumerator / video.frameratedenominator))
    25. # 8 Sek (Anzeige)
    26. pos4s = 8 * (video.frameratenumerator / video.frameratedenominator)
    27. # Bauchbinden haben alle hier einen Abstand von 100px vom unteren Rand und alle haben eine Deckkraft von 100% (1.0)
    28. # Alle Bauchbinden haben ein Alphakanal
    29. # Bauchbinde am Anfang
    30. Bauch = ImageSource("C:\Users\Huntzman\Desktop\testbinde900p.png", pixel_type="RGB32")
    31. faktor = 1.4
    32. Bauch = Bauch.PointResize(int(Bauch.width * faktor), int(Bauch.height * faktor))
    33. video = video.Blende(Bauch, Bauch.ShowAlpha("RGB32"), 0, pos4s + 2 * poshalf1s, poshalf1s, poshalf1s, 0, video.height - Bauch.height - 100, 1.0)
    34. Function AutoFPS (Clip clip0, string afps, int fpsn, int fpsd) {
    35. rate1 = (afps == "Auto") ? (Round(Float(clip0.framerate * 1000)) / 1000) / 2 : nop()
    36. rate2 = (afps == "Auto") ? Round(clip0.framerate) / 2 : nop()
    37. rate = (afps == "Auto") ? (rate1 == rate2) ? 1 : 1001 : (afps == "Igno.") ? clip0.frameratedenominator : fpsd
    38. ratefaktor = (afps == "Auto") ? (rate == 1001) ? 1000 : 1 : nop()
    39. clip0 = (afps == "Auto") ? (rate == 1001) ? clip0.AssumeFPS(Round(clip0.Framerate) * 1000, rate) : clip0.AssumeFPS(round(clip0.framerate), rate) : (afps == "Igno.") ? clip0.AssumeFPS(clip0.frameratenumerator, rate) : clip0.AssumeFPS(fpsn, rate)
    40. Return clip0
    41. }
    42. Function Blende (clip clip0, clip clip1, clip "mask", int "sframe", int "eframe", int "fadeinframe", int "fadeoutframe", int "x", int "y", float "opa") {
    43. mask = (IsClip(mask) == true) ? mask : BlankClip(0, clip1.width, clip1.height, "RGB24", clip1.frameratenumerator, clip1.frameratedenominator, color = $FFFFFF).KillAudio()
    44. sframe = Default(sframe, 0)
    45. eframe = Default(eframe, 40)
    46. fadeinframe = Default(fadeinframe, 10)
    47. fadeoutframe = Default(fadeoutframe, 10)
    48. x = Default(x, 0)
    49. y = Default(y, 0)
    50. opa = Default(opa, 1.0)
    51. clip0 = ApplyRange(clip0, sframe, eframe-fadeoutframe-1, "Animate", sframe, sframe+fadeinframe, "Overlay", clip1, x, y, mask, 0.0, clip1, x, y, mask, opa)
    52. return ApplyRange(clip0, eframe-fadeoutframe, eframe, "Animate", eframe-fadeoutframe, eframe, "Overlay", clip1, x, y, mask, opa, clip1, x, y, mask, 0.0)
    53. }
    Alles anzeigen


    Mein Rohmaterial hat das Format 1.600 x 900 px.
    Die Bauchbinde liegt als transparentes PNG in 1600 x 900 px (bereits positioniert) und in zugeschnittenem Format vor.

    Könnt ihr mir Tipps dazu geben?

    Grüße,
    Terminus

    Terminus | World of Tanks & mehr
  • Spoiler anzeigen

    Quellcode

    1. ####################################
    2. #
    3. # Dieses Skript funktioniert nur mit AVI Aufnahmen
    4. #
    5. ####################################
    6. # Dein Videofile
    7. vfile = "C:\Users\Huntzman\Desktop\WorldOfTanks Magic444_Test.avi"
    8. # Automatische FPS Erkennung (Diese Werte sind für die tatsächliche FPS des Videos da. !!! NICHT FÜR ÄNDERUNGEN !!!)
    9. # (Mögliche Werte: "Auto" für Automatische Bestimmung oder "Igno." für eine direkte Erkennung oder irgendwas anderes für eine manuelle Entscheidung (Siehe FPSnum und FPSden))
    10. # FPS = FPSnum / FPSden (Muss nicht angegeben werden, wenn FPSauto auf "Auto" steht)
    11. auto = "Auto"
    12. FPSnum = 30
    13. FPSden = 1
    14. # Lade Video
    15. video = AVISource(vfile, false).AutoFPS(auto, FPSnum, FPSden)
    16. video = video.Spline16Resize(1920, 1080)
    17. faktor = 0.2
    18. # Nach 10 Minuten eine Bauchbind bei einer FPS von x.
    19. # FPS gibt das Video vor, 10 Minuten = 600sek sind gegeben
    20. # Gesucht ist die dazugehörige Frameanzahl
    21. # Frame = 600 * FPS = 10Minuten Framemenge
    22. pos10m = 600 * (video.frameratenumerator / video.frameratedenominator)
    23. # 1 sek (Ein und Ausfaden)
    24. poshalf1s = (1 * (video.frameratenumerator / video.frameratedenominator))
    25. # 8 Sek (Anzeige)
    26. pos4s = 8 * (video.frameratenumerator / video.frameratedenominator)
    27. # Bauchbinden haben alle hier einen Abstand von 100px vom unteren Rand und alle haben eine Deckkraft von 100% (1.0)
    28. # Alle Bauchbinden haben ein Alphakanal
    29. # Bauchbinde am Anfang
    30. Bauch = ImageSource("C:\Users\Huntzman\Desktop\testbinde900p.png", pixel_type="RGB32")
    31. faktor = 1.4
    32. Bauch = Bauch.PointResize(int(Bauch.width * faktor), int(Bauch.height * faktor))
    33. video.Blende(Bauch, Bauch.ShowAlpha("RGB32"), 0, pos4s + 2 * poshalf1s, poshalf1s, poshalf1s, 0, video.height - Bauch.height - 100, 1.0)
    34. Function AutoFPS (Clip clip0, string afps, int fpsn, int fpsd) {
    35. rate1 = (afps == "Auto") ? (Round(Float(clip0.framerate * 1000)) / 1000) / 2 : nop()
    36. rate2 = (afps == "Auto") ? Round(clip0.framerate) / 2 : nop()
    37. rate = (afps == "Auto") ? (rate1 == rate2) ? 1 : 1001 : (afps == "Igno.") ? clip0.frameratedenominator : fpsd
    38. ratefaktor = (afps == "Auto") ? (rate == 1001) ? 1000 : 1 : nop()
    39. clip0 = (afps == "Auto") ? (rate == 1001) ? clip0.AssumeFPS(Round(clip0.Framerate) * 1000, rate) : clip0.AssumeFPS(round(clip0.framerate), rate) : (afps == "Igno.") ? clip0.AssumeFPS(clip0.frameratenumerator, rate) : clip0.AssumeFPS(fpsn, rate)
    40. Return clip0
    41. }
    42. Function Blende (clip clip0, clip clip1, clip "mask", int "sframe", int "eframe", int "fadeinframe", int "fadeoutframe", int "x", int "y", float "opa") {
    43. mask = (IsClip(mask) == true) ? mask : BlankClip(0, clip1.width, clip1.height, "RGB24", clip1.frameratenumerator, clip1.frameratedenominator, color = $FFFFFF).KillAudio()
    44. sframe = Default(sframe, 0)
    45. eframe = Default(eframe, 40)
    46. fadeinframe = Default(fadeinframe, 10)
    47. fadeoutframe = Default(fadeoutframe, 10)
    48. x = Default(x, 0)
    49. y = Default(y, 0)
    50. opa = Default(opa, 1.0)
    51. clip0 = ApplyRange(clip0, sframe, eframe-fadeoutframe-1, "Animate", sframe, sframe+fadeinframe, "Overlay", clip1, x, y, mask, 0.0, clip1, x, y, mask, opa)
    52. return ApplyRange(clip0, eframe-fadeoutframe, eframe, "Animate", eframe-fadeoutframe, eframe, "Overlay", clip1, x, y, mask, opa, clip1, x, y, mask, 0.0)
    53. }
    Alles anzeigen


    Sollte besser laufen. Zeile 39 war der Fehler.

    video = video.xxxxxx -> Kann kein Video zurückgeben
    video.xxxxxxx -> Gibt Video zurück
  • Wow, das ging schnell und funktioniert auch noch.
    Ich danke dir!

    Ein kleines Problem habe ich nun doch noch.
    Ich habe die Bauchbinde ja im Format des Rohmaterials angelegt (1.600 x 900 px).
    Das Video wird auf 1.920 x 1.080 px hochskaliert.
    Jetzt sieht meine Bauchbinde ziemlich pixelig aus (s. unten).
    Wie kann ich das verhindern?
    Bauchbinde auf Endformat anlegen?



    Grüße,
    Terminus

    Terminus | World of Tanks & mehr
  • Anzeige
    So, ich habe die Bauchbinde jetzt einmal in 1.920 x 1.080 px angelegt.
    Geändert hat sich - bis auf die Größe - leider nichts.
    Es ist immer noch pixelig.
    Gibts noch eine bessere Lösung?
    In Sony Vegas hatte ich die immer im Format des Rohmaterials und er hat mir die dann sauber hochskaliert.
    Das muss doch auch irgendwie mit einem Script gehen oder?
    Kann ich den Abstand der Bauchbinde irgendwie so einstellen, dass das Bildformat genau deckungsgleich über dem Video liegt?
    Also den Abstand auf Null?
    Ich habe das Gefühl, das er mir das Bild etwas nach rechts oben verschiebt.

    Edit:
    Das mit dem Abstand hat sich glaube ich erledigt.
    Habe die 100 auf 0 gesetzt.
    Mit dem Spline16Resize sieht es schon deutlich besser aus, aber noch nicht perfekt.

    Kann ich das eigentlich später auch etwas automatisieren?
    Z.b. in den SSM einbinden o.ä.?
    Oder muss ich jedesmal das Skript anpassen wenn ich ein neues Video habe?


    Grüße,
    Terminus

    Terminus | World of Tanks & mehr

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Terminus ()

  • Terminus schrieb:

    So, ich habe die Bauchbinde jetzt einmal in 1.920 x 1.080 px angelegt.
    Geändert hat sich - bis auf die Größe - leider nichts.
    Es ist immer noch pixelig.
    Gibts noch eine bessere Lösung?


    Hab ich dir erklärt. Entweder einen anderen Skalierer für das Bild an sich verwenden wie Spline16Resize, statt den harten PointResize oder mit Gimp und Co. das Bild entsprechend in richtiger Auflösung skalieren. Such dir was aus.

    Terminus schrieb:

    Kann ich den Abstand der Bauchbinde irgendwie so einstellen, dass das Bildformat genau deckungsgleich über dem Video liegt?
    Also den Abstand auf Null?

    Du meinst den Höhen Abstand von unten?

    Das machste in der Zeile 39 in dem Skript was ich dir zugeschickt habe unter deinem Startpost.

    Da steht als Argument die Höhenangabe mit video.height - Bauch.height - 100
    Die -100 ist der Abstand von unten. Steht da keine Zahl, liegt die Bauchbinde ganz unten in der Linken Ecke ohne Abstand.

    oben links = 0, 0
    oben rechts = video.width- Bauch.width, 0
    unten links = 0, video.height - Bauch.height
    unten rechts = video.width - Bauch.width, video.height - Bauch.height

    Immer dran denken oben links ist immer Position 0, 0
    unten rechts ist immer der maximal Wert der Auflösung. Also 1920x1080 z.B.

    Um es aber dynamisch zu machen kommen halt die Clipeigenschaften der Breite und Höhe rein, damit das Skript automatisch die Werte damit füllt.

    Den Abstand zur Rechten Seite bestimmst du über die Größe des Bildes (Zoomfaktor Zeile 37)
  • Sagaras schrieb:

    Hab ich dir erklärt. Entweder einen anderen Skalierer für das Bild an sich verwenden wie Spline16Resize, statt den harten PointResize oder mit Gimp und Co. das Bild entsprechend in richtiger Auflösung skalieren. Such dir was aus.

    Das habe ich doch getan.
    Beim ersten Versuch war das Bildformat = Rohmaterial Video -> Pixelig
    Beim zweiten Versuch war das Bildformat = Endformat Video -> auch Pixelig
    Beim dritten Versuch habe ich den Spline16Resize genommen - das geht von der Qualität her auch soweit in Ordnung.
    Ich konnte zumindest keine besonders störenden Effekte erkennen.

    An die Abstände setze ich mich gleich nochmal ran.

    Magst du nochmal was zum Thema Automation sagen?
    Kann ich das irgendwie in deinen SSM einbauen?
    Das wäre super, da ich ihn dann weiterhin nutzen kann.

    Übrigens danke dass du hier so geduldig meine Fragen beantwortest!

    Grüße,
    Terminus

    Terminus | World of Tanks & mehr
  • Terminus schrieb:

    Das habe ich doch getan.
    Beim ersten Versuch war das Bildformat = Rohmaterial Video -> Pixelig
    Beim zweiten Versuch war das Bildformat = Endformat Video -> auch Pixelig

    Ich meinte eigentlich das wenn du es mit Gimp machst und du weiß die Endauflösung deines Videos, dann machste doch gewiss nicht die Bauchbinde genauso groß wie die Endauflösung des Videos. Das ist ja Quatsch dann.

    Bei 1920x1080 reicht es wenn die Bauchbinde in etwa 1700x250 hat. Das wäre dann eine recht schmale Bauchbinde und müsste mit dem Zoomfaktor von 1.0 (Also kein Zoom) auf das Endvideo aufgepappt werden. Dann erspart man sich das mit dem Zoomen nämlich.

    Terminus schrieb:

    Magst du nochmal was zum Thema Automation sagen?
    Kann ich das irgendwie in deinen SSM einbauen?

    Du kannst das fertige Skript das du da hast auch in den SSM werfen. Frage ist dann nur ob du das auch willst.

    Ich könnte dir erklären was du einzustellen hättest im SSM. Aber dazu müsst ich auch noch mal komplett ausholen. Weil dazu musst du in deinem jetzigen Skript was du hier bearbeitest enorm viel berücksichtigen. Sonst machst du multiplen Resize und das ist nicht gerade berauschend für die Encode Geschwindigkeit.

    Unicat Skripte wie dein jetzigen hier brauchen in der Regel kein SSM. Wenn dann baut man sich die entsprechenden Sachen die man noch möchte selbst mit ein. Das wäre dann auch viel performanter vom Ablauf her.
  • Ok, dann schaue ich mal ob ich überhaupt noch etwas vermisse.
    Das einzige was mir so einfällt wäre das Ein- und Ausfaden des Videos (3 s).
    Ich habe das jetzt mit FadeIn und FadeOut versucht, was leider nicht funktioniert.

    Ansonsten bin ich jetzt schon sehr zufrieden, die Videoqualität ist im Vergleich zum Umweg über den Vegas-Frameserver deutlich besser.
    Und der Aufwand ist viel geringer.

    Gibt es eine empfehlenswerte Webseite, auf der es Tutorials oder übersichtliche Erklärungen zu AviSynth gibt?

    Grüße,
    Terminus

    Terminus | World of Tanks & mehr
  • Terminus schrieb:

    Gibt es eine empfehlenswerte Webseite, auf der es Tutorials oder übersichtliche Erklärungen zu AviSynth gibt?


    avisynth.nl/index.php/Internal_filters
    avisynth.nl/index.php/External_filters
    avisynth.nl/index.php/AviSynth_Syntax

    Bei sehr großen Problemen kann man mit den Entwicklern auch direkt in Kontakt treten über das Doom9 oder Gleitz Forum

    forum.doom9.org/forumdisplay.php?s=&forumid=33
    forum.gleitz.info/forumdisplay.php?51-AviSynth

    Terminus schrieb:

    Das einzige was mir so einfällt wäre das Ein- und Ausfaden des Videos (3 s).

    Zeile 39 wieder neue Zeile (Enter).
    Zeile 40 dann schreibste folgende Zeilen hinzu:

    Quellcode

    1. pos3s = 3 * (video.frameratenumerator / video.frameratedenominator)
    2. FadeIn0(pos3s).FadeOut0(pos3s)


    pos3s ist dann die Framemenge für 3 Sekunden.

    FPS = Zähler / Nenner <- Macht er hier laut dem Skript automatisch
    Framemenge = Zeit in Sek * FPS <- Im Skript steht dann bei der Zeit dann die Zeit die du angibst. FPS ist vorgegeben.
  • Das hat ebenfalls geklappt.

    Nochmals vielen Dank für deine Hilfe und die Links!
    Du hast mich von Vegas befreit. :)

    Grüße,
    Terminus

    edit:
    @Sagaras:
    Eine Frage hätte ich doch noch:
    Und zwar versuche ich jetzt die ganze Zeit den Start der Einblendung von "direkt" auf 6 s nach Start des Videos zu verschieben.
    Ich verhedder mich da total.
    Versucht habe ich es mit

    Quellcode

    1. pos10m = 0.1 * (video.frameratenumerator / video.frameratedenominator)


    pos10m habe ich als Variable verstanden (?) und dann in mein Script in Zeile 39 verwendet.
    Anscheinend muss ich noch viel lesen, denn nichts funktioniert. :)
    Ich habe dann versucht das Script aus dem von mir verlinkten Post umzuschreiben (da war ein banner nach 10 Minuten, daher das pos10m) - auch ohne Erfolg.

    Grüße,
    Terminus

    Terminus | World of Tanks & mehr

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Terminus ()

  • Also...

    Dieses Gebilde hier:
    pos10m = 600 * (video.frameratenumerator / video.frameratedenominator)

    ist nix weiter als die Berechnung der Framemenge zur 10 Minute.

    Stell dir vor du hast ein Video mit 29.97 FPS. Also ein ganz blöden Wert.

    Dann berechnet das Teil da oben für die 10te Minute halt die entsprechende Frameposition aus.

    Zeit in Sek = 10min * 60 = 600sek
    FPS = 30000 / 1001 = 29.970..... (Ist ne periodische Zahl ^^)
    Frameposition = Zeit in Sek * FPS = 17982,0179..... (Auch seeehr lang ^^)

    Eine Frameposition darf aber nie eine Kommastelle haben. Das heißt es wird gerundet und zwars immer zum niedriegsten hin.
    Das heißt für die 10te Minute bei 29.970 FPS ist der entsprechende Frame 17982

    Mit Ganzzahligen FPS lässt sich besser rechnen.
    Bei 30 FPS wäre die 10te Minute bei Frame 18000

    30 Frames Per Second halt ^^

    Die Blende unten funktioniert nach einem Zeitzusammenbau.
    Das heißt... im alten Thread wollte der TE die Ein- und Ausblendlänge bestimmen können und die gesamte Anzeige selbst sollte um x Sek angezeigt werden.

    Das heißt Einblendframelänge + Anzeigeframelänge + Ausblendframelänge

    Da Eingangs- und Ausgangsframelänge identische Längen in seinem Skript haben steht da auch bei der Blende in Zeile 39 auch 2 * poshalf1s

    In Zeile 39 haste ja dieses Gebilde:

    Quellcode

    1. video.Blende(Bauch, Bauch.ShowAlpha("RGB32"), 0, pos4s + 2 * poshalf1s, poshalf1s, poshalf1s, 0, video.height - Bauch.height - 100, 1.0)


    Die Blende ergibt sich aus folgenden Parametern wie du sie im oberen Quellcodefenster siehst der Reihe nach:
    Da wo Bauch steht kommt das Bild rein was du anzeigen lassen willst, danach kommt die Alphamaske des Bildes, danach der Startframe wo das Ganze losgehen soll im Gesamtvideo, gefolgt vom Endframe der sich aus Startframe + Ein- und Ausblendlänge + Anzeigelänge besteht. Danach kommt noch mal die Blendlänge für Ein- und danach für die Ausblende.
    Danach erfolgt die Positionierung auf dem zweiten Clip in x und y Positionsangabe. Und ganz zum Schluss siehst du die maximale Sichtbarkei. Opacity halt. Die geht von 0.0 (Unsichtbar) bis 1.0 (Absolut Sichtbar)
    Ist die Sichtbarkeit auf 0.5 gestellt wird das gesamte Bild nur bis diesen Level Sichtbar sein. Das ist sozusagen der maximal Wert den er erreichen soll wenn er angezeigt werden soll.


    Als Beispiel für dein Problem:
    Du willst dein Video nach 6 Sek einfaden lassen
    Die Blenden sagen wir mal sollen 2 Sek dauern (Wir haben eine Ein- und Ausblende. Also 2x das Ganze)
    Und die Anzeige selbst ohne das ein und Ausblenden soll 20 Sek dauern
    Die gesamte Blende wird also genau 24Sek dauern

    Quellcode

    1. ....
    2. #Frameposition oder Framemenge für 6 Sek bei einer FPS von x
    3. pos6sek = 6 * (video.frameratenumerator / video.frameratedenominator)
    4. #Frameposition oder Framemenge für 2 Sek bei einer FPS von x
    5. blend2sek = 2 * (video.frameratenumerator / video.frameratedenominator)
    6. #Frameposition oder Framemenge für 20 Sek bei einer FPS von x
    7. anzeig20sek = 20 * (video.frameratenumerator / video.frameratedenominator)
    8. #Funktionsaufruf
    9. video.Blende(Bauch, Bauch.ShowAlpha("RGB32"), pos6sek, pos6sek + anzeig20sek + 2 * blend2sek, blend2sek, blend2sek, 0, video.height - Bauch.height, 1.0)
    10. ...
    Alles anzeigen


    Jetzt startet die Blende exakt bei der 6sek und Faded jeweils 2sek ein und aus. Angezeigt wird sie ohne die Blenden gerechnet genau 20sek lang. Mit Blenden mitgerechnet geht die gesamte Blende halt 24sek.

    Sie ist auch in der linken unteren Ecke zu sehen dann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sagaras ()

  • Terminus schrieb:

    Super!
    Dann lag ich ja nicht komplett falsch mit meiner Annahme das es Variablen sind, deren Werte vorher deklariert werden.
    Ich habe es mir jetzt entsprechend umgeschrieben und der erste Test lief gerade perfekt.
    Vielen Dank!
    Ich denke, dann kann ich hier mal schließen, da die Frage geklärt zu sein scheint.
    Falls noch Rückfragen auftauchen, oder ich anderwertig zu früh geschlossen haben sollte, so genügt eine kleine PN des Threaderstellers an mich.

    Bitte beim nächsten Mal als 'erledigt' markieren mit Doppelklick auf das rote Kästchen:



    #CLOSED