ffmpeg里的过滤器功能是通过libavfilter库实现的。
在libavfilter中,一个过滤器可以有多个输入或多个输出。为了说明可能的情景,我们先看下面的示意图。
如图所示,input流通过split复制成两个流([main],[tmp]),然后其中一个通过crop和vflip过滤器,在合并前与另一个流叠加。你可以使用下面的命令来实现这一目标:
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
该命令处理后,视频的图像变成上半部分的镜像效果。例如:
在同一个线性链的过滤器用逗号分隔,不用的线性链用分号分离。
在上面的例子中,crop和vflip在同一个线性链中,而split和overlay分开在另一个。
在线性链的交汇处使用了标签,用方括号标识。
在上面的例子里,split过滤器生成两个输出,分别用标签[main]和[tmp]标识。名为[tmp]的流先经过crop的处理,剪切掉下半部分图像,然后通过vflip将图像翻转。overlay将标签为[flip]的流(经过crop和vflip处理)叠加到未经处理的流[main]的下半部分。
一些过滤器在输入一个参数列表:他们指定过滤器的名字和一个等号后,并由冒号分开。
存在所谓的源过滤器,没有一个音频/视频输入,和水槽过滤器没有音频/视频输出。
时间: 2024-11-11 06:30:20