FFMPEG 图像到视频 zoompan 起始位置

FFMPEG Image to video zoompan starting position

在用图像创建 mp4 幻灯片时,我已经在线获取了一些 zoompan 示例,但我仍然没有完全掌握如何使它们从图像中的特定位置开始。这是典型的命令:

ffmpeg -i image-000.jpg -filter_complex "color=c=black:r=60:s=1920x1080[demo];[0:v]format=pix_fmts=yuva420p,scale=8000:-1,zoompan=z='min(zoom+0.0005,1.2)':s=2000x1333:d=360:x='if(gte(zoom,0.9),x,x+1/a)':y='if(gte(zoom,0.9),y,y+1)',fade=in:0:25:alpha=1,setpts=PTS-STARTPTS+0.0/TB[v0];[demo][v0]overlay=format=yuv420" -t 6 -c:v libx264 -y out000.mp4

我使用的照片的纵横比通常为 3x2 或 4x3,因此我知道它们必须在 16x9 视频的某处被剪掉。上面的代码(以及许多其他 "Ken Burns effect" 示例)的问题是它们从图像的底部被截断开始,然后放大或缩小,从不显示底部。

如何让动画在图像的下方开始播放? 我在 y='...' 部分所做的任何事情都不会影响它。甚至不输入 0 到 100000 之间的常数,而不是调整该公式中的值 y='if(gte(zoom,0.9),y,y+1)'.

注意:我对原始图像使用 croppad 取得了一些成功,但我更想了解如何图像内部更好的位置 zoompan。

由于缩放永远不会小于 1,因此在 expr 'if(gte(zoom,0.9),x,x+1/a) 中,gte(zoom,0.9) 将始终为真,并且 expr 的计算结果将始终为 x。 x 初始化为 0,因此 expr 的计算结果始终为 0。与 y expr 相同。

使用

y='if(on,y-1,ih-ih/zoom)

从下往上开始动画。 on是输出帧数,从零开始,所以第一帧设置在底部,然后每帧向上移动一个像素。