Beiträge von philm

    hi,
    ich bastele gerade an einem video herum, in dem es um einen orangenen ball geht, der sich relativ schnell durchs bild bewegt.
    Diese Bewegung würde ich gerne in starker Zeitlupe (so ungefähr framerate*4) mit einer flüssigen Bewegung zeigen.
    Das großartige MVTools2 und MFlowFPS in Avisynth scheint da im Prinzip das Richtige für zu sein, aber bei schnelleren Bewegungen (ca. 50 pixel pro frame) wird bei mir der Ball immer ziemlich zerschossen...
    (mein testvideo, das ich ausgeschnitten und noch langsamer gemacht habe, damit man den kaputten Ball sieht, links nur die Bilder des Originalclips und rechts mit mflow:
    http://youtu.be/ssSO23x4GWI )

    Ich hab schon an einigen Parametern rumgedreht, aber wirklich gut habe ich es noch nicht hinbekommen. Mein Ausgangsscript sieht einfach so aus:

    Irgendwelche Ideen, wie ich das in Avisynth hinbekommen könnte, dass der Ball in jedem Frame ok aussieht, irgendwelche Settings in MVTools, oder noch andere Filter?
    Wenn es etwas länger dauert, das zu rechnen, wäre das für mich jetzt erstmal nicht so entscheidend, und wenn alles andere außer dem Ball irgendwie komisch oder verzerrt aussehen würde (oder gar nicht zu sehen) wär auch nicht so schlimm.
    Für jeden Tipp wär ich sehr dankbar!

    beste grüße
    philm

    Hello,
    falls hier jemals nochmal jemand reinschauen sollte
    fürs Protokoll zwei imho ganz gute Lösungen.

    1. Mit Avidemux kann lassen sich nämlich ganz einfach I-Frames löschen und ersetzen, eine Anleitung zum "datamoshen findet sich hier:

    http://www.youtube.com/watch?v=tYytVzbPky8

    Aber im Prinzip braucht es die Anleitung nicht. Avidemux zeigt an der jeweiligen Stelle der Timeline an, ob es da gerade ein I- oder ein P- Frame ist. Wichtig ist eigentlich nur, darauf zu achten, fürs "Ausspielen" Copy zu wählen, also nicht neu zu codieren, und nicht "Smart Copy" zu wählen, da fragt das Programm dann nach.

    2. MVTools2 kann wieder Rekursion.
    Wenn es also nur die Bewegungsvektoren sein sollen, die auf ein anderes Bild angewendet werden sollen, ohne dass in den P-Frames einzelne Macroblocks ersetzt werden, Fehler korrigiert werden usw., dann geht das mit MVTools2: Bei "MCompensate" anstatt des ursprünglichen Clips, einfach den "msuperclip" des Bildes reingeben, auf das man die vektoren anwenden will und "recursion = 100" eintragen. Es geht allerdings nur mit pel = 1 (muss man auch eintragen, weil default ist 2, glaube ich) Aber das ist ok, es kommt ja eh Pixelchaos raus ;) Dieses Chaos lässt sich allerdings sogar ein wenig glätten, indem man die overlap-Funktion verwendet.

    voila

    diese Zeitkapseln haben echt komische Nachwirkungen...

    Nein, im Ernst: Das sind jetzt aber, drei Wünsche (oder Probleme) auf einmal, die ich (als absoluter avisynth laie) mal so auseinanderzufuzzeln versuchen würde:
    1. Eine Art map-plugin, mit dem sich die Stärke von allen möglichen Filtern über Werte von graustufenmaps oder Kanälen steuern lassen.
    2. Mal grob gesagt: Ein Zugriff auf Zeitfunktionen, also das, was ich mit dem Skript versucht habe, aber eben äusserst unelegant, in dem ich einfach mit trim viele zeitlich verschobene clips erstelle. Oder eben das, was time-displacement in After Effects macht.
    3. Dreidimensionales Mapping, wenn ich Ligh richtig verstehe, also das aufspannen von Videos auf Körper.

    helo,

    @LTJ
    Ich denke Du hast Recht und ich hätte das auch in Aftereffects machen können.
    Allerdings ist das Prinzip des Scripts ein etwas anderes als das des time- displacement Effekts: Das Script schneidet die Streifen einzeln aus und reiht sie dann mit stackhorizontal zu einem Bild auf. Deswegen könnte es theoretisch auch immer den Streifen an der gleichen Position der verschiedenen Frames "scannen" und so aus einem ganzen Film ein sehr langes Bild produzieren auf dem man dann die Schnitte und bestimmte Bewegungen (zooms zum Beispiel) auf einen Blick sehen könnte. Ich hab das so ähnlich mal für einen Ausschnitt aus dem Video "Rock with you" von Michael Jackson gemacht. (siehe Bild) Das würde mit "time displacement" imho nicht gehen.


    LigH
    "Tangent Space Normal Maps"? Das hört sich spannend an.
    Was würde man dann für Daten für das Displacement verwenden ausser auch andere Videos? Und wieso zwei Farben? Wenn 50% Grau als Nullpunkt gesetzt wird, kann man doch mit Graustufen auch in beide Richtungen gehen.

    ahoi
    philm

    Hello,
    das Video ist von mir. Super, da kann ich mich mal für die zuverlässige Hilfe vom Gleitz-Forum revanchieren. Das Script ist ziemlich lang, um das direkt hier zu posten, ich hab mal aus .avs eine .txt gemacht und angehängt.
    Ich hab das einfach mit Gewalt runtergeschrieben, dass könnte man bestimmt auch irgendwie elegant mit einer Schleife machen, weil das Prinzip ist ziemlich simpel aber ich kenn mich mit sowas nicht aus. Ich habe das mit AvsP gemacht, da gibt es dann auch ein paar slider mit denen man die Breite der einzelnen "gescannten" Streifen einstellen kann, und ob die immer an der gleichen Stelle des Bildes ausgeschnitten werden oder von links nach rechts usw.
    Verbesserungsvorschläge oder noch lieber Verbesserungen sind willkommen.

    aloha

    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

    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

    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

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


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

    Code
    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

    (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

    Kleiner Nachtrag zum Thema
    (falls das jemanden interessiert, ich weiss, dass ist lange her, dass der Thread lief)
    Das Problem ist, dass die Ergebnisse nicht besonders anschaulich werden,
    weil neben den vielen neu auftauchenden Macroblocks (wie sie Markus Dienert richtig vorhergesagt hat), die, die tatsächlich bleiben, fast immer danach noch dct(glaube ich)-korrigiert werden.
    Man müsste also, um das Prinzip der motion vectors gut zu erklären, diese Fehlerkorrekturen irgendwie deaktivieren. Vielleicht über MacroblockMode:
    (Siehe: http://www.cs.unc.edu/~kmp/mpeg2even…oblockMode.html)
    Da ich mich jetzt an die wunderbare Erklärung von Fr An (http://www.fr-an.de/fragen/v06/index.htm) gehalten habe, (noch technischer ist dann bahnhof für mich) und dort die Struktur des Macroblocks noch nicht vorkommt, bin ich einfach nicht weitergekommen ;)
    ...
    Aber ich habe jetzt einen Lösungsansatz gefunden, den ich dann verwenden werde, wenn ich wieder Zeit dazu habe: Das ist zwar ästhetisch eigentlich nicht sehr schön, weil das dann nicht wirklich ein "gehacktes MPEG2" ist, aber für die Anschaulichkeit ziemlich ordentlich, scheint mir:
    Und zwar mit dem MVtool MotionCompensate für Avisynth tatsächlich nur die Bewegung auf ein anderes Bild übertragen, wie es in diesem Thread vorgeschlagen wird:
    http://forum.doom9.org/archive/index.php/t-84185.html

    Ich habe bis jetzt nur reingeschaut, aber eine Sache sind mir schon aufgefallen:
    Mir scheint, man muss die alte Version mvtools-v1.4.13 benutzen, sonst kann man nicht mit dem vorherigen errechneten Frame weiterrechnen. Das heisst, die "Verzerrung" des Ausgangsframes kommt immer nur einen Frame weit, dann wird wieder der originale Frame geladen.

    Ausserdem habe ich bei meiner Suche noch zwei Sachen gefunden,
    die in diesem Zusammenhang interessant sein könnten:

    MPeg2event, eine MPEG2 library:
    http://wwwx.cs.unc.edu/~kmp/mpeg2even…i/overview.html

    VCDemo, eine Software, um verschiedene Aspekte der Bild-und Videokomprimierung vorzuführen:
    http://ict.ewi.tudelft.nl/index.php?Itemid=124


    Grüße

    philm

    Hei,
    ich bin's wieder.
    was Martin Dienert zu Tmpegenc gesagt hat, finde ich einleuchtend.
    Ich habe also mal angefangen, die ersten I-Frames mit dem Hex-Editor auszutauschen. (ein kleines Programm wär natürlich super, aber da ich selber nicht programmiere, werde ich jetzt nicht jemand anderes fragen, für eine einmalige Aktion ein Programm zu schreiben...)
    Der Linktipp von Borax war da schon mal sehr hilfreich - schön übersichtlich diese Seite.
    Nachdem ich mich ein bißchen in das Thema reingegoogelt habe, bin ich auf das Programm avimaster Gui gestoßen, der die einzelnen Header identifiziert und Positionen angibt:

    http://www.thozie.de/dnn/AVIMaster/tabid/53/Default.aspx

    So musste ich nicht selbst überlegen, wie ich das am praktischsten mache...
    Auch weil im Hex-Editor, der I-Frame nur mittelbar zu finden ist (der Frame nach dem GOP-Header) was wohl wahrscheinlich damit zusammenhängt, dass der Frame-Typ in drei bit des Headers geschrieben wird.

    Über Headerlängen habe ich jetzt garnicht nachgedacht... (sollte ich das?)

    Auf jeden Fall ist das erste Ergebnis schon mal vielversprechend.

    (jetzt muss ich wahrscheinlich an den Kompressionsparametern drehen, da sich das richtige Bild ziemlich schnell wieder einstellt. ich brauche da wahrscheinlich eine Kompressionseinstellung, die hauptsäch über motion prediction, die nächsten p-frames baut.)

    Also Danke erstmal für die Hilfe.
    Grüße
    jan

    ja hallo
    danke für die Tipps

    werd mich mal die Woche ans ausprobieren setzen

    Wobei die virtualdub/tmpegenc Lösung sich erstmal einfacher anhört.

    Das mit dem hexeditor klingt dafür ziemlich interessant...
    Nein, ich kenne mich leider nicht so gut aus mit mpeg-2, dass wird also zuallererst einmal ein "Lehrfilm" für mich. Insofern werde ich mir die Sache mal im Hexeditor anschauen.
    Einen Tip vielleicht noch, wo man nachschauen kann (Link oder auch Buch), um diese Datenstrukturen von mpeg-2 zu lesen?

    grüße
    philm

    hi
    erstmal: nettes Board habt ihr hier!

    zweitens gleich mal ein Problem:
    (ich weiss nicht, ob dass eine newbie-frage ist, fang aber sicherheitshalber mal hier an, bevor ich jemanden nerve)

    Ich möchte einen mpeg Film machen, der extra zerschossen aussieht. Die Idee dahinter ist, dass man daran sehen können soll, wie mpeg funktioniert.
    Dazu will ich die I-Frames in den GOPs mit anderen I-Frames aus einem anderen Film austauschen, sodass die Bewegungsvektoren usw. aus dem ersten Film auf die I-Frames aus dem anderen Film angewendet werden und ein wunderbarer Pixelsalat entsteht.

    Ich habe an dieser Idee auch schon rumgebastelt und mir cuttermaran und mpeg2schnitt angeschaut, aber das will nicht funktionieren, weil die Programme "zu sicher" sind und deswegen den Effekt den ich haben will nicht zulassen. Ich suche also ein Programm oder irgendeine Möglichkeit, wo genau das möglich ist: mpegs zu schneiden ohne dass das Programm, meine "Fehler" wieder rausrechnet bzw. garnicht erst erlaubt. Hat jemand dazu eine Idee?


    Ich kann ja mal erklären, was ich da gemacht habe:
    1. Zwei avi Filme erstellen, mit genau der gleichen Länge, Format usw.
    (400 Frames, PAL, unkomprimiertes Microsoft AVI, Progressive: kein interlace)
    2. Diese beiden Filme in TMPEGEnc als Elementary Streams genau gleich encodiert:
    MPEG-2 Video, ES, CBR
    GOP Structure: IPPPPPPPPPPPPPPP (1 I-Frame, 15 P-Frames)
    Haken bei: include GOP Sequence Header
    Keine Haken bei: Output bitstream for edition (Closed GOP) und Detect scene change
    3. Die ES (m2v hiessen die glaub ich) in Mpeg2Schnitt geladen
    4. Jeweils den I-Frame aus der einen Sequenz herausgeschnitten und dann die 15 P-Frames aus der anderen Sequenz.
    5. Schnitt angewendet.

    Das Problem ist, dass Mpeg2Schnitt, den ersten P-Frame der anderen Sequenz als einen I-Frame encodet hat, sodass ich anstatt Pixelsalat, einen Film erhalten habe, in dem immer kurz ein anderes Bild aufblitzt.

    Bei Cuttermaran war das auch nicht möglich, da durfte ich solche Schnitte gar nicht erst setzen.

    Ich hab natürlich auch schon intensiv gesucht, aber es ist anscheinend schwer Tipps zum kaputtmachen zu finden. :redface:

    danke für jeden Tipp
    philm