You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用FFmpeg实现视频从1.0缩放到0.1至单个点?

问题分析与解决方案

原命令的核心错误

  1. 缩放逻辑完全颠倒:你写的zoom表达式if(lte(zoom,0.1),1.0,max(1.001,zoom-0.01))会先把画面放大到1.001,之后每次减0.01,降到0.1后立刻重置回1.0,变成循环放大缩小,根本不是持续缩到0.1的效果。
  2. 帧率与时长冲突:你指定了输出帧率-r 60,但没统一输入帧率,再加上zoompan的d=1参数,导致原视频帧和输出帧不匹配,出现丢帧或时长异常;-t 3强制截断时长,进一步打乱了帧的正常生成。
  3. 多余缩放导致拉伸:先scale=2560:2560再用-s 1280x1280二次缩放,如果原视频不是正方形,必然会拉伸画面。

正确实现方案

方案1:用zoompan实现(推荐)

直接通过线性表达式控制缩放比例,统一帧率后生成目标视频:

ffmpeg -i e:/gals/1/logo_3s.mp4 -vf "fps=60,zoompan=z='1.0 - 0.9*(t/3)':d=1:w=1280:h=1280:x='(iw - iw/zoom)/2':y='(ih - ih/zoom)/2'" -b:v 3000k -t 3 e:/gals/1/loop_z.mp4
  • fps=60:先把原视频帧率统一到60,避免帧不匹配问题。
  • z='1.0 - 0.9*(t/3)':t是当前时间(秒),3秒时刚好从1.0线性降到0.1,完全符合你的需求。
  • w=1280:h=1280:直接指定输出尺寸,缩放后画面自动居中,周围填充黑背景。
  • x和y的表达式确保缩放后的画面始终居中。

方案2:用scale+pad实现(更直观)

先动态缩放画面,再补黑背景到目标尺寸:

ffmpeg -i e:/gals/1/logo_3s.mp4 -vf "fps=60,scale='iw*(1.0 - 0.9*(t/3))':'ih*(1.0 - 0.9*(t/3))',pad=1280:1280:(ow-iw)/2:(oh-ih)/2" -b:v 3000k -t 3 e:/gals/1/loop_z.mp4
  • scale的参数用时间表达式控制宽高按比例缩小,保持原画面比例。
  • pad将缩放后的画面居中,补黑背景到1280x1280。

注意事项

  • 如果原视频的像素宽高比(SAR)不是1:1,可在fps滤镜后加setsar=1:1,避免画面变形。
  • 若要调整缩放的快慢,修改表达式中的0.9(总缩放幅度)或t/3中的3(总时长)即可。

内容的提问来源于stack exchange,提问作者Peter.k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:43:20