überblenden mit AviSynth

  • Hi, ich bastle gerade an einem .avs-script, mit dem man zwei clips überblenden kann, z.B. dass ein bild als kleines dreieck eingeblendet wird und immer größer wird, bis es das erste bild überdeckt (Beispiel im Anhang). das größer werdende dreieck habe ich mit smartmorph erstellt, ich wußte so schnell keine andere möglichkeit, sowas selber zu machen.
    hier das script bisher:

    Code
    c1 = aviSource("k:\fertig\divx\one more time.avi").converttoRGB().trim(800,900)
    c2 = aviSource("k:\fertig\divx\RockDJ.avi").converttoRGB().trim(300,400)
    schwarz = aviSource("...schwarzes_dreieck.avi").converttoRGB()
    weiss = aviSource("...weisses_dreieck.avi").converttoRGB()
    maskclip1=mask(c1,schwarz)
    maskclip2=mask(c2,weiss)
    clip1 = layer(c1,maskclip1,"subtract",128,0,0,0,true)
    clip2 = layer(c2,maskclip2,"subtract",128,0,0,0,true)
    c = layer(clip1,clip2,"add",128,0,0,0,true)
    return c


    leider habe ich das problem, daß einer der beiden clips immer so einen Grauschleier hat (das kommt von den ersten beiden layer-aufrufen).
    habe schon etwas an den parametern geschraubt, aber ich konnte das problem noch nicht lösen. hat jemand interesse an dieser funktion und vielleicht ne zündende idee?

    Zap
    http://home.fhtw-berlin.de/~s0357477/diverse/blende_test.avi

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Zitat von LigH

    Katjarella hatte doch mal gezeigt, wie das mit den Masken machbar ist, wie man mit AviSynth ein DVD-Menü basteln kann...

    das war ja auch der stein des antoßes. habe dort nochmal nachgesehen. jetzt klappt es:


    sehr cool. mit den richtigen AVI´s läßt sich dann jede beliebige kräusel-, rauswirbel-, umblätter- oder sonstwas blende machen. nieder mit pinnacle studio :)

    Zap

    PS: wie wärs mit nem überblendmaskenclip-sammel-thread?

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Zitat von katjarella


    FEIN ZapBee, Du hast es selber geschaft

    Yup, und ich freu mich ziemlich. Das heißt, ich krieg jetzt Blenden hin, wo ein Schriftzug mit dem Endeclip sich in den Startclip vergrößert, z.B. mit nem Namen oder "happy birthday", macht sich bei Geschenken ganz gut... oder, oder, oder... ach diese unzähligen möglichkeiten.
    Yippieeeeeeeyeaaaaahhh!!!!! :D

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • so, 5h später meine erste blende mit eigenem Schriftzug.
    Was habe ich benutzt:
    1. swish 1.52 zum erstellen der Schrift-Zoom-Flash-Animation (schwarzer "Michael Jordan-Schriftzug, vergrößert auf 50000% oder so)
    2. SWF2Video zum übertragen von Flash in AVI
    3. das AVI (einmal normal, einmal invertiert)
    4. das obige Skript, natürlich mit angepassten Dateinamen und cliplängen.

    und so siehts aus:
    http://home.fhtw-berlin.de/~s0357477/dive…_test_klein.avi

    geht natürlich auch in fullPAL :D
    ich liebe es

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Zitat von scharfis_brain


    wenn Du Dir ein uebergangs-AVI (das invertierte) sparen moechtest


    Yo, sowas habe ich gesucht. Invert() gibts ja leider nicht.

    die vorletzte Zeile kann übrigens entfallen, wenn die zeile darüber

    Code
    c = layer(maskclip1,maskclip2,"add",255,0,0,0,true)


    lautet.

    Gruß
    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Zitat

    o, sowas habe ich gesucht. Invert() gibts ja leider nicht.

    Ich hab heute auch danach gesucht (bastle grad an einem resizer, der fuer LCDs optimiert ist, und dafuer brauchte ich das) und hab deswegen eine anfrage im engl. Doom9 - forum gestellt und promt eine antwort bekommen, und das wollte ich Dir ja nicht vorenthalten *g*.

  • dieses prinzip läßt sich auch in manchen fällen dazu einsetzen, kurze einblendungen von tv-sendern zu entfernen.
    beispiel: MTV Top100 Videos
    da muß natürlich immer bei den besten Videos der Hinweis auf die 8. Wiederholung der EMA´s 2003 eingeblendet werden, in weiss. Gaaaanz toll.
    Habe ich mir eine Schwarz-Weiss-Maske von dem Bild gemacht, weiss das Videobild, Einblendung schwarz, und mir eine Stelle in dem Video gesucht, die ohne einblendung ist und etwa das gleiche zeigt. Dies dann als zweiten Clip geladen und mit dem Skript an die schwarze Stelle gelegt. Wenn sich da, wo die Einblendung ist, nicht allzu viel bewegt, fällt das kaum bis garnicht auf. wenn man die ränder der s/w-maske noch weichzeichnet (mit dem Grafikprogramm), hat man einen noch besseren Übergang.
    auf jeden fall besser als eine riesenfläche mit regionRemove weichzuzeichnen.

    ist keine Universallösung, bietet aber für einige Fälle schönere Ergebnisse.

    Zap

    PS: Dank nochmal an Katjarella für die Anregung http://members.lycos.co.uk/verglade8kihr/motionmenu.htm)

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Hi,

    ich hab das ganze mal weiter gesponnen, mit folgendem Ziel:
    Ausgansmaterial:
    1 Startvideo oder Bild
    1 Endvideo oder Bild
    1 Maskenvideo
    ^^ alle drei haben die gleiche Auflösung.

    Das ganze wird einer Funktion übergeben.........heraus kommt ein grosses Video, was am Startvideoende mit Hilfe der Maske überblendet zum Endvideo.

    Beispielaufruf:

    Code
    import("G:\[DVD2]\maskfunctionV3.avs")a=aviSource("G:\[DVD2]\dire1.avi")b=ImageReader("G:\[DVD2]\ablast02.bmp", 1, 200, 25, false).converttoRGB32()avmask(a, b, aviSource("G:\[DVD2]\mask2.avi"))


    b ist zwar ein Bild, aber der Imagereader gibt es als Videoclip mit 200 Frames zurück.

    Und so sieht die Funktion aus:

    Da ich primär im YV12 Farbraum arbeite, hab ich die RGB Clips entsprechend wieder zurückgewandelt.


    .....cya

  • Hi,

    und noch eine, ich denke ganz brauchbare, Variation:
    diesmal wird an einer bestimmten Stelle (frame) in ein bestehenden Clip, für die dauer des maskclips (anzahl frames), ein Video oder Bild entsprechend dem Maskenclip eingeblendet.

    Beispielaufruf:

    Code
    import("G:\[DVD2]\maskfunctionV4.avs")a=aviSource("G:\[DVD2]\motor.avi")b=aviSource("G:\[DVD2]\dire1.avi")#b=ImageReader("G:\[DVD2]\ablast02.bmp", 1, 200, 25, false).converttoRGB32()avmask(a, b, aviSource("G:\[DVD2]\maskkugel2.avi"), 1400, 1000)



    zugehörige Funktion:



    entscheidend ist die Aufrufzeile:
    avmask(a, b, aviSource("G:\[DVD2]\maskkugel2.avi"), 1400, 1000)

    a <-- das eigentlich Video
    b <-- das Video was eingeblendet werden soll
    aviSource("G:\[DVD2]\maskkugel2.avi") <-- das Maskenvideo
    1400 <-- startframe wo die maskierung in Video a beginnen soll
    1000 <-- startframe wo Video b bei der maskierung beginnen soll

    über die Tonspur habe ich mir noch nicht so die gedanken gemacht.
    Ausserdem gibt es zwei sonderfälle:
    1. man will ganz zu Anfang maskieren
    2. man will ganz am Ende maskieren

    Überprüfungen hab ich keine eingebaut, weil ich bedenken habe, das dann das script beim codieren zu lahm wird.


    ....cya

  • Zitat

    Überprüfungen hab ich keine eingebaut, weil ich bedenken habe, das dann das script beim codieren zu lahm wird.

    ueberpruefungen welcher art?

    wenn Du blosz die variablen /parameter auf korrektheit abchecken willst, tut das der geschwindigkeit keinen abbruch.

  • ich habe mal diese funktion weitergebastelt. ärgerlich war, das die länge des überblendvorgangs immer der maskenlänge sein sollte.
    Ergebnis:

    Code
    function blende(clip clip1, clip clip2, clip bl_clip, int laenge){# erster clip, zweiter clip, maskenclip, dauer in sekunden  dauer = int(framerate(clip1)*laenge) # fadingframes  fade1 = trim(clip1, framecount(clip1)-dauer, framecount(clip1)-1) # letzte <dauer> frames  fade2 = trim(clip2, 0, dauer-1)				    # erste <dauer> frames  schwarz = bl_clip.assumeFPS(int(round(framerate(bl_clip)*(framecount(bl_clip)/dauer)))).changeFPS(framerate(clip1))  weiss = schwarz.invert()  maskclip1=mask(fade1,schwarz)  maskclip2=mask(fade2,weiss)  blende = layer(maskclip1,maskclip2,"add",255,0,0,0,true)  fertig = trim(clip1, 0, framecount(clip1)-dauer) + \           blende + \	   trim(clip2, dauer-1, framecount(clip2)-1)  return fertig}


    Bei einer Kombination aus Clip und Dauer des Effekt hatte ich eine "Unrecognized Exception", verursacht evtl. durch einen Rundungs- oder sonstigen Rechenfehler in der zeile "schwarz = ...". Ließ sich durch Änderung der Dauer beheben. Vielleicht fällt mir dazu noch was ein.
    der aufruf sieht dann z.B. so aus:

    Code
    clip1 = avisource("d:\captures\jw2.avi").trim(22750,23000).converttoRGB32().crop(8, 2, -24, -14).addborders(16,8,16,8).subtitle("clip1")clip2 = avisource("d:\captures\jw2.avi").trim(45750,46000).converttoRGB32().crop(8, 2, -24, -14).addborders(16,8,16,8).subtitle("clip2")bl_clip = avisource("d:\captures\tests\l2r.avi").converttoRGB32()laenge = 2 # dauer des blendens in sekundenfertig = blende(clip1, clip2, bl_clip, laenge)return fertig


    da die mask-Funktion RGB32 braucht, muß vorher die Wandlung der Clips erfolgen. Da ich mich mit Farbräumen und der Wandlung nicht so auskenne, habe ich einfach den ganzen Kram gewandelt. Vielleicht kann ein Farbraumexperte die Funktion noch dahingehend optimieren.

    Das ganze geht übrigens auch mit der overlay-Funktion:


    ist einige Zeilen kürzer, ob die Encodingzeit sich verringert, werde ich noch ausprobieren.
    Anbei noch ein einfacher Maskenclip zum Ausprobieren. Sieht durch die extreme Komprimierung (DivX@500kbps) ein bißchen unsauber aus, aber ist ja nur zum Testen.Vielleicht könnte man hier eine kleine Sammlung solcher Clips anlegen?

    Zap

    EDIT: der gesamtclip hatte eine Dauer von 17 sekunden.
    die komprimierung in DivX 5.0.5 mit 1-pass@2500kbps hat bei layer 38sec, bei overlay 31 sekunden gedauert (auf nem athlon XP 2400+ mit 128MB). evtl. könnte sich durch farbraumoptimierung bei layer noch etwas zeit sparen lassen, aber ich bin da wie gesagt interessierter Laie.

    Zap

  • Ich habe schon das ganze Forum und einige andere Seiten durchsucht. Entweder ich stehe total auf dem Schlauch, oder vielleicht habe ich auch ein Brett vor dem Kopf. :huh:

    Wie kann ich solche Überblendmasken (l2r.avi) erstellen?
    Die 1. Möglichkeit ist mir klar: Bildbearbeitungsprogramm und ca. 50 Bilder mit leicht unterschiedlichem Inhalt erstellen, dann in Avisynth als Images einlesen und ein Avi erstellen.

    Es muß doch auch einfacher gehen!?!

  • Zitat von Hannibal1309

    Ich habe schon das ganze Forum und einige andere Seiten durchsucht.


    Wohl nicht ganz. das hier hast du übersehen ;)

    Zitat von Hannibal1309


    Es muß doch auch einfacher gehen!?!


    für einfache effekte (wobei ich aber die grenze zwischen "einfach" und "komplex" nicht genau bestimmen kann) geht auch ein graustufenbild. dieses (z.B. für l2r ein horizontaler schwarz-weiß-verlauf) wird mit einem von schwarz nach weiß aufgeblendeten clip (z.B. mit dissolve()) gemischt. So werden die übergänge in Pinnacle Studio (und auch in DVDLab, glaube ich) gemacht.
    Ich poste die nächsten tage mal ein paar beispiele. ist echt nicht schwer, aber ziemlich mächtig, mit ein bißchen fantasie kommen da schon tolle sachen raus. mit Flash gehts natürlich etwas komfortabler, und man hat auch mehr möglichkeiten, vor allem beim zeitlichen ablauf des übergangs.

    Zap

    "Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit."
    Benjamin Franklin

    mein Rechenknecht

  • Hi ZapBee,

    ich warte immer noch auf Deine Beispiele ;)

    Nein, im Ernst. Ich hab' mich jetzt mal selbst hingesetzt und ein-zwei Sachen mit Powerbullet gebastelt.
    Eins davon hab' ich einfach mal als Beispiel angehängt (Vielen Dank an Katjarella, die mit ihrem 'Puzzle' die Anregung dazu gab).

    Komischerweise wird die Flash-Datei im IE nicht korrekt dargestellt, aber wenn man sie mit swf2avi umwandelt, stimmt doch wieder alles.

    CU

  • Zitat von Hannibal1309


    ich warte immer noch auf Deine Beispiele ;)


    ach du meine Güte. Na gut, hier ein paar. alle aus pinnacle 8.1, aber teilweise auch problemlos selber zu erstellen. anwendung ist
    hier erklärt. wahrscheinlich muß man noch ein bißchen basteln, aber übung macht den meister...

    Zap

Jetzt mitmachen!

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