You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用FFmpeg的drawtext滤镜实现文字从右侧滑动至指定位置后静止的效果

如何使用FFmpeg的drawtext滤镜实现文字从右侧滑动至指定位置后静止的效果

咱们可以通过FFmpeg的drawtext滤镜结合动态表达式,轻松实现你想要的“滑动1秒后静止”的文字效果,核心是用条件判断来控制x坐标的变化,完全适配不同帧率和视频分辨率。

核心思路

文字的显示逻辑分为两个阶段:

  • 滑动阶段:在文字开始显示的前1秒内,从屏幕右侧完全不可见的位置,匀速滑动到你指定的目标X位置
  • 静止阶段:滑动完成后,文字固定在目标X位置,直到显示时间段结束

Y坐标保持你预先计算好的固定值即可。

具体命令示例

假设你的需求是:文字在10-15秒显示,前1秒从右侧滑到屏幕中心(目标X位置),之后静止。视频分辨率为900x1600,目标Y位置为你计算好的target_y,可以用下面的命令:

ffmpeg -i input.mp4 -vf "drawtext=text='你的文字内容':fontsize=24:fontcolor=white:y=target_y:x='if(t - 10 < 1, 900 + text_w - (900 + text_w - (900 - text_w)/2)*(t - 10)/1, (900 - text_w)/2)':enable='between(t,10,15)'" -c:a copy output.mp4

命令参数详解

咱们拆解一下关键部分:

  1. x坐标的动态表达式

    • t - 10 < 1:判断当前时间是否处于文字开始显示后的1秒内(10是文字开始显示的时间)
    • 900 + text_w:文字的初始X位置,让文字完全处于屏幕右侧外(900是视频宽度),确保一开始看不到
    • (900 + text_w - (900 - text_w)/2)*(t - 10)/1:线性计算滑动的距离,1秒内从初始位置匀速移动到屏幕中心((900 - text_w)/2是屏幕中心的X坐标,自动减去文字宽度避免文字偏右)
    • 当超过1秒后,x直接固定为目标位置(900 - text_w)/2
  2. enable参数enable='between(t,10,15)' 确保文字只在10-15秒这个时间段内显示

  3. 适配不同场景

    • 如果你的目标X位置不是中心,把(900 - text_w)/2换成你预先计算好的target_x即可
    • 要适配不同分辨率,把900换成内置变量w(代表视频宽度),比如:
      x='if(t - 10 < 1, w + text_w - (w + text_w - target_x)*(t - 10)/1, target_x)'
      
    • 换其他显示时间段(比如12-25秒),只需要把10换成开始时间12,enable参数改成between(t,12,25)就行

注意事项

  • text_w是drawtext滤镜的内置变量,会自动计算当前文字的宽度,不用手动输入
  • 帧率不用额外适配,因为表达式里的t是基于秒的时间,FFmpeg会自动处理不同帧率的视频

备注:内容来源于stack exchange,提问作者Smith Kumar

火山引擎 最新活动