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

如何用FFmpeg实现多张图片连续向左滑动且无黑背景切换?

FFmpeg实现图片连续滑动切换效果(无黑色背景)

当前通过FFmpeg实现单张图片从右侧滑动至居中的效果,所用命令如下:

#slide 1st image from right to center
#countdown 10 seconds
#slide 1st image from center to left and in the same time
#slide 2nd image from right to center
#countdown 10 seconds
#...

ffmpeg -loglevel quiet -loop 1 -i input.png -filter_complex "split=2[bg][slider];[bg]drawbox=c=black:t=fill[bg];[bg][slider]overlay=x='max(W-w*t,0)':y=0" -t 10 -y output.mp4

目前切换图片时存在黑色背景,需要实现前一张图片从居中位置滑向左方的同时,后一张图片从右侧滑至居中的连续滑动效果。

实现思路

要消除切换时的黑色背景,核心是让两张图片在过渡阶段叠加显示,通过滤镜分别控制它们的位置动画,再将静态停留片段和过渡片段按时间线拼接。

多图连续滑动示例命令

以两张图片img1.png和img2.png为例,实现以下流程:

  1. 第一张图从右侧滑入并居中,停留10秒
  2. 第一张图左滑出、第二张图右滑入的过渡(持续1秒)
  3. 第二张图居中停留10秒
ffmpeg -loglevel quiet -loop 1 -i img1.png -loop 1 -i img2.png -filter_complex "
  # 处理第一张图的完整动画:右滑入+停留+左滑出
  [0:v]trim=duration=11,setpts=PTS-STARTPTS[img1_full];
  [img1_full]split=2[img1_static][img1_slide_out];
  [img1_static]trim=0:10[img1_stay];
  [img1_slide_out]trim=10:11,setpts=PTS-STARTPTS,
    overlay=x='(W-w)/2 - (W-w)*t':y=0[img1_left_slide];

  # 处理第二张图的完整动画:右滑入+停留
  [1:v]trim=duration=11,setpts=PTS-STARTPTS[img2_full];
  [img2_full]split=2[img2_slide_in][img2_static];
  [img2_slide_in]trim=0:1,setpts=PTS-STARTPTS,
    overlay=x='W - w*t':y=0[img2_right_slide];
  [img2_static]trim=1:11[img2_stay];

  # 按顺序拼接所有片段
  [img1_stay][img1_left_slide][img2_right_slide][img2_stay]concat=n=4:v=1:a=0[v]
" -map "[v]" -y output.mp4

关键参数说明

  • trim+setpts:截取不同时间段的片段并重置时间戳,保证动画时间线正常
  • overlay位置表达式:
    • 第一张图左滑:x='(W-w)/2 - (W-w)*t',从居中位置开始,1秒内完全滑出屏幕左侧
    • 第二张图右滑入:x='W - w*t',从屏幕右侧外开始,1秒内移动到居中位置
  • concat滤镜:将静态停留和过渡片段按顺序拼接,实现无间断的连续效果

如果需要添加更多图片循环切换,只需按照相同逻辑扩展对应图片的处理分支,再调整concat的输入片段数量即可。

内容的提问来源于stack exchange,提问作者mikezang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:14:53