FFmpeg动效实践与探索(文字方框的同步展开及收缩)

在这里插入图片描述

当你看到这样的动图时,你会想到这是用FFmpeg做出来的吗?

FFmpeg,作为一款强大的视频编辑处理工具,在基础的视频处理上十分可靠,在音视频编解码上大放异彩,那么它在动态效果上的应用怎么样呢,笔者为此做了一定的实践,踩了不少坑,现将FFmpeg文字方框动效实现的工作总结如下。

下文将按照实现最终动效的探索顺序一步一步展示。

1、文字淡入淡出

首先要实现的第一个动效是:文字淡入淡出
经过查询,可以用fade函数来控制文字的淡入淡出,用enable来控制时间。

话不多说,直接上案例代码:

ffmpeg -i test.mp4 -lavfi "drawtext=text='Summer Video':fontsize=40:box=1:x=w/2:y=h/2:enable='between(t,8,15)',fade=t=in:start_time=8:d=1:alpha=1,fade=t=out:start_time=14.5:d=1:alpha=1[fg];[0][fg]overlay=format=auto,format=yuv420p" -c:a copy output2.mp4

tips及小坑:

  • “-lavfi” 等价于 “-filter_complex”
  • -y无条件覆盖之前的输出
  • -c:a copy对音频可以不用编码所以直接复制比较快
  • fade函数的alpha必须等于1,否则会黑屏

2、向上向下擦除效果

要实现向上向下擦除效果,目前ffmpeg并没有特定的滤镜实现,因此只能曲线救国,通过控制x,y与时间戳t参数的计算公式的方式去实现。具体代码如下:

ffmpeg -i test.mp4 -lavfi "drawtext=text='Summer Video':fontsize=50:box=1:boxcolor=white:alpha=0.5:x=(w-tw)/2:y='if(lte(t,9),(h-th)/2+(t-9)*30,if(gte(t,14),(h-th)/2+(t-14)*30,(h-th)/2))':enable='between(t,8,15)',fade=t=in:start_time=8:d=1:alpha=1,fade=t=out:start_time=14:d=1:alpha=1[fg];[0][fg]overlay,format=yuv420p" -c:a copy output2.mp4

通过写x,y与t的表达式,可以人工去制造x,y的动态变化,同时从此例可以看到,ffmpeg的if语法以及lte,gte函数的使用。

3、背景框+文字

如果想要背景框和文字一起出现,那么可以用以下代码实现:

ffmpeg -i test.mp4 -filter_complex "drawbox=(iw-w)/2:(ih-h)/2:360:100:[email protected]:t=fill:enable='between(t,8,15)',drawtext=text='Summer Video':fontsize=50:x=(w-tw)/2:y='if(lte(t,9),(h-th)/2+(t-9)*30,if(gte(t,14),(h-th)/2+(t-14)*30,(h-th)/2))':enable='between(t,8,15)',fade=t=in:start_time=8:d=1:alpha=1,fade=t=out:start_time=14:d=1:alpha=1[fg];[0][fg]overlay=format=auto,format=yuv420p" -c:a copy output2.mp4
  • T是填充度,表示填充的像素个数 t=fill表示填充
  • Drawbox中iw即为视频输入画面的宽度,所以中心位置应该为:
  • x=(iw-w)/2:y=(ih-h)/2:w=360:100(视频尺寸为1280*720)
  • 注意:单独使用drawtext时要记得在drawtext=后加上双引号“
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值