滤镜
什么是滤镜?百度百科介绍说“滤镜主要是用来实现图像的各种特殊效果......”。
在ffmpeg是如何转码的一文中了解过滤镜,来回顾下当时的转码流程图。
从图中可以看到滤镜前后画的是虚线,表示可有可无,在术语中,滤镜指的是在编码之前针对解码器解码出来的原始数据(即音视频帧)进行处理的动作,我们还可以称它为过滤器。
ffmpeg内置了大概近400种滤镜,我们可以用 ffmpeg -filters 命令查看所有的滤镜,也可以用命令 ffmpeg -h filter=xxx 或者查看官方文档了解每一种滤镜。
实际在大部分音视频的处理过程中都离不开滤镜,所以你应该能明白其重要性。
多个滤镜可以结合在一起使用形成滤镜链或者滤镜图,在每一个滤镜中,不仅可以对输入源进行处理,A滤镜处理好的结果还可以作为B滤镜的输入参数,通过B滤镜继续处理。
针对滤镜的处理,ffmpeg提供了两种处理方式,简单滤镜和复杂滤镜。
简单滤镜
简单滤镜指的是只有一个输入和输出,而且保证输入和输出的流类型相同。
在流的操作(二)如何选择流?末尾提到的把原视频 r3.mp4 等比例缩放一倍
ffmpeg -i r3.mp4 -vf scale=272:480 -y filter.mp4
-vf 是 -filter:v 的简写,类似的我们还可以使用 -filter:a 或者 -af 针对音频流做处理。
-filter的语法规则:-filter[:stream_specifier] filtergraph (output,per-stream) stream_specifier流的类型我们一般用a表示音频,v表示视频,filtergraph表示具体的滤镜,这里用的是scale滤镜。
scale滤镜用于调整视频的大小,比如等比例缩放、等比例放大,不做等比例操作输出就变形了,变形结果我们一般不考虑。
因为我们知道原视频 r1ori.mp4 的分辨率是 544x960,所以等比例缩放一倍,上面的命令直接指定了 272x480,scale滤镜自带很多参数,我们介绍几个常用的。
in_w in_h 或者 iw ih 表示输入视频的宽高 out_w out_h 或者 ow oh 表示输出视频的宽高
当然不一定是视频,输入输出也可以是图片。
所以原视频缩放一倍我们还可以这样写: