FFmpeg經過libavfilter
庫實現濾鏡功能。web
在libavfilter
中,一個濾鏡能夠有多個輸入和多個輸出。爲了儘量介紹清楚,咱們假定有下面的濾鏡鏈圖。命令行
[main] input --> split ---------------------> overlay --> output | ^ |[tmp] [flip]| +-----> crop --> vflip -------+
在這個濾鏡鏈圖中,利用split
濾鏡把輸入流分離成了兩路流,其中一路經過crop
濾鏡和vfilp
濾鏡的同一路級聯應用,再同另一路一塊兒經過overlay
濾鏡處理的流合成進行輸出。則能夠採用以下的命令行實現:code
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]
進行了標籤命名以方便後續處理。ip
其中被split
處理輸出的第二路流被命名爲[tmp]
,它又被crop
濾鏡處理裁去下半部視頻,而後經過vflip
進行了水平鏡像(垂直翻轉,即把視頻鏡像到下半部了)。這是整個輸出被命名爲flip
。再把[main]
與flip
經過overlay
進行覆蓋合成,即把源輸入經過split
濾鏡得到的[main]
的上半部分覆蓋到由crop
和vflip
濾鏡級聯處理的輸出(這裏的[flip]
)上最終獲得了鏡像結果。input
一些濾鏡支持參數列表: 濾鏡名=由冒號(':')隔開的多個參數it
還存在所謂的源過濾器(即沒有輸入音頻/視頻 的過濾器),以及槽過濾器(即沒有任何音頻/視頻 輸出的過濾器)入門