1、FFmpeg过滤器简介
FFmpeg filter 提供了很多音视频特效处理功能,比如视频缩放、截取、翻转、叠加等。
FFmpeg有很多已经实现好的滤波器,这些滤波器的实现位于libavfilter目录之下,用户需要可以调用这些滤波器实现滤波。
我们可以通过ffmpeg -filters命令查看FFmpeg支持的过滤器。FFmpeg常用的filter包括:
scale:视频/图像的缩放;
overlay:视频/图片的叠加;
crop:视频/图像的裁剪;
trim:截取视频的片段;
rotate:以任意⻆度旋转视频
movie:加载第三方的视频;
yadif:去隔行。
使用示例(对视频的宽和高减半):ffmpeg -i input -vf scale=iw/2:ih/2 output
2、过滤器使用方法
ffmpeg的filter用起来是和Gstreamer的plugin是一样的概念,通过avfilter_link,将各个创建好的filter按自己想要的次序链接到一起,然后avfilter_graph_config之后,就可以正常使用。
FFmpeg的filter包含3个层次:filter -> filterchain -> filtergraph
filtergraph可以用文本形式表示,可以作为ffmpeg中的 -filter/-vf/-af和-filter_complex 选项以及ffplay中的- vf/-af 和libavfilter/avfilter.h中定义的avfilter_graph_parse2()函数的参数。
示例”把视频的上部分镜像到下半部分“ , 流程如下:
(1)使用 split filter 将输入流分割为两个流 [main] 和 [temp];
(2)其中一个流[temp]通过crop filter把下半部分裁剪掉;
(3)步骤2中的输出再经过vflip filter对视频进行垂直翻转,输出[flip];
(4)把步骤3中输出[flip]叠加到[main]的下半部分。
这个流程可以编程实现,也可以使用命令实现。命令实现如下:ffmpeg -i INPUT -vf "split main; [tmp] crop=iw:ih/2:0:0, vflip[flip]; main overlay=0:H/2" OUTPUT
处理结果如下:
3、过滤器语法
3.1 filter语法
用一个字符串描述filter的组成:
形式:[in_link_1]…[in_link_N]filter_name=parameters[out_link_1]…[out_link_M]
★文末名片可以免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
参数:
1)[in_link_N]、[out_link_N]:用来标识输⼊和输出的标签。in_link_N是标签