filterFFmpeg的滤镜模块AVFilter是一种以管道的方式对音视频进行滤镜(filter)操作以添加特效功能的框架(filter翻译为过滤器更为合适,下面统一以“过滤器”为准)
原始的音频帧(如PCM)或视频帧(如YUV,RGB等)经过filter处理后,得到具有特殊效果的音频帧或视频帧,比如添加旋转、缩放、降噪效果的视频帧,添加回声效果、重采样、音量大小调节后的音频帧等
FFmpeg的libavfilter库内置了非常丰富的过滤器,从官方网站上可以看到audio filters有116个,video filters高达288个,在内置filter不满足需求时还可以自定义filter
http://ffmpeg.org/ffmpeg-filters.html
filter graphs
filter可以单独使用,也可以多个filter形成filter chain,filter chain形成filter graph,过滤器图可以划分为simple和complex
Simple filtergraphs
simple filtergraphs是指只有一个输入和一个输出,且两者都是同一个类型,即只能为音频filter或者只能为视频filter
语法要点
// -vf: 视频filter
// -af: 音频filter
// 多个filter形成链时, 用逗号分隔, filter的参数用冒号分隔
filter1,filter2,...,filterN
举例如下:
单个filter处理
ffmpeg -i oceans.mp4 -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5 out.mp4
上述命令将对输入视频用线宽为2的白色线画一个3×3的网格
多个filter处理
ffmpeg -i oceans.mp4 -vf drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5,scale=w=iw/2:h=ih/2 out.mp4
上述命令先将输入视频用线宽为2的白色线画一个3×3的网格作为中间输出,然后作为scale过滤器的输入执行w/h减半的处理,最终输出out.mp4
每个过滤器需要传哪些参数可以参考官方文档,也可以用如下命令进行查询ffmpeg -h filter=filter_name比如上面的drawgrid过滤器
Complex filtergraphs
complex filtergraphs是指不能简单的描述为应用于一个流的线性处理链,即当图形中有多个输入/输出,或者输出流类型与输入不同
语法要点:
相同filter线性链之间用逗号分隔;
不同filter线性链之间用分号分隔;
[in_link_N]、[out_link_N]: 用来标识输入输出的标签
举例如下
/**
* input -> split ------[main]------> overlay -> output
| |
[tmp] [flip]
| |
+ ---> crop ---> vflip ----+
*
*/
命令为
ffmpeg -i oceans.mp4 -vf "split[main][tmp];[tmp]crop=iw:ih/2:0:0,vflip[flip];[main][flip]overlay=0:H/2" -b:v 3859k out.mp4
上述命令先将输入文件经过split过滤器,输出main和tmp;
tmp依次经过crop过滤器和vflip过滤器,输出为flip;
main和flip输入overlay过滤器输出out文件
~~END~~进技术交流群加:wxid_alaiye 作者:雪月清
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。