Ich versuche, einen einfachen 5-Sekunden-Zoompan zur Mitte eines Bildes zu erstellen (aus dem Beispiel auf derffmpeg.org-Website). Der folgende Befehl funktioniert, zittert aber mehr als meine Hände nach 5 Tassen Kaffee:
ffmpeg -framerate 25 -loop 1 -i island.jpg -filter_complex "[0:v]scale=-2:480,zoompan=z='min(zoom+0.0015,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125,trim=duration=5[v]" -map "[v]" -y out.mp4
Ich bin mir bewusst,ffmpeg-Fehler #4298. Der gepostete Workaround-Vorschlag besteht darin, den scale
Filter vor zu verwenden zoompan
. Aber wie in meinem Beispiel gezeigt, scheint dies immer noch keine Wirkung zu haben.
Es scheint, dass beliebige x- oder y-Werte den Wackel-/Ruck-/Zittereffekt verursachen.
Kann irgendjemand eine effektive Problemumgehung anbieten? Danke!
Versions Information:
ffmpeg version 3.1.2-static http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (Debian 5.4.0-6) 20160609
Antwort1
Vermeidenruntervorher skalieren. Entweder eine Trunc-Funktion auf die x- und y-Ausdrücke anwenden. Oder vorher hochskalieren. Am besten letzteres. Damit beseitige ich den größten Teil des Jitters.
ffmpeg -framerate 25 -loop 1 -i island.jpg -filter_complex "[0:v]scale=8000x4000,zoompan=z='min(zoom+0.0015,1.5)':x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':d=125,trim=duration=5[v]" -map "[v]" -y out.mp4
Grundsätzlich rundet der Filter die Werte aus den x
und y
Ausdrücken, die entweder auf- oder abgerundet werden können. Dadurch entsteht eine ungleichmäßige Bewegung aufgrund von Änderungen in der Schwenkrichtung. Durch vorheriges Erhöhen der Auflösung kann die Rundung kleiner ausfallen.