ffmpeg でビデオ上で(オーバーレイされた)画像を移動しながらトリミングするにはどうすればよいですか?

ffmpeg でビデオ上で(オーバーレイされた)画像を移動しながらトリミングするにはどうすればよいですか?

画像を移動しながら切り抜きたいです。変換効果を出すには、切り抜き部分を時間に合わせて動かす必要があります。次のコマンドを試しました。

   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

しかし、切り抜きは固定されたままです。画像なので切り抜きのタイムスタンプが機能しないのだと思います。解決策が見つからないのですが、助けてもらえますか?

ここに画像の説明を入力してください

答え1

フィルターを使用する代わりにmovieimage.jpg2 番目の入力として追加し、-rフレームレートを設定するために追加することもできます。

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

のフレームレート(繰り返しレート)を定義しimage.jpg、タイムスタンプの問題を解決します。


更新されたコマンドライン:

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

関連情報