Wie schneidet man ein (überlagertes) Bild zu, indem man es in ffmpeg über ein Video verschiebt?

Wie schneidet man ein (überlagertes) Bild zu, indem man es in ffmpeg über ein Video verschiebt?

Ich möchte ein bewegtes Bild zuschneiden. Der Zuschnitt muss sich mit der Zeit bewegen, um einen Translationseffekt zu erzielen. Ich habe es mit folgendem Befehl versucht:

   ffmpeg -y -i video.mp4 -filter_complex "movie=filename=image.jpg:loop=1[pip:v];[pip:v]trim=start=0.0:duration=5,setpts=PTS-STARTPTS+0/TB[pip:v];[pip:v]scale='if(gte(ih,iw),384,-1):if(gte(ih,iw),-1,216)',crop=384:216:exact=1[pip:v];[pip:v]scale=iw*(1.3):ih*(1.3)[pip:v];[pip:v]crop=384:216:-(in_w-out_w)*(t-(5))/5:0[pip:v];[0:v][pip:v]overlay=main_w-overlay_w-33.333332:main_h-overlay_h-33.333332:enable='between(t,0,0+5)'[outv]" -map [outv] -preset ultrafast -r 29.97 output.mp4

Aber der Zuschnitt bleibt unverändert. Ich glaube, der Zuschnitt-Zeitstempel funktioniert nicht, weil es sich um ein Bild handelt. Ich kann die Lösung nicht finden, können Sie mir helfen?

Bildbeschreibung hier eingeben

Antwort1

Anstatt den movieFilter zu verwenden, können Sie image.jpgals zweiten Input Folgendes hinzufügen und -rzum Einstellen der Bildrate hinzufügen:

ffmpeg -y -i video.mp4 -r 29.97 -loop 1 -i image.jpg...

Es definiert die Bildrate (Wiederholungsrate) von image.jpgund löst das Zeitstempelproblem.


Aktualisierte Befehlszeile:

ffmpeg -y -i video.mp4 -r 29.97 -loop 1 -i image.jpg -filter_complex "[1:v]trim=start=0.0:duration=5,setpts=PTS-STARTPTS+0/TB[pip:v];[pip:v]scale='if(gte(ih,iw),384,-1):if(gte(ih,iw),-1,216)',crop=384:216:exact=1[pip:v];[pip:v]scale=iw*(1.3):ih*(1.3)[pip:v];[pip:v]crop=384:216:-(in_w-out_w)*(t-(5))/5:0[pip:v];[0:v][pip:v]overlay=main_w-overlay_w-33.333332:main_h-overlay_h-33.333332:enable='between(t,0,0+5)':format=yuv444[outv]" -map [outv] -preset ultrafast -r 29.97 output.mp4

verwandte Informationen