如何为FFmpeg的drawtext滤镜添加文字缩放(放大/缩小)效果?
使用FFmpeg drawtext滤镜实现文字缩放动画的命令示例
嘿,我来给你捋清楚怎么用FFmpeg的drawtext滤镜做出文字放大缩小的动态效果~核心是靠fontsize参数结合FFmpeg的表达式功能,让字体大小随时间自动变化,下面给你几个实用的例子:
基础循环缩放效果
这个命令会让文字在指定范围内循环放大缩小,适合做重复的动画:
ffmpeg -i input.mp4 -vf "drawtext=text='你的文字内容':x=(w-text_w)/2:y=(h-text_h)/2:fontsize='50+30*sin(2*PI*t/5)':fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2" -c:a copy output.mp4
参数解释:
fontsize='50+30*sin(2*PI*t/5)':这是动画核心:t代表当前时间(单位:秒)sin(2*PI*t/5)让数值在-1到1之间循环,5表示每5秒完成一次完整的缩放循环(从原尺寸→放大→缩小→原尺寸),你可以改成自己想要的周期时长50是基础字体大小,30是缩放幅度,最终字体大小会在20(50-30)到80(50+30)之间变化,按需调整这两个数值即可
x=(w-text_w)/2:y=(h-text_h)/2:让文字始终居中,避免缩放时偏移出画面fontcolor、shadowcolor等是美化参数,你可以根据需求修改颜色、阴影大小
单次放大/缩小效果
如果想要文字只放大一次然后保持尺寸,或者只缩小一次,用这个命令:
# 前3秒从50放大到100,之后保持100 ffmpeg -i input.mp4 -vf "drawtext=text='你的文字内容':x=(w-text_w)/2:y=(h-text_h)/2:fontsize='if(lt(t,3), 50+50*t/3, 100)':fontcolor=white" -c:a copy output.mp4
参数解释:
if(lt(t,3), 50+50*t/3, 100):意思是当时间t小于3秒时,字体大小从50线性增加到100;3秒后固定为100- 要是想做单次缩小效果,把表达式改成
if(lt(t,3), 100-50*t/3, 50)即可,前3秒从100缩小到50,之后保持50
内容的提问来源于stack exchange,提问作者testaccount wizorbit
相关产品推荐
相关产品推荐

