FFmpeg 濾鏡及其效果


原文地址:https://blog.csdn.net/dangxw_/article/details/49001413

代碼中使用濾鏡參見上一篇博客:http://blog.csdn.net/dangxw_/article/details/48999109。

命令行使用濾鏡參見ffmpeg官網:http://www.ffmpeg.org/ffmpeg-filters.html#Video-Filters。

視頻素材原效果:

1:boxblur  

功能:模糊處理。

接受參數有:

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

另外參數值可以使用:可以使用w,h等變量表達式。

使用舉例:

boxblur=2:1:cr=0:ar=0

 

效果:

 

2: blend 是視頻疊加,在代碼中無法直接使用之前的初始化濾鏡使用,查看過ffmpeg實現之后發現其實現就是歷遍每個yuv值,通過兩個視頻幀的權重來加權疊加。

 

3:colorbalance ,顏色平衡 調整rgb得值權重 分為三個階層  用於調整飽和度和調整顏色偏移值。

接受的參數有:

rs
gs
bs


rm
gm
bm


rh
gh
bh

參數不接受表達式。

使用舉例:

 

colorbalance=rs=.3

解釋:就是降低紅色的權重,使r值乘以0.3,效果上就是使視頻變冷。

 

效果如下:

(藍色加綠色會調出黃色,紅色降低,所以會成為這個效果。)

4,colorlevels

並沒有理解這個所對應的三組參數是什么意思。

但是官網給出使用的例子和效果:

 

  • Make video output darker:
    colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
    
  • Increase contrast:
    colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
    
  • Make video output lighter:
    colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
    
  • Increase brightness:
    colorlevels=romin=0.5:gomin=0.5:bomin=0.5

 

 

5, colorchannelmixer  可以設置rgba四個分量的變換關系,共接受16個參數。

rr
rg
rb
ra

gr
gg
gb
ga

br
bg
bb
ba

ar
ag
ab
aa

參數本質就是加權求值時候的權重,每個參數接受0-1得值,濾鏡本質是將每個顏色值加權求值.公式:
red=red*rr+blue*rb+green*rg+alpha*ra 。green/blue和alpha同理。參數默認值對應得是1,其他為0.如:rr,rg,rb,ra。其中rr默認為1,其他為0。

使用例子:

 

colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3

效果圖:

 

之所以會是灰階效果,原因是將每個顏色分量相等,所以rgb混合后為透明度不同得黑色

褐色處理:

colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131;
任何三個顏色值根據該權重計算后都為不同程度的褐色

效果:

6.crop 裁剪幀,而且可以接受很多變量的表達式,甚至包括幀的下標和時間。

使用舉例:

 

crop=w=100:h=100:x=50:y=50

 

 

7 dctdnoiz 對視頻降噪。

感覺沒有什么作用,因為處理速度太慢了,而且效果不明顯,倒不如加點噪音參生懷舊感。增加噪音在之后中。

 

8 decimate 降幀,實現原理就是按照固定間隔取幀,假如想要實現這個功能,直接在跳過該frame就行了,沒必要拿來過濾鏡。

 

9 deshake 刪除相機抖動帶來的負面影響。

 

10delogo 去除視頻某處的logo。其實實現原理就是將給出區域進行高斯模糊處理。

使用舉例:

 

delogo=x=0:y=0:w=100:h=77:band=10

 

x,y,w,h 構成一個Rect,band是模糊強度。

效果如下:

 

11drawbox 添加邊框。

所接受參數如下:

 

drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max

效果如下:

 

可以將邊框設置成實心的邊框從而達到覆蓋一層遮罩的目的。

 

12:drawgrid 畫網格

給出起始坐標 和 網格的寬高顏色就可以繪畫出一個網格覆蓋在視頻上。

使用舉例:

 

drawgrid=width=100:height=100:thickness=2:color=black@0.9

效果:

 

 

13:drawtext 字幕添加

功能強大,除了設置字體位置等常規參數外還可以設置字體,但是需要擁有字體對應的數據庫。

參數很多,還是看官網吧:

http://www.ffmpeg.org/ffmpeg-filters.html#drawtext-1

 

14 edgedetect 邊緣檢測

感覺這個最好還是當作中間操作來用,因為單純過這個濾鏡並不會有什么美感,但是邊緣檢測卻是實現其他操作的必經之路,比如:油畫效果,動畫片效果等等。

使用舉例:

 

edgedetect=low=0.1:high=0.4

效果:

 

邊緣檢測之后填充油畫效果:

 

15 eq。這個功能很強大,應用也很廣泛,可以用來調整亮度、飽和度、對比度、gama變換。

接受參數:

cantrast :對比度  取值:(-2,2);

brightness:亮度  取值同上。

saturation:飽和度 取值同上。

gama變換參數如下:

gamma
Set the gamma expression. The value must be a float in range 0.1 to 10.0. The default value is "1".


gamma_r
Set the gamma expression for red. The value must be a float in range 0.1 to 10.0. The default value is "1".


gamma_g
Set the gamma expression for green. The value must be a float in range 0.1 to 10.0. The default value is "1".


gamma_b
Set the gamma expression for blue. The value must be a float in range 0.1 to 10.0. The default value is "1".

 

另外還接受幾個變量不一一列舉。

給出調出的幾個效果:

高亮

低對比度

3

高飽和:

gama變換,變冷:

 

16 fade  這個是控制出場和入場時慢慢消失或漸漸顯示的效果的。

所跟參數有:

t  取值為in或out ,就是類型選擇。

s  開始位置,以幀為單位,默認值是0;

n  是描述該動畫會持續多少幀,單位是幀,而不是秒;

st 以秒為單位描述起始位置。

d 也是描述動畫持續多久,但是單位是秒

alpha 透明度的極值;

color  隱藏時補上的顏色,默認是黑色。

使用舉例:

 

fade=in:0:30

意思是 從第0幀開始播放動畫,共持續三十幀。

 

效果(這張圖片是第十幀時候的效果):

17 fieldorder 是用來梳理幀的,可以使視頻變得更加小,測試發現效果並不明顯,當然,梳理效果取決於原視頻的梳理程度。

 

18 format 幀的format的改變,但是壓縮h264和h265時候只接受yuv420p的格式,所以改過之后就不能再拿來壓縮成視頻了。但是假如有某種需要轉換成rgb的需求,可以使用該濾鏡,比如需要使用opencv ,或讓移動端顯示,都只能轉換成rgb格式。該濾鏡和之后要提的scale濾鏡都是使用ffmpeg中swscale 來實現的,其實使用swscale使用起來也很簡單,沒必要用濾鏡實現該功能。

 

19 fps 改變幀率,不知道內部如何實現,但是應該不是單純跳幀這么簡單,因為耗時很久,所以不推薦使用。

 

20 scale  縮放。

使用舉例:

scale=200:200

縮放成200*200 的長寬,假如不符合原比例,會變形,而且scale中的w和h兩個參數接受奇數值(這個我想不通,yuv420格式的長寬怎么能是奇數呢,如果有知道原因的,求告知。)

其中接受很多參數和變量,比較簡單,不在贅述。

效果:

21 framestep  快進,目測實現就是跳幀顯示而已。

 

22 geq  功能特別強大,因為它不僅僅因為它接受的參數眾多,而且表達式也很多,所以可以動態的設置很多東西,甚至可以跟播放進度產生關系,進而達到視頻閃爍的效果。

詳情請看官網:http://www.ffmpeg.org/ffmpeg-filters.html#geq

冷暖分割的效果(僅僅是使用了x變量,使用其他變量會調出更多效果):

geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'   就是根據位置變換該點的rgb的增強和減弱。

效果:

 但是這樣通過表達式確定rgb的用法,通過一幀會消耗很多時間,因為每個幀都要先轉變成rgb再通過表達式對每個點進行變換,變換因為並不是加減而是乘除法,所以會相對而言會消耗時間更多。

還可以不使用變量,調出其他效果,給出浮雕:

geq:format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2

但是相對於frei0r中的emboss 而言效果很差,就是因為前面所提到的原因,所以geq速度很慢。

效果:

算法意思是檢測顏色的跳變,跳變高於一定程度 時候設置其顏色偏移,否則全部設置成深灰也就是石頭的顏色。

 

23  histep  智能優化對比度。

效果:

24 hqdn3d 降噪,提高壓縮,而且速度很快還有效。

 

25 hqx 放大鏡,速度較慢。

其實就是選擇某個區域后調用swscale 縮放。

 

26 hflip  橫向的倒置像素。其實geq也可以實現,算法不用講了,相對較為簡單。另外還有vflip,是縱向的倒置。

效果:

 

27 hue  其中最根本的是h這個參數但是並沒有搞懂是什么意思,個人感覺功能很強大,給出幾個官網所列出的使用方法和效果。

 

可以和時間和當前幀下標產生函數關系,達到閃光燈的效果。

 

28 il:就是將視頻復制然后同屏顯示。

效果:

提供多種顯示模式,更改后可以這樣:

29:inflate 就是將幀和之后的幀按行切割,然后交錯組成新的幀,同時也會使總幀數縮短相應的倍數。

顯示格式如下:

 

   Original        Original             New Frame
   Frame 'j'      Frame 'j+1'             (tff)
  ==========      ===========       ==================
    Line 0  -------------------->    Frame 'j' Line 0
    Line 1          Line 1  ---->   Frame 'j+1' Line 1
    Line 2 --------------------->    Frame 'j' Line 2
    Line 3          Line 3  ---->   Frame 'j+1' Line 3
     ...             ...                   ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on

30 lueyuv /lue /luergb

 

可以更改yuv的值,這個功能也很強大,提供了很多變量:

常用的參數有:

lueyuv:y、u、v

luergb:r、g、b、a

接受變量:

w
h
The input width and height.


val
The input value for the pixel component.


clipval
The input value, clipped to the minval-maxval range.


maxval
The maximum value for the pixel component.


minval
The minimum value for the pixel component.


negval
The negated value for the pixel component value, clipped to the minval-maxval range; it corresponds to the expression "maxval-clipval+minval".


clip(val)
The computed value in val, clipped to the minval-maxval range.


gammaval(gamma)
The computed gamma correction value of the pixel component value, clipped to the minval-maxval range. It corresponds to the expression "pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval"

由於我所用的都是h264編碼,所以使用的都是lueyuv,當然也可以使用luergb但是ffmpeg需要先轉碼,這樣會相對耗時更久。

使用舉例:

底片效果:

 

lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"

 

其實他是將所有值反轉,也可以直接使用negate濾鏡,效果一樣。

效果:

因為lueyuv中可以直接調整y 所以很輕松的調整亮度

調暗:

 

使用luergb可以很輕松的增強某個顏色分量,對於調冷暖顏色是很輕松的,給出較為極端的效果,去除gb顏色:

 

另外可以極大增強紅色:

 

31 negate 顧名思義,底片效果,與上一個類似。不再提了。

 

32 noize 添加噪音,會出現噪點,但是效果一般,假如想要添加類似美拍摩登時代中mv的效果,建議還是視頻元素疊加實現。

效果:

 

32 overlay 這個用途很廣,配合moive 可以添加水印。但是使用ffmpge命令行可以達到視頻疊加的效果,但是該效果是ffmpeg程序實現的,使用ffmpeg的庫寫代碼時候,不能這樣使用,即便添加元素是個視頻,也只會添加第一幀。

水印舉例:

 

添加水印時,水印的位置接受如下參數:

main_w  代表原視頻的寬

main_h  高

overlay_w  水印元素的寬

overlay_h  高

0.0坐標是左上角。所以例如:

 

overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10

 

 

意思是疊加到又上角,舉例邊界10個像素。而且其x和y接受負值,可以疊加到視頻之外,部分在視頻之上。

 

33:pad :添加面板,可以通過該濾鏡使得幀的長寬變大,然后疊加其他素材上去。

舉例:

 

pad=width=640:height=480:x=0:y=40:color=red

效果:

 

 

34 removelogo ,消除logo水印,和delogo 類似。

 

35 rotate 旋轉視頻幀,但是面板大小仍然是原視頻大小,所以當沒有刻意增大面板時旋轉之后,除了會有部分黑色區域外,還會有部分是顯示不出來的。

它接受t和n作為變量,通過表達式可以實現動態的控制旋轉角度。

舉例:

 

rotate=A*sin(2*PI/T*t)

根據播放時間的增加,視頻會不停旋轉,因為每一幀的旋轉角度會根據播放時間改變。

 

效果:

36 sab 可以降低顏色和亮度的模糊度,降低鋸齒,但是不建議使用,因為速度太慢。

 

37 showpalette  在視頻中顯示一個顏色板,感覺很有科技感,但是與frei0r 的效果相比,差很多。

下面給出freior的效果。

 

38 histogram  生成一個直方圖,用來表示視頻顏色的走向。效果也和frei0r 差很多。

效果:

 

39 shuffleplanes  翻譯過來是變換面板,但是沒有理解它的原理。給出官網上的例子

 

shuffleplanes=0:2:1:3

效果:

 

 

 

40 smartblur  制造模糊的同時不影響輪廓。

 

41 stereo3d  這個比較酷炫是分割視頻再融合。可以選擇分割和合並的方式。參數如下:

in 和out

in 即為分割方式,接受值有:

‘sbsl’
side by side parallel (left eye left, right eye right)


‘sbsr’
side by side crosseye (right eye left, left eye right)


‘sbs2l’
side by side parallel with half width resolution (left eye left, right eye right)


‘sbs2r’
side by side crosseye with half width resolution (right eye left, left eye right)


‘abl’
above-below (left eye above, right eye below)


‘abr’
above-below (right eye above, left eye below)


‘ab2l’
above-below with half height resolution (left eye above, right eye below)


‘ab2r’
above-below with half height resolution (right eye above, left eye below)


‘al’
alternating frames (left eye first, right eye second)


‘ar’
alternating frames (right eye first, left eye second)


‘irl’
interleaved rows (left eye has top row, right eye starts on next row)


‘irr’
interleaved rows (right eye has top row, left eye starts on next row)

默認值是sbsr

out 的接受值:

‘arbg’
anaglyph red/blue gray (red filter on left eye, blue filter on right eye)


‘argg’
anaglyph red/green gray (red filter on left eye, green filter on right eye)


‘arcg’
anaglyph red/cyan gray (red filter on left eye, cyan filter on right eye)


‘arch’
anaglyph red/cyan half colored (red filter on left eye, cyan filter on right eye)


‘arcc’
anaglyph red/cyan color (red filter on left eye, cyan filter on right eye)


‘arcd’
anaglyph red/cyan color optimized with the least squares projection of dubois (red filter on left eye, cyan filter on right eye)


‘agmg’
anaglyph green/magenta gray (green filter on left eye, magenta filter on right eye)


‘agmh’
anaglyph green/magenta half colored (green filter on left eye, magenta filter on right eye)


‘agmc’
anaglyph green/magenta colored (green filter on left eye, magenta filter on right eye)


‘agmd’
anaglyph green/magenta color optimized with the least squares projection of dubois (green filter on left eye, magenta filter on right eye)


‘aybg’
anaglyph yellow/blue gray (yellow filter on left eye, blue filter on right eye)


‘aybh’
anaglyph yellow/blue half colored (yellow filter on left eye, blue filter on right eye)


‘aybc’
anaglyph yellow/blue colored (yellow filter on left eye, blue filter on right eye)


‘aybd’
anaglyph yellow/blue color optimized with the least squares projection of dubois (yellow filter on left eye, blue filter on right eye)


‘ml’
mono output (left eye only)


‘mr’
mono output (right eye only)


‘chl’
checkerboard, left eye first


‘chr’
checkerboard, right eye first


‘icl’
interleaved columns, left eye first


‘icr’
interleaved columns, right eye first

 

列出幾個調出的效果,不同組合會有不同效果。

左右分割,然后疊加融合,一個選擇黃色,一個選擇藍色。

上下分割,左右合並,效果:

 

上下分割,疊加融合。效果:

 

41 super2xsai  放大。

 

42 swapuv  本質是交換uv兩個分量。

效果如下:

 

43 telecine 改變比特率。

 

44 thumbnail  顧名思義是取縮略圖,感覺用處不打,因為既然能解出幀,直接就縮放一下就是縮略圖了。

 

45 tinterlace 合並幀,合並方式有多種。

有一個方式參數:mode

接受值有:

‘merge, 0’
速度提升兩倍,因為每兩幀融合為一幀,按行融合。模式如下:


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444


Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
‘drop_odd, 1’
速度提升兩倍,跳幀顯示,保留偶數pts的幀。模式如下:
 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444


Output:
                22222                           44444
                22222                           44444
                22222                           44444
                22222                           44444
‘drop_even, 2’
速度提升兩倍,跳幀顯示,保留奇數pts的幀。模式如下:


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444


Output:
11111                           33333
11111                           33333
11111                           33333
11111                           33333
‘pad, 3’
速度不提升,模式如下:


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444


Output:
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
‘interleave_top, 4’
速度提升兩倍,模式如下:


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-


Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
‘interleave_bottom, 5’
與上個類似,只是行像素的順序變了。


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444


Output:
22222                           44444
11111                           33333
22222                           44444
11111                           33333
‘interlacex2, 6’


 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
 11111           22222           33333           44444
11111           22222           33333           44444
 11111           22222           33333           44444


Output:
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
‘mergex2, 7’




 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4


11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444


Output:
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444


凡是交叉行融合幀的模式,輸出都會有略微的不清楚現象。

 

46 trim 剪切視頻,是時間上的裁剪。

 

47 tile 選取幀同屏顯示。但是速度會相應倍數的提升。

效果如圖:

 

 

48 unsharp  描邊視頻。

對它並不是特別懂,給出官網上例子的效果:

 

49 vignette 光暈效果

可以調整角度,中心點位置等等。

舉例:

 

vignette=PI/4

效果:

 

 

50 vfilp :這個是與之前的hflip類似,甚至其他濾鏡也可以實現。就是縱向倒置

效果如下:

 

另外還有很多,共137個,我是針對自己比較熟悉的列舉用法和效果。

另外如果編譯進去frei0r的話,它擁有更多的特效,而且效果酷炫,不過處理速度較慢。

對於frei0r的效果,下篇給出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM