ffmpeg动态缩小视频(挤压)或缩小到比原始尺寸小

Sam*_*Sam 4 video animation ffmpeg dynamic scale

我有 2 个视频,我试图将一个视频叠加在另一个视频之上,并使其以动画方式缩小,直到它看起来像画中画设置。然后,几秒钟后,它应该会缩小。

这就是我想要实现的目标(这些将是视频而不是图像): 在此输入图像描述

这是我能得到的最接近的结果,但至关重要的是,缩放“向外”(而不是“向内”)似乎不起作用;所以,当然,这是行不通的

ffmpeg -i bg.mov -i top.mov -filter_complex "[0:v]zoompan=z='pzoom-0.1':d=1, setpts=PTS-STARTPTS[top]; [1:v]setpts=PTS-STARTPTS+2/TB, scale=1920x1080, format=yuva420p,colorchannelmixer=aa=1.0[bottom]; [top][bottom]overlay=shortest=0" -vcodec libx264 out.mp4

这可以用 ffmpeg 实现吗?

Gya*_*yan 5

使用带动画的比例滤镜(自 v4.3 起可用)。

这里有一些可以帮助您入门的东西。这将在 2 秒内将顶层从 480 像素高度扩展到 1080 像素,然后在 2 秒内返回到 480 像素。

ffmpeg -i bg.mov -i top.mov -filter_complex "[0:v]scale=1920x1080,setpts=PTS-STARTPTS[bg]; [1:v]setpts=PTS-STARTPTS+2/TB, scale=-1:'480+600*abs(sin((t-2)*2*PI/8))':eval=frame[top]; [bg][top]overlay" -vcodec libx264 out.mp4

  • 这是我得到的地方: ```ffmpeg -i bg.mov -i top.mov -filter_complex "[1:v]scale=1920x1080,setpts=PTS-STARTPTS[bg]; [0:v]setpts=PTS -STARTPTS,比例=-1:'if(lte(t,2),ih,if(之间(t,2,3),ih-ih*.475*abs(sin((t-2)*4* PI/8)),if(之间(t,3,9),ih-ih*.475,if(lte(t,10),ih-ih*.475*abs(sin((t-2)* 4*PI/8)))))':eval=frame[top]; [bg][top]overlay=y=(main_h-overlay_h)*.15" -vcodec libx264 out.mp4``` 这是基本上完全按照我想要的行为进行,但有一个例外:“overlay y=(main_h-overlay_h)*.15”似乎使动画有点紧张,大概是由于舍入所致。有任何解决这个问题的方法吗? (2认同)