FFMPEG 将图像缩放到中心位置

FFMPEG 将图像缩放到中心位置

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

视频文件:http://sendvid.com/zn6oftiu

答案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
  • 示例 1 速度 0.02 最大缩放 2
    • 放大
      • 在此处输入图片描述
    • 缩小
      • 在此处输入图片描述
  • 示例 2 速度 0.02 最大缩放 4
    • 放大
      • 在此处输入图片描述
    • 缩小
      • 在此处输入图片描述
  • 示例 3 速度 0.04 最大缩放 4
    • 放大
      • 在此处输入图片描述
    • 缩小
      • 在此处输入图片描述

相关内容