bewegungsvektoren (mvanalyse, mvmask usw.)

  • (Ich bin zwar selber blutiger Avisynth-Anfänger, aber die Frage ist spezieller, darum poste ich das mal unter fortgeschritten, ich hoffe das ist richtig so)


    ehlo,
    Diese MV-Tools sehen ja sehr vielversprechend aus, um verrückte Filterungen zu machen.
    Ich habe mich gefragt, ob man das auch quasi als "motion-keying" benutzen könnte, ungefähr so stelle ich mir das vor. Wenn man die die Bewegungsvektoren hat und so etwas wie global motion, wäre es doch theoretisch möglich, eine Maske zu erstellen von den Blöcken oder Pixeln, die von global motion abweichen. So könnte man dann ein vorbeifahrendes Auto ausschneiden, obwohl die Kamera gleichzeitig schwenkt. Und theoretisch müsste man jetzt doch sogar im Hintergrund ein anderes Bild einsetzen können, dass mit Hilfe der global motion wieder bewegt wird.


    Ich frage mich jetzt, ob es solche Möglichkeiten gibt, über Avisynth-Scripts an den Vektoren rumzubasteln, also konkret:


    Die errechnete global motion wieder auf die einzelnen Blöcke runterzurechnen und als Vektorclip auszugeben, denn man dann mit MVcompensate oder so auf andere Bilder anwenden könnte?

    Eine Maske zu erstellen, die auf der Abweichung von den motion vectors der einzelnen Blöcke/Pixel zur global motion beruhen?


    Ich habe mir MvMask angeschaut und nur die Möglichkeit gefunden, nach Gesamtbewegung oder SAD auszuschneiden, und damit geht sowas nicht, oder?


    Hat jemand einen Tipp?


    Grüße
    jan

  • Juppa. Sehr gute Ideen, das alles.


    "Theoretisch" (gute Wortwahl von Dir;)) geht das alles.


    *Praktisch* wird vieles davon leider nicht so schön, wie man's gerne hätte ... und einiges geht leider überhaupt nicht.


    Das Grundproblem ist: von der Script-Ebene aus besteht keinerlei Möglichkeit, die Richtung der Vektoren auszuwerten. Man kann sie sich über MVMask anzeigen lassen, aber man kann nicht damit arbeiten. Was von der Script-Ebene zugänglich ist, sind "nur" die SADs, und die *Länge* der Vektoren (d.h. die "Geschwindigkeit" der Bewegung eines Blockes, aber *nicht* die Richtung.)


    Zu den "konkreten" Fällen:


    1.)

    Zitat

    Die errechnete global motion wieder auf die einzelnen Blöcke runterzurechnen und als Vektorclip auszugeben, denn man dann mit MVcompensate oder so auf andere Bilder anwenden könnte?


    Ja, das geht. Vom Prinzip her etwa so:


    Code
    1. clip1 = (der Basis-Clip)
    2. clip2 = (der alternative Clip)
    3. global_vec = clip1.MVAnalyze(parameter, idx=1) # oder auch MVDepan
    4. clip2_globally_compensated = clip2.MVCompensate(global_vec_clip1, idx=2) # oder auch MVDepan



    2.)

    Zitat

    Eine Maske zu erstellen, die auf der Abweichung von den motion vectors der einzelnen Blöcke/Pixel zur global motion beruhen?


    Das zielt jetzt auf das "fahrende Auto während Kamera-Schwenk" ab. Und hier wird's ungenau, weil die Richtung der Vektoren nicht ausgewertet werden kann.


    Möglichkeiten. die man probieren könnte:


    a)
    - MVanalyze(global), hiervon MVMask(vektorlänge) erstellen
    - MVAnalyze(blocksearch), hiervon MVMask(vektorlänge) erstellen
    - Beide Masken subtrahieren
    - sehen ob etwas ansatzweise brauchbares herauskommt


    b)
    - MVanalyze(global), hiermit Kompensation erstellen
    - MVAnalyze(blocksearch), hiermit Kompensation erstellen
    - Beide Ergebnisse voneinander subtrahieren
    - sehen ob etwas ansatzweise brauchbares herauskommt


    c)
    - MVanalyze(global), hiermit Kompensation erstellen
    - interleave von (original) und (globally compensated)
    - auf diesen Interleave MVAnalyze(blocksearch) anwenden
    - von dieser 2ten Vektorensuche eine MVMask erstellen
    - den Interleave mit SelectEven/SelectOdd rückgängig machen


    d)
    Kombination von a) und/oder b) und/oder c)



    Vielleicht reicht das ja erst mal als Fingerzeig. Habe dieser Tage leider überhaupt keine Zeit, um "praktisch" etwas zu probieren ... viel mehr als etwas quasi-Code und altkluges Geschwafel:D ist kaum drin. Die Zeit reicht kaum, eine Post wie diese hier überhaupt zu schreiben. :(
    (Mega-Stress mit Renovieren & anschließendem Umzug.)

  • wow
    danke für die tipps. Ich brauch jetzt wohl erstmal ne weile, um das auszuprobieren und zu verstehen (bzw. herauszubekommen, was ich genau nicht verstehe...).


    bis dann,
    jan

  • helo
    Ich bins wieder
    Ich habe mich mal zuerst an bewegten "alternativen hintergrund" gemacht:



    1.)
    Ja, das geht. Vom Prinzip her etwa so:


    Code
    1. clip1 = (der Basis-Clip)clip2 = (der alternative Clip)global_vec = clip1.MVAnalyze(parameter, idx=1) # oder auch MVDepanclip2_globally_compensated = clip2.MVCompensate(global_vec_clip1, idx=2) # oder auch MVDepan


    Also ich habe jetzt mal rumprobiert, und zwar mit einem stehenden Bild (=background.bmp) als hintergrund. Das habe ich erst größer geladen und dann am ende gecroppt. Zum Vergleich habe ich nochmal den "ursprungsclip" reingesetzt.
    das sieht bei mir jetzt so aus:



    Hätte jetzt ein paar Fragen:


    ersten: Dieses idx in Deinem Vorschlag scheint ja wichtig zu sein, aber das gibt es bei DePan garnicht.


    zweitens: parameter.
    Das sieht aber nicht so aus wie ich mir das vorgestellt habe: bei DePan offset = 1 wackelt der hintergrund nur so ein bisschen rum. bei 10 ist er schon etwas bewegter, aber bewegt sich erstens erst zu spät und zweitens, so scheint mir, nicht in der Stärke des originalclips. Ich habe aber keine Idee was ich da (alles? :) falsch gemacht habe, welche parameter eigentlich gesetzt werden müssen.
    (ein (schlechtes aber imo ausreichendes) bild davon kann man sich machen unter:
    http://www.youtube.com/watch?v=5P0l4meM010
    und
    http://www.youtube.com/watch?v=lzq4gRGBFf8 )


    Grüße
    jan

  • Ja, was hab ich mir nur gedacht, als ich diesen Quatsch gepostet habe? Sooo einfach geht das natürlich *nicht*.
    (Mit scharfis_brain hab ich mal ein ähnliches Problem angebrütet, [bzw. er mit mir], von wegen simuliertem Detail ... wenn Scharfi meine Post von oben gelesen hat, dann hat er sich bestimmt krumm und schief gelacht ...) :redface:


    Vom Prinzip her muss man jeden Frame immer wieder aufs neue kompensieren. Also, im ersten Frame wird der Hintergrund mit den gefundenen Vektoren kompensiert. Im nächsten Frame muss dann der bereits kompensierte Hintergrund kompensiert werden. Im dritten Frame muss der kompensierte kompensierte Hintergrund kompensiert werden, etc. pp.


    Und da liegen die Probleme begraben ... zunächst mal ergeben sich ein paar kleinere Problemchen daraus, dass für jeden Frame de facto der Input gewechselt werden muss. Ein "Inloop"-Filter könnte das leichter bewerkstelligen; per Scripting ist's 'ne hakelige Geschichte. (Conditional Environment und so...)
    Vor allem aber wird das Ergebnis immer schlechter, wegen der Kompensation der Kompensation der Kompensation usw. ... ist wie beim Fotokopieren, wo die Kopie der Kopie der Kopie ja auch immer schlechter wird.



    Übrigens, nach nochmaligem Studium der Parameter: mit MVCompensate wird man's wohl eh nicht hinkriegen. Die "globalen" Vektoren dienen nur als zuschaltbare Hilfe, einen reinen Pan-Output wird man da vrmtl. nicht hinkriegen.
    Wenn, dann muss man das also über Depan bzw. MVDepan machen ... und da spielt "idx" übrigens tatsächlich keine Rolle.

  • Die Frage die sich mir stellt, ist es denn wirklich nötig das ganze über Avisynth abzuarbeiten, wo jede halbwegs semiproffesionelle Mehrspurvideoschnittsoftware dieses "Autorausschneiden" mit ein wenig Übung für Anwender und Software beherscht ?

    In den meißten Fällen ist das mehr oder weniger under den Bluebox Filtern zu finden, wobei das Auto dann nicht unbedingt blau sein muss.:D


    max

  • ist es denn wirklich nötig das ganze über Avisynth abzuarbeiten, wo jede halbwegs semiproffesionelle Mehrspurvideoschnittsoftware ...


    Weiss ich nicht / kann ich nicht beurteilen, da ich keine halbwegs semiproffesionelle Mehrspurvideoschnittsoftware zur Verfügung habe. Bei mir läuft nur, wo sich die Investition für mich auch lohnt, bzw. was ich mir überhaupt leisten kann. Und das ist nicht viel. :)


    Danebst beantworte ich halt fragen, ob und wie man gewisse Dinge evtl. mit unserer Universal-Umsonst-Software erledigen kann. :)


    BTW, während ich mir "Autoherausschneiden" noch ganz gut vorstellen kann, wäge ich die globale Animation des Ersatz-Hintergrundes anhand der Vektoren des Originalvideos eher nicht im Dunstkreis der halbwegs semiproffesionellen Mehrspurvideoschnittsoftware, die unsereins sich leisten würde.

  • helo,


    max.
    Tatsächlich. Ich habe beim googeln zwei Filter gefunden, die sowas anscheinend machen: mokey und boris continuum 4.0. Hatte ich nicht gewusst. Ohne so ein plugin (so ungefähr die 800 Euro Klasse) habe ich zumindest keine idee, wie man (bei after effects z.B.) sowas machen könnte, ohne letztlich doch eigentlich jeden frame selber zu bearbeiten...
    für Tipps wär ich aber dankbar.


    Ganz unabhängig davon, hatte meine Frage hier im Forum auch keinen so konkreten Hintergrund, wie das vielleicht geklungen hat, sondern ich bastele gerne mit Video rum, hatte MVtools entdeckt und mich gefragt, was man wohl alles für schräge sachen machen kann damit, wenn man auf Bewegungs-Vektoren zugreifen kann.
    (zB vielleicht auch mal sowas: http://forum.doom9.org/archive/index.php/t-84185.html )


    Aber anscheinend muss ich dafür doch selber mal schnell programmieren lernen :lol:


    grüße
    jan

  • Zitat

    wäge ich die globale Animation des Ersatz-Hintergrundes anhand der Vektoren des Originalvideos eher nicht im Dunstkreis der halbwegs semiproffesionellen Mehrspurvideoschnittsoftware, die unsereins sich leisten würde.


    ganz ehrlich, k.A. was ihr da genau wollt, ein Beispiel wäre extrems nützlich.
    Meine Aussage bezog sich auf das Beispiel "Autoherausschneiden" und das klappt recht prima .


    Halbwegs semiproffesionelle Videobearbeitungen sind u.a. die alten Ulead MSP Produkte, dafür gibs dann auch 30 Tage Testversionen, da ich hier von alten Versionen rede, ich selber arbeite mit Version 6.5 , die bekommt man ganz legal schon teilweise ab 10 € .

    Zitat

    bei after effects


    kann ich nicht mal einen Tip abgeben, da ich diese Software nicht einsetze und jenes zu meiner eigenen Nervenberuhigung auch nicht vorhabe .

    Evt. hat Aftereffekts ja Überblendespuren an Bord, sprich du legst beide zu "verwebenen" Videos in die "Unterspuren" heißen meißt v1, v2, usw. und spielts dann mit den Überblende Filtern rum.

    Richtig genau kann man das nur an einem Beispiel erklären und ich persönlich eigentlich nur für MSP 6.5 und Edius 4 , weil ich nur mit den beiden Proggies arbeite.

    Ich persönlich frisiere jedes Orginal Menü, genau mit solchen "Verschwinde" filtern, sprich lasse Orginal Button verschwinden, oder tausche eben Hintergründe bzw. einige Teile des Hintergrundes usw.

    Beispiel kann ich da leider nicht posten, da das ganze ja nun mal nicht so UhrG konform ist, und ich absolut keinen Bock habe mich nochmal in die Nesseln zu setzen.

    Aber, als es noch erlaubt war, hatte ich mir ein Matrix Menü zusammengebastelt, was dem Orginal in nichts nach stand, wobei in meinem Menü nur 2 Button auftauchten, Kinoversion starten, und Follow the white Rabbit Version starten :) , realisiert mit MSP 6.5 und den Blubox Filtern im Unterpunkt Überblendungen.

    Wenn man denn es heute noch dürfte, so würde ich zu heutiger Zeit z.B. das Orginal Menü der DVD "Click" ähnlich bearbeiten, die Orginalen Buttons überblenden mit eben neuen Buttons -- Hintergrund auffüllen und neue Buttons bzw. entsprechenden Text einblenden -- rein theoretisch versteht sich .



    Zitat

    Danebst beantworte ich halt fragen, ob und wie man gewisse Dinge evtl. mit unserer Universal-Umsonst-Software erledigen kann.



    Mein Post sollte auch in keinsterlei weise das irgendwie bemängeln oder gar negativieren, ich selber mache ja auch genug mit Avisynth und freue mich immer wieder wenn ich denn eure Filter auch verstehe :ja: , ergo weiterposten, mir gings nur um das Beispiel "Auto rauschneiden" bzw. das es eben für ein solches Vorhaben z.B. mit Videoschnittsoftware funktionieren kann, weils mit Avisynth evt. noch nicht so richtig klappt -- was ja nicht heißt das der Weg über Avisynth der falsche wäre -

    Zumal meine Einschränkung ja war, Übung für Software und Anwender.


    max

  • Zitat von max


    ganz ehrlich, k.A. was ihr da genau wollt, ein Beispiel wäre extrems nützlich.


    Beispiel (nur so vom Prinzip her): Formel-1 Autorennen.


    Szene: Die Kamera ist auf einen Wagen "fixiert", während der Hintergrund sich bewegt.


    Aufgabe: den "statischen" Wagen behalten, und den Hintergrund durch etwas anderes ersetzen.


    Wenn man das probieren wollte, dann soll sich der "neue" Hintergrund natürlich genau so bewegen wie der Originalhintergrund es getan hat. Und dafür müsste man eben vom Original die Bewegungsvektoren ermitteln, und sie dann auf den neuen Hintergrund anwenden. (Und dafür braucht's dann, wie gesagt, diese "endlos-Kompensations-Kette.)

  • es geht also irgendwie weiter :)
    Dann versuch ich mal, mich wenigstens mit "recherche und archiv" nützlich zu machen :hm:


    Und dafür müsste man eben vom Original die Bewegungsvektoren ermitteln, und sie dann auf den neuen Hintergrund anwenden. (Und dafür braucht's dann, wie gesagt, diese "endlos-Kompensations-Kette.)


    ungefähr sowas wie mode=2 in der alten Version von mvtools?:
    ( http://manao4.free.fr/mvtools.htm )


    Wobei "results will be ugly" ja schon besprochen wurde, aber vielleicht könnte man das ja noch irgendwie glätten (?).


    leider wurde mode=2 wieder abgeschafft:
    ( http://avisynth.org.ru/mvtools/mvtools.html )

    Zitat


    1.5.0 beta (23.08.2006 by Fizick)
    Removed mode=2 loop option of MVCompensation, mode=0 is processed as mode=1 now.


    Grüße
    jan

  • Zitat

    den "statischen" Wagen behalten, und den Hintergrund durch etwas anderes ersetzen.



    das wird dann aber verteufelt schwierig, ob das mittels Bewegungsanalyse überhaupt errechnet werden kann, denn das bewegt sich ja in den Gebieten der MotionsCapture, ala "MonsterHouse" , "Polarexpress" , "StarWars" oder " Matrix" usw. . Nur da wurden zum einen die fixierten Darsteller vor einem neutralen Hintergrund gefilmt, dann wurde der Hintergrund ohne Darsteller gefilmt und anschließend in das Bild eingefügt .
    Oder eben die umgedrehte Variante "der neutrale" Darsteller vor einem bewegten Hintergrund, der dann aufgrund seiner Neutralität bequem rausgeschnitten werden kann, wie z.B. Golum Darsteller in "Herr der Ringe" , die Monsterhouse Darsteller , Polarexpress usw.

    Einen Wagen vor einem neutralen Hintergrund auszuschneiden und in einen "neuen" Hintergrund zu basteln, das zumindest kann z.B. MSP
    (ich hatte mal meine Kinder durch unseren Garten fliegen lassen, eben genau nach dem Prinzip, vor einem grünen Hintergund, lagen sie "bäuchlinks" auf einem grünen verdeckten Stuhl und ruderten mit Armen und Beinen .
    Dann der neutrale Schwenk durch den Garten und anschließend beide Sequenzen ineinandergeblendet, selbstverständlich die Kinder mit dem Bluebox Filter "friesiert") .

    Allerdings die Orginal Hintergrundbewegungen ins "gemachte" Bild miteinzurechnen, klingt verteufelt intressant, aber ich glaube sowas habe ich noch nicht gesehen -- in der proffesionellen Tricktechnik, bisher war das lles basierend auf den obenangeführten Möglichkeiten, bzw. davon abgeleitette Verfahren.


    max

  • Erinnert mich teilweise an:
    http://voidon.republika.pl/backchange/readme.html
    (hat natürlich kein MV-krimskrams)


    @Didee:
    Gibt es kein problem durch die Begrenzung der MVTools auf ein minimales Gitter von 4*4 Pixeln? Wenn man etwas damit "ausschneidet" ist man doch auf die Blöcke limitiert in die die MVtools das Bild zur Vektorenerkennung einteilen, Oder?


    philm: Keine sorge, hier gibt es einige die mit AviSynth gerne mal spaseshalber die CPU Foltern. (ich auch :D ) Muss ja nich alles immer Praktisch nutzbar sein. ;)


    Die Parole lautet:
    "Löhrning bei Funhäwing!!" :ani_lol:

  • hello again,
    Um zusammenzufassen: eigentlich geht es nicht, weil die jeweils gebrauchten Funktionen nicht alle zusammen in einem Tool vorliegen:
    DePan kann kein inloop, und MVcompensate versteht keine global motion.
    Stellt sich die Frage, ob es einen einigermaßen eleganten workaround gibt.
    Ich stocher also nochmal weiter :D


    Eine Möglichkeit hat Didiée ja schon angedeutet:



    Ein "Inloop"-Filter könnte das leichter bewerkstelligen; per Scripting ist's 'ne hakelige Geschichte. (Conditional Environment und so...)


    oh cool,
    wieder was zu lernen...
    Wenn ich das richtig verstehe, geht es bei "Conditional Environment und so...", darum, den Filter quasi von aussen zu loopen, um auf den vorher produzierten Frame zugreifen zu können.
    Gibt es irgendeinen Tipp für eine Seite oder ein Script, wo man solche rekursiven Funktionen sich mal anschauen kann?


    Eine andere vage Idee wär noch, das inloop von mvcompensate zu nutzen, allerdings bräuchte man entsprechend erstmal einen anständigen Vektoren-Clip. Vielleicht kann man doch irgendwie das "Auto" (das objekt) schon ohne den kompensierten Clip einigermaßen ausschneiden, und die "leere Fläche" gleichmäßig mit Nachbarvektoren füllen. Oder dann die Auflösung von MVAnalyse, bzw. des zu analysierenden Clips so einstellen, dass er die leeren Stellen möglichst übergeht.


    Das Problem der Kopie, von der Kopie, usw. ließe sich nur lösen, wenn zoom, pan und rotation in Bezug auf das Anfangsbild als absolute Größen ausgegeben würden, die man dann in entsprechende Plugins (zoom von warpenterprises?) einspeisen könnte. Dazu müsste am Anfang schon mal das ganze Video durchsucht werden, aber das umrechnen auf den Hintergrund bräuchte keinen Loop. (dabei fällt mir auf, dass das natürlich der einfache Grund ist, weswegen man das bei Kinofilmen nicht macht: zweidimensional bleibt der Hintergrund natürlich immer, im gegensatz zu mit "motioncontrol" aufgenommenen Hintergründen... naja, eigentlich logisch :hm: )


    Grüße


    jan