Frage von frm:Hallo Freunde,
ich habe eine Frage bezüglich expressions.
Ich muss den Mund einer Person laut einer Audioaufnahme Lippensynchron animieren. (Monty Pyton Style eines Fotos)
Habt ihr eine Ahnung wie ich das mittels Expressions in AECs5.5 realisieren kann?
Ich kann doch die Audiowelle auslesen und Keyframes erstellen lassen oder?
Diese Werte könnte ich dann mittels Expression verwerten. Wenn ja weis einer eine Lösung?
HG
Florian
Antwort von florianbepunkt:
technisch ja, konzeptionell nein. die unterschiedlcihen laute produzieren doch völlig unterschiedliche mundöffnungen und lippenbewegungen. das kannst du dir über lautstärke (oder frequenz) nicht als daten auslesen..
falls du das doch probieren willst, damit sich irgendwas bewegt:
audio in keyframes umwandeln lassen. dann mittels positionswert oder puppet-tool arbeiten, daten aus den keyframes als variable speichern (dann kannst du damit noch rumspielen) und z. b. vom y wert der position addieren/subtrahieren. dann hast du so eine art jibjab-effekt. die variable kannst du dann ja noch mit div rechenoperationen so bearbeiten, dass die bewegungen nicht zu stark/schwach/etc. sind.
gruß
Antwort von frm:
Genau so einen effekt möchte ich per expressions programmieren. Allerdings nur die x Achse.
( HAst du da eine Zeile für mich?)
Es ist halt hammer viel Arbeit das ganze per Hand zu animieren, es wär nichtmal schlimm wenn der Mund immer gleich weit auf und zu geht.
Da es sich wirklich um einen lustigen effekt handelt.
Ich habe schon alle Ebenen usw. angelegt, es fehlt nur noch die Animation.
Hg
Florian
Antwort von frm:
So habe soeben Audio in Keyframes gewandelt und einfach ganz blöd mal die Werte per Expressions verknüpft.
Sieht schon sehr geil aus, allerdings muss ich es noch eingrenzen das der Mund nur nach unten geht und nicht in alle Richtungen.
HAt jemand eine Idee?
Hier mein Momentaner Code:
wiggle(3,thisComp.layer("Audioamplitude").effect("Beide Kanäle")("Schieberegler"))
Vielen Dank
Hg
Florian
Antwort von VideoWilly:
Rechtsklick auf Position -> Dimensionen trennen, dann kannst du die Expression z.B. nur auf die y-Achse (Was du ja willst) anwenden. Dann müsstest du nur noch ein Maximum für den Wert aus dem Audio nehmen, weil der Mund ja nicht weiter als "zu" gehen soll, oder?
Antwort von 2B:
Du kannst es auch direkt in der Expression machen:
x = value[0];
y = wiggle(30,thisComp.layer("Audioamplitude").effect("Beide Kanäle")"Schieberegler"))[1] - value[1];
y = Math.abs(y) + value[1];
[x,y]
Zur Erklärung:
x = value[0];
Hier wird die x-Position in einer Variable gespeichert. (Kann man sich auch sparen, aber so ist es übersichtlicher)
y = wiggle(30,thisComp.layer("Audioamplitude").effect("Beide Kanäle")"Schieberegler"))[1] - value[1];
Hier berechnest du, wie in deiner Expression, ein Zufallswert mit Hilfe von "wiggle". Wiggle liefert bei der Position (und auch anderen Parametern) zwei Werte als Ergebnis (x und y). Wir brauchen nur den y-Wert. Deshalb "".
Dann ziehst du die ursprüngliche y-Position von der neuen ab und erhälst den Abstand zischen beiden Positionen. Wenn der Abstand positiv ist, bewegt sich der Mund nach unten. Ist er negativ, nach oben.
Deshalb wird im letzten Schritt:
y = Math.abs(y) + value[1];
der absolute Wert des Abstands genommen und mit der ürsprünglichen y-Position addiert.
Antwort von frm:
Vielen vielen Dank für deine Hilfe!
Es funktioniert theoretisch ganz gur, sieht nur noch nicht zu gut aus finde ich.
Gibt es eine möglichkeit den Mund noch weiter zu öffnen und vieleicht auch die ruckler noch zu glätten, z.b. durch eine zeitliche verzögerung oder so?
Wie kann man noch gleich ein Youtube Video direkt hier einbinden?
Demovideo
http://youtu.be/6rtZN_Y4T7w
HG
Florian
Antwort von TiMovie:
Um dem Ganzen noch ein bisschen leben ein zu hauchen würde ich noch den Effect verflüssigen anwenden.
grüße
Antwort von VideoWilly:
Du könntest das ganze doch einfach z.B. mit 10 multiplizieren, um den Aktionsbereich zu erweitern.
Antwort von frm:
@Timovie
wie meinst du das? Meinst du Bewegungsunschärfe oder was sollte ich verflüssigen?
@VideoWilly
Ich habe jetzt einfach +5 gewählt. Ist nicht genau das was ich gemeint habe, funktioniert aber.
Ich seh schon ich muss fitter in Expressions werden.
Vielen Dank für eure Hilfe!
Besonders an 2B für deine expressionvorgabe!
Hg
Florian
Antwort von 2B:
Ich habe jetzt einfach +5 gewählt. Ist nicht genau das was ich gemeint habe, funktioniert aber.
Statt +5 kannst du auch *2 (oder was anderes, je nachdem was für dich passt) versuchen. Vielleicht entspricht das mehr dem, dem was du dir vorstellst.
Edit: Zum lernen von Expressions empfehle ich dir
http://www.motionscript.com