FFMPEG 的 zoompan 文档https://ffmpeg.org/ffmpeg-filters.html#Examples-89说
放大至 1.5 倍并同时平移到图片中心附近的某个位置:
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
放大至 1.5 倍并始终平移至图片中心:
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
我尝试了这两个选项,但仍然对缩放效果不满意。我可以看到一些震动问题当它缩放时。
想知道是否有更好的方法来实现这一点。我想将图像(16:9 比例)放大到中心位置约 XX 秒下面是我的相同代码
ffmpeg -r 25 -i image.png -filter_complex "zoompan=z='min(zoom+0.0032,5)':d=125:x='iw/1.7777-(iw/zoom/1.7777)':y='ih/1.7777-(ih/zoom/1.7777)'" -shortest -pix_fmt yuv420p -c:v libx264 image_output.mp4
答案1
我遇到了同样的问题得到了一个非常有效的答案。关键是在应用缩放滤镜之前先放大图像。然后可以缩小到所需的分辨率。
以下放大 10 倍,缩放至中心,然后缩小回 720p(-2
缩放过滤器中的 x 值保持纵横比,即scale=-2:10*ih
)。这几乎消除了抖动:
ffmpeg -r 25 -i LVjYi.jpg -filter_complex "scale=-2:10*ih,zoompan=z='min(zoom+0.0015,1.5)':d=125:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',scale=-2:720" -y -shortest -c:v libx264 image_output.mp4
请注意,初始放大倍数越高,最终的缩放效果就越平滑。将上述效果与仅放大 2 倍的效果进行比较:
ffmpeg -r 25 -i LVjYi.jpg -filter_complex "scale=-2:2*ih,zoompan=z='min(zoom+0.0015,1.5)':d=125:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)',scale=-2:720" -y -shortest -c:v libx264 image_output.mp4
那个还是摇晃的。
答案2
根据以下答案@Timbo White:
这是缩小的方法。我发现这里。不幸的是,我不知道如何停止放大缩小的循环。这是由于if
但我确实花了时间进行搜索,如果没有这个,我认为缩放从 1 开始,而不是从%maxzoom%
(参见下文)。
很多信息都存在于文档- (不适用于缩小)。
这里是批处理语言中的一个简单示例:这是duration
使用100
差异不是很明显,但你可以看到它(我想我应该选择其他值作为示例......)
- 示例 1 放大和缩小
- 速度 0.02
- 最大缩放 2
- 示例2 放大和缩小
- 速度 0.02
- 最大缩放 4
- 示例 3 放大和缩小
- 速度 0.04
- 最大缩放 4
set speed=0.02
set maxzoom=2
set /a out=1
:: Zoom in
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='min(zoom+%speed%,%maxzoom%)':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_in_%out%.mp4
:: Zoom out
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='if(lte(zoom, 1),%maxzoom%,max(zoom-%speed%,1))':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_out_%out%.mp4
:: -------------------------------------
set speed=0.02
set maxzoom=4
set /a out+=1
:: Zoom in
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='min(zoom+%speed%,%maxzoom%)':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_in_%out%.mp4
:: Zoom out
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='if(lte(zoom,1),%maxzoom%,max(1,zoom-%speed%))':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_out_%out%.mp4
:: -------------------------------------
set speed=0.04
set maxzoom=4
set /a out+=1
:: Zoom in
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='min(zoom+%speed%,%maxzoom%)':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_in_%out%.mp4
:: Zoom out
ffmpeg -r 24 -i ff.png -filter_complex "scale=-2:%maxzoom%*ih,zoompan=z='if(lte(zoom,1),%maxzoom%,max(1,zoom-%speed%))':d=100:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'",scale=-2:ih -y -shortest -c:v libx264 Zoom_out_%out%.mp4