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

FFmpeg使用drawtext滤镜时新绘制文字覆盖旧内容如何解决

问题原因
  • 核心问题出在drawtext滤镜的enable参数生效区间设置错误:你为第一个字母设置的生效范围仅为011秒、第二个为1122秒、第三个为22~33秒。超过对应区间后,该条drawtext就不会再向画面绘制内容,因此后续时间段仅会渲染当前生效的单条字母,看起来就是后面的字母覆盖了前面的内容,和[in][out]标记无关。
解决思路

方案1:调整enable生效区间(适配现有写法)

将每个字母的enable结束时间统一设置为总时长(此处为33秒),保证字母从出现时间点开始就一直保留在画面上,修改后的命令如下:

ffmpeg.exe -i ffmpeg_inputs/zheltiy_chelik.mp4  -vf "[in]drawtext=fonts/Temporarium.otf:text='r':fontcolor=orange:fontsize=100:x=(w-text_w)/2+0:y=0:enable='between(t,0, 33)', drawtext=fonts/Temporarium.otf:text='r':fontcolor=orange:fontsize=100:x=(w-text_w)/2+20:y=0:enable='between(t,11, 33)', drawtext=fonts/Temporarium.otf:text='r':fontcolor=orange:fontsize=100:x=(w-text_w)/2+40:y=0:enable='between(t,22, 33)'[out]" ffmpeg_outputs/test2.mp4 -y

方案2:动态文本表达式写法(适配长单词更简洁)

如果要拼接的单词较长,可以通过单条drawtext配合时间表达式动态输出文本,不需要重复写多条滤镜,也无需手动计算每个字母的偏移量:

ffmpeg.exe -i ffmpeg_inputs/zheltiy_chelik.mp4 -vf "drawtext=fontfile=fonts/Temporarium.otf:text='%{if:gte(t,0):r}%{if:gte(t,11):r}%{if:gte(t,22):r}':fontcolor=orange:fontsize=100:x=(w-text_w)/2:y=0" ffmpeg_outputs/test2.mp4 -y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:39:01