ffmpeg滤镜,滤镜链和滤镜图(以实现视频弹幕为例)

滤镜(Filters):在编码前,对原音视频使用libavfilter库中的滤镜进行处理,FFmpeg内置了许多多媒体过滤器,可以通过多种方式组合它们。

分为两种滤镜:简单滤镜和复合滤镜

简单滤镜:

简单滤镜就是只有1个输入和输出的滤镜,使用-vf和-af分别对应视频和音频

复合滤镜:

复合滤镜就是那些不能简单的描述为一个线性处理过程应用到一个流的情况,例如包含多个输入输出。

复合滤镜使用-filter_complex进行设置

滤镜的使用一般是 滤镜名=由于冒号(:)隔开各个参数

滤镜链图(filtergraphs)是连接滤镜的有向图,它可以包含循环动作,也可以在多个滤镜间形成链路,每个链接都有一个连接到滤镜的输入和一个连接到滤镜的输出

一个滤镜链(filterchains)包含序列链接起来的滤镜,这个序列由“,"分隔各个滤镜

一个滤镜链图(filtergraphs)包含序列滤镜链,这个序列由“;”分隔各个滤镜链

同一路的滤镜间用逗号(,)进行分割,不同路的滤镜间用分号进行分割(;)

例如用在视频中同时加入多个文字和多个图片,使用到多个滤镜就需要使用滤镜链,而指定输入输出标签就形成滤镜链图

ffmpeg -i video.mp4 -i logo.png -i logo1.png -filter_complex  "[1:v]scale=30:30[img1];[2:v]scale=30:30[img2];[0:v][img1]overlay=(main_w-overlay_w)/2+t*100:(main_h-overlay_h)/2[bkg];[bkg][img2]overlay=0:0",drawtext="fontfile=fonts/Medium.ttf:text='hello':fontcolor=white:fontsize=50:x='if(between(t,2,10),150,NAN)':y=120" -y output.mp4

解析:

1.[0:v]指定流 ,0表示第0个文件,v表示操作对象里的视频信息。

2.[img1]是对scale滤镜的处理结果命名标记标签,[0:v][img1]表示将scale缩略处理后的图片覆盖到视频上,类似这个包含链接输入输出标记如[img1]的就组成滤镜链图filtergraphs

3.由于使用overlay添加图片水印,使用drawtext添加文字水印,这个两个滤镜间使用逗号,分割开来,组成一个滤镜链

4.overlay中t*100,表示从x轴以100的速度移动

5.x='if(between(t,2,10),150,NAN)’表示在2,10秒的区间显示字幕。if(条件,条件为true时的值,条件为false时的值)

 

 

 

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值