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

如何使用FFmpeg实现每5秒或4秒周期性缩放视频且避免音频卡顿

如何使用FFmpeg实现每5秒或4秒周期性缩放视频且避免音频卡顿

嘿,这个需求我之前帮不少人搞定过,用FFmpeg完全能实现,还能保证音频一点都不卡顿——核心就是用滤镜链精准控制缩放的周期,同时好好处理音频流就行,咱一步步来:

核心思路

首先,我们用FFmpeg的scale滤镜配合时间表达式来实现周期性缩放,同时直接复制原音频流(不重新编码),这样绝对不会出现音频卡顿的问题——因为原音频的时间戳和内容完全保留,和视频流完美同步。

实现每5秒周期性缩放(5秒放大,5秒还原)

直接用这条命令就行:

ffmpeg -i input.mp4 -filter_complex "[0:v]scale='if(gte(mod(t,10),5),iw*1.5,iw)':ih,setsar=1[v]" -map "[v]" -map 0:a -c:a copy output_5s.mp4

我给你拆解下每个部分:

  • mod(t,10):计算当前视频时间t除以10的余数,这样就把时间分成了每10秒一个循环
  • if(gte(mod(t,10),5),iw*1.5,iw):如果余数≥5,就把视频宽度放大1.5倍(高度会自动按原比例调整);否则保持原宽度
  • setsar=1:强制像素比例为1:1,避免视频变形
  • -c:a copy:关键!直接复制原音频流,不做任何编码处理,从根源上避免音频卡顿

实现每4秒周期性缩放(4秒放大,4秒还原)

只需要把时间周期改成8秒就行,命令如下:

ffmpeg -i input.mp4 -filter_complex "[0:v]scale='if(gte(mod(t,8),4),iw*1.5,iw)':ih,setsar=1[v]" -map "[v]" -map 0:a -c:a copy output_4s.mp4

进阶:平滑缩放过渡(避免突然切换的生硬感)

如果不想让缩放突然跳变,想要平滑的过渡效果,可以用smoothstep函数实现渐变缩放,比如每5秒的平滑版本:

ffmpeg -i input.mp4 -filter_complex "[0:v]scale='iw*(1 + 0.5*smoothstep(mod(t,10),4,5))':ih,setsar=1[v]" -map "[v]" -map 0:a -c:a copy output_smooth_5s.mp4

这个命令会在第4-5秒之间让视频从原尺寸平滑放大到1.5倍,第9-10秒再平滑缩回去,整个过程非常自然,音频依然保持完美同步。

小提示

  • 你可以把iw*1.5改成任意你想要的缩放倍数,比如iw*2就是放大2倍,iw*0.8就是缩小到80%
  • 如果你的视频有特殊的像素比例,setsar=1可以换成setsar=sar来保留原像素比例,避免变形

备注:内容来源于stack exchange,提问作者lucinda alaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:37:37