Chinaunix首页 | 论坛 | 博客
  • 博客访问: 706685
  • 博文数量: 95
  • 博客积分: 1773
  • 博客等级: 上尉
  • 技术积分: 1653
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-17 23:28
文章分类
文章存档

2018年(2)

2017年(10)

2016年(7)

2015年(48)

2014年(2)

2013年(2)

2012年(2)

2011年(7)

2010年(7)

2009年(3)

2008年(1)

2007年(4)

分类: 其他平台

2015-07-20 08:52:46

滤镜入门

FFmpeg通过libavfilter库实现滤镜功能。

libavfilter中,一个滤镜可以有多个输入和多个输出。为了尽可能介绍清楚,我们假定有下面的滤镜链图。

 [main]
input --> split ---------------------> overlay --> output
        |                             ^
        |[tmp]                  [flip]|
        +-----> crop --> vflip -------+ 

在这个滤镜链图中,利用split滤镜把输入流分离成了两路流,其中一路通过crop滤镜和vfilp滤镜的同一路级联应用,再同另外一路一起通过overlay滤镜处理的流合成进行输出。则可以采用如下的命令行实现:

ffmpeg  -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT 

这样最终输出将是视频上部是原始,下部是上部的镜像。(倒影效果)

同一路的滤镜间用逗号(',')进行分割,不同路的滤镜间用分号(';')进行分割。在这个例子里面cropvflip是在同一路中的滤镜,splitoverlay则不是同一路的(同一路的级联是对连续的视频进行,如果涉及到一输多、多输一或者多输多则都不是在同一路的,即不是同一路级联)。可以通过在方括号('[]')中的标签名来命名处理的链路。这个例子里,split滤镜生成了两路就通过[main][tmp]进行了标签命名以方便后续处理。

其中被split处理输出的第二路流被命名为[tmp],它又被crop滤镜处理裁去下半部视频,然后通过vflip进行了水平镜像(垂直翻转,即把视频镜像到下半部了)。这是整个输出被命名为flip。再把[main]flip通过overlay进行覆盖合成,即把源输入通过split滤镜获得的[main]的上半部分覆盖到由cropvflip滤镜级联处理的输出(这里的[flip])上最终得到了镜像结果。

一些滤镜支持参数列表: 滤镜名=由冒号(':')隔开的多个参数

还存在所谓的源过滤器(即没有输入音频/视频 的过滤器),以及槽过滤器(即没有任何音频/视频 输出的过滤器)

阅读(2126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~