
FFmpeg Filter
在多媒體處理中,術(shù)語(yǔ)濾鏡(filter)指的是修改未編碼的原始音視頻數據幀的一種軟件工具。
● 在編碼前,ffmpeg可以對raw(真實(shí)/原)音頻和視頻使用libavfilter庫中的濾鏡進(jìn)行處理。(非壓縮數據幀)
● 多個(gè)濾鏡可以組成濾鏡鏈圖(濾鏡鏈圖filtergraphs )。
● 在ffmpeg看來(lái)只有2種濾鏡:簡(jiǎn)單濾鏡,復合濾鏡。
簡(jiǎn)單濾鏡就是只有1個(gè)輸入和輸出的濾鏡,濾鏡兩邊的數據都是同一類(lèi)型的,可以理解為在非壓縮數據幀到再次編碼前簡(jiǎn)單附加了一步:
complex filtergraph,通常是具有多個(gè)輸入輸出文件,并有多條執行路徑;ffmpeg命令行中使用-lavfi、-filter_complex,基本原理圖如下:
在libavfilter, 一個(gè)filter可以包含多個(gè)輸入、多個(gè)輸出。下圖是一個(gè)filtergraph的示例:
在這個(gè)濾鏡鏈圖中,利用split濾鏡把輸入流分離成了兩路流,其中一路通過(guò)crop濾鏡和vfilp濾鏡的同一路級聯(lián)應用,再同另外一路一起通過(guò)overlay濾鏡處理的流合成進(jìn)行輸出。則可以采用如下的命令行實(shí)現:
這個(gè)filtergraph可以用下面命令行表示:
ffmpeg -i INPUT -vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2' OUTPUT
這樣最終輸出將是視頻上部是原始,下部是上部的鏡像。(倒影效果)
ffplay -i Irving_360p.mp4 -vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'
同一路的濾鏡間用逗號(‘,’)進(jìn)行分割,不同路的濾鏡間用分號(‘;’)進(jìn)行分割。
在這個(gè)例子里面crop和vflip是在同一路中的濾鏡,split和overlay則不是同一路的(同一路的級聯(lián)是對連續的視頻進(jìn)行,如果涉及到一輸多、多輸一或者多輸多則都不是在同一路的,即不是同一路級聯(lián))??梢酝ㄟ^(guò)在方括號(’[]’)中的標簽名來(lái)命名處理的鏈路。這個(gè)例子里,split濾鏡生成了兩路就通過(guò)[main]和[tmp]進(jìn)行了標簽命名以方便后續處理。
其中被split處理輸出的第二路流被命名為[tmp],它又被crop濾鏡處理裁去下半部視頻,然后通過(guò)vflip進(jìn)行了水平鏡像(垂直翻轉,即把視頻鏡像到下半部了)。這是整個(gè)輸出被命名為flip。再把[main]與flip通過(guò)overlay進(jìn)行覆蓋合成,即把源輸入通過(guò)split濾鏡獲得的[main]的上半部分覆蓋到由crop和vflip濾鏡級聯(lián)處理的輸出(這里的[flip])上最終得到了鏡像結果。
一些濾鏡支持參數列表: 濾鏡名=由冒號(‘:’)隔開(kāi)的多個(gè)參數
比如視頻縮放、截取、翻轉、疊加、模糊等。其中定義了很多的filter,例如以下常用的一filter。
縮放
ffplay -i good.mp4 -vf scale=iw/2:ih/2
疊加
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 good_mark.mp4
裁剪
ffplay -i good_scale.mp4 -vf crop=w=200:h=200:x=100:y=0
截取視頻
ffmpeg -i good_scale.mp4 -vf trim=10:30 good_trim.mp4
模糊
ffplay -i good.mp4 -vf boxblur=luma_radius=2:luma_power=1
邊緣檢測
ffplay -i good_scale.mp4 -vf 'edgedetect=low=0.1:high=0.4'
一個(gè)濾鏡鏈圖(filtergraph)是連接濾鏡的有向圖。它可以包含循環(huán)動(dòng)作,也可以在多個(gè)濾鏡間形成鏈路,每個(gè)鏈接都有一個(gè)連接到濾鏡的輸入和一個(gè)連接到濾鏡的輸出。(參考)
濾鏡鏈圖采用文本表示,其有由一些ffmpeg和ffplay通用的選項-filter/-vf/-af和-filter_complex(ffmpeg)以及-vf/-af(ffplay)外加定義與libavfilter/avfilter.h的avfilter_graph_parse_ptr()等來(lái)描述。
(1)一個(gè)濾鏡鏈包含序列鏈接起來(lái)的濾鏡,這個(gè)序列由“,”分隔各個(gè)濾鏡描述;
(2)一個(gè)濾鏡鏈圖包含序列濾鏡鏈,這個(gè)序列有“;”分隔各個(gè)濾鏡鏈描述

一個(gè)濾鏡由一個(gè)字符串表單表示:
[input_link_lable1][input_link_lable2]... filter_name=parameters [output_link_lable1][output_link_lable12]...
(1) 輸入輸出都有連接標號(link lable),連接符號是可選項,在濾鏡名和參數前 和 后 有一個(gè)連接標簽列表。一個(gè)連接標簽允許命名1個(gè)名字的連接,其作為濾鏡的輸入或者輸出端口。
如果一個(gè)輸出端沒(méi)有命名標簽,它默認連接到濾鏡鏈上后面濾鏡中第一個(gè)沒(méi)有命名標簽的輸入端
(2) filter_name是濾鏡類(lèi)名字
(3) =arguments用于指定濾鏡選項:參數表示法如下規則
(3.1)“:”分隔的key=value列表
舉個(gè)例子:ffplay -i good.mp4 -vf scale=iw/2:ih/2
(3.2)一個(gè)“:”分隔的列表value值,在這種情況下,鍵(key)假定為選項名聲明順序
舉個(gè)例子:ffplay -i good_scale.mp4 -vf fade=in:0:30(淡入視頻的前30幀),按順序聲明了3個(gè)選項type、start_frame和nb_frames
(3.3)上面兩個(gè)規則混用
(3.4)如果選項的值本身就是一個(gè)列表(例如format濾鏡有一個(gè)像素格式列表選項),則這種列表通常用“|”分隔
舉個(gè)例子:將輸入視頻轉換為列表中的任何格式
ffmpeg -i good_scale.mp4 -vf 'format=pix_fmts=yuv420p|yuv444p|yuv410p' format.mp4
FFmpeg工具目錄下包含一個(gè)graph2dot程序可以用來(lái)分析濾鏡鏈圖描述并產(chǎn)生用dot語(yǔ)言描述的對應文本表示。
命令:dot -Tpng graph.tmp -o graph.png
描述文件:graph.tmp


一些濾鏡支持常規的enable選項。對于支持時(shí)間線(xiàn)編輯的濾鏡,這個(gè)選項可以被設置為一個(gè)表達式,其通過(guò)評估之前的情況來(lái)決定是否把幀畫(huà)面發(fā)送給濾鏡。
例如,要在1秒到20秒允許一個(gè)blur(模糊)濾鏡(smartblur),然后curves濾鏡在3秒之后:
ffplay -i good_scale.mp4 -vf 'smartblur=enable='between(t,1,20)',curves=enable='gte(t,3)':preset=cross_process'
在過(guò)濾器操作期間,可以使用命令更改某些選項。
這些選項在ffmpeg -h filter = <過(guò)濾器名稱(chēng)>的輸出上標記為“ T”。命令的名稱(chēng)是選項的名稱(chēng),參數是新值。
一些具有多個(gè)輸入的過(guò)濾器支持一組通用選項。
(1) eof_action(在secondary input上遇到EOF時(shí)采取的措施)
repeat\endall\pass
(2)shortest(如果設置為1,則在最短輸入終止時(shí)強制輸出終止。預設值為0。)
(3)repeatlast(如果設置為1,則強制過(guò)濾器將輔助流的最后一幀擴展到主流的末尾。值為0禁用此行為。預設值為1。)
source filter(僅輸出)、sink filter(僅輸入)
(1) audio filter
(1.1)Audio Base
(1.2)Audio Sources
(1.3)Audio Sinks
(2) video filter
(2.1)Base Video Filters
(2.2)OpenCL Video Filters
(2.3)VAAPI Video Filters
(2.4)Video Sources
(2.5)Video Sinks
(3)Multimedia filter
(3.1)Multimedia
(3.2)Multimedia Sources
8.1 acompressor (壓縮器主要用于減小信號的動(dòng)態(tài)范圍,調整響度db)
8.2 acontrast (簡(jiǎn)單的音頻動(dòng)態(tài)范圍壓縮/擴展濾波器。)
ps:音響的動(dòng)態(tài)范bai圍是指音響設備重放du時(shí)最大不失真輸出功率與靜態(tài)時(shí)系統zhi噪音輸出功dao率之比的對數。單位為分貝(dB)。一般性能較好的音響系統的動(dòng)態(tài)范圍在100(dB)以上。
8.3 acopy (將輸入音頻源原樣復制到輸出。這主要用于測試目的。)
8.4 acrossfade(將交叉淡入淡出從一個(gè)輸入音頻流應用于另一輸入音頻流。交叉淡入淡出將在第一個(gè)流的結尾附近的指定持續時(shí)間內應用。)
ffmpeg -i ca.mp3 -i see.mp3 -filter_complex acrossfade=d=10:c1=exp:c2=exp output.mp3
8.5 acrossover(將音頻流分成幾個(gè)頻段。該濾波器將音頻流分成兩個(gè)或多個(gè)頻率范圍。)
sub bass[20~65hz]這里是顯示聲音力量感的頻段
Bass[65~250hz]定義聲音肥瘦 節奏根音大都在在這個(gè)頻段 提高250hz左右的頻段可以在不影響清晰度的情況下給低頻增加溫暖感
中頻[250~2000hz]決定了一個(gè)樂(lè )器有多突出 提升1000hz的頻段可以給樂(lè )器增加質(zhì)感 但這個(gè)頻段過(guò)多使人感覺(jué)不適可能導致聽(tīng)覺(jué)疲勞
中高頻[2000~6000hz]人耳對這個(gè)頻段尤其敏感 即使提升很小的量 也會(huì )給聲音造成質(zhì)變 對這個(gè)頻段需要小心處理
高頻[6000~10000hz]這個(gè)頻段可以聽(tīng)到一些刺耳的聲音 提高這個(gè)頻段可以增加明亮感 降低這個(gè)頻段增加溫暖感
8.6 acrusher(降低音頻位分辨率。用于減少音頻信號的采樣位數。使聲音柔和)
8.7 acue(延遲音頻過(guò)濾,直到給定的墻上時(shí)鐘時(shí)間戳。)
8.8 adeclick (消除輸入音頻中的脈沖噪聲。)
8.9 adeclip (從輸入音頻中刪除剪輯的樣本。)
8.10 adelay (延遲一個(gè)或多個(gè)音頻通道。)
ffplay -i ca.mp3 -af 'adelay=1500|0|500'
8.11 aderivative, aintegral (計算音頻流的導數/積分。)
8.12 aecho (將回聲應用于輸入音頻。)
更長(cháng)的延遲聽(tīng)起來(lái)像山區的露天音樂(lè )會(huì )(輸入增益:輸出增益:延遲:衰變)
ffplay -i ca.mp3 -af 'aecho=0.8:0.9:1000:0.3'
8.13 aemphasis(音頻強調過(guò)濾器可以創(chuàng )建或恢復直接從具有不同過(guò)濾器曲線(xiàn)的LP或重點(diǎn)CD中獲取的素材。先通過(guò)濾波器更改信號,以消除該記錄介質(zhì)的缺點(diǎn)。)
8.14 aeval(根據指定的表達式修改音頻信號。)
采樣率、輸入輸出通道數、音量等
ffplay -i ca.mp3 -af 'aeval=val(ch)/5:c=same'(音量減小到1/5)
8.15 afade(將淡入/淡出效果應用于輸入音頻。)
ffplay -i ca.mp3 -af 'afade=t=in:ss=0:d=15' (淡入15秒)
8.16 afftdn(使用FFT對音頻樣本進(jìn)行除噪。)
8.17 afftfilt(將任意表達式應用于頻域中的樣本)
在音頻中幾乎只保留低頻
ffplay -i ca.mp3 -af afftfilt=''real=re * (1-clip((b/nb)b,0,1))':imag='im * (1-clip((b/nb)b,0,1))''
8.18 afir (應用任意的有限沖激響應濾波器??捎米鲾底址诸l器濾波器,房間均衡,串擾消除,波場(chǎng)合成,聽(tīng)覺(jué)化,歧義,歧義和空間化的組件。)
8.19 aformat (設置輸入音頻的輸出格式約束。該框架將協(xié)商最合適的格式以最??大程度地減少轉化。)
8.20 agate(門(mén)控主要用于減少信號的過(guò)低。這種信號處理可減少有用信號之間的干擾噪聲。)
8.21 aiir(應用任意的無(wú)限沖激響應濾波器。)
在5000Hz左右施加2極橢圓形陷波,采樣率為48000 Hz
ffplay -i ca.mp3 -af 'aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d'
8.22 alimiter(限幅器可防止輸入信號超過(guò)所需的閾值。)
8.23 allpass(全通濾波器可更改音頻的頻率與相位關(guān)系,而不會(huì )更改其頻率與振幅關(guān)系。)
8.24 aloop (循環(huán)音頻樣本。)
8.25 amerge(將兩個(gè)或多個(gè)音頻流合并為一個(gè)多通道流。)
8.26 amix(將多個(gè)音頻輸入混合為一個(gè)輸出。)
8.27 amultiply(將第一音頻流與第二音頻流相乘,并將結果存儲在輸出音頻流中。通過(guò)將來(lái)自第一流的每個(gè)樣本與來(lái)自第二流的相同位置的樣本相乘來(lái)完成乘法。)
8.28 anequalizer(每個(gè)通道的高階參數多頻帶均衡器。)
8.29 anlmdn(使用非本地均值算法減少音頻樣本中的寬帶噪聲。)
8.30 anlms(使用第二個(gè)音頻流將標準化的最小均方算法應用于第一個(gè)音頻流。)
8.31 anull(將未更改的音頻源傳遞到輸出。)
8.32 apad(用靜音填充音頻流的結尾。)
8.33 aphaser(向輸入音頻添加定相效果。)
8.34 apulsator(音頻脈沖發(fā)生器介于自動(dòng)調音臺和顫音之間。但是它也可以產(chǎn)生有趣的立體聲效果。)
8.35 aresample(使用libswresample庫將輸入音頻重新采樣為指定的參數。使用libswresample庫將輸入音頻重新采樣為指定的參數。)
ffplay -i ca.mp3 -af aresample=44100
8.36 areverse(反轉音頻剪輯。)
8.37 arnndn(使用遞歸神經(jīng)網(wǎng)絡(luò )減少語(yǔ)音噪聲。需要模型文件)
8.38 asetnsamples(設置每個(gè)輸出音頻幀的樣本數。)
8.39 asetrate(在不更改PCM數據的情況下設置采樣率。這將導致速度和螺距的變化。)
8.40 ashowinfo(顯示一行,其中包含每個(gè)輸入音頻幀的各種信息。輸入音頻未修改。)
8.41 asoftclip(應用音頻軟剪輯。)
8.42 asr(自動(dòng)語(yǔ)音識別,需要模型)
8.43 astats(顯示有關(guān)音頻通道的時(shí)域統計信息。計算并顯示每個(gè)音頻通道的統計信息,并在適用的情況下還提供總體數字。)
8.44 asubboost(提高低音炮頻率。)
8.45 atempo(調整音頻速度。)
ffplay -i ca.mp3 -af atempo=3
8.46 atrim(修剪輸入,以便輸出包含輸入的一個(gè)連續子部分。)
刪除除輸入第二分鐘外的所有內容
ffmpeg -i INPUT -af atrim=60:120
ffmpeg -i ca.mp3 -af atrim=5:30 ca_trim.mp3
8.47 axcorrelate(計算兩個(gè)輸入音頻流之間的歸一化互相關(guān)。)
8.48 bandpass
8.49 bandreject
8.50 bass, lowshelf(使用兩極置物架濾波器來(lái)增強或削減音頻的低音(較低)頻率,其響應類(lèi)似于標準高保真音調控制。這也稱(chēng)為擱架均衡(EQ)。)
8.51 biquad(應用具有給定系數的雙二階IIR濾波器。)
8.52 bs2b(鮑爾(Bauer)立體聲轉換為雙耳,可改善立體聲音頻記錄的耳機收聽(tīng)效果。)
8.53 channelmap(將輸入通道重新映射到新位置。)
8.54 channelsplit(將每個(gè)通道從輸入音頻流拆分為單獨的輸出流。)
8.55 chorus(向音頻添加合唱效果。)
具有三個(gè)延遲的更豐富的合唱:
ffplay -i ca.mp3 -af 'chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3'
8.56 compand(壓縮或擴展音頻的動(dòng)態(tài)范圍。)
使音樂(lè )既安靜又響亮,適合在嘈雜的環(huán)境中收聽(tīng)
ffplay -i ca.mp3 -af 'compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2'
8.57 compensationdelay(補償延遲線(xiàn)是基于度量的延遲,用于補償麥克風(fēng)或揚聲器的不同位置。)
8.58 crossfeed(應用耳機交叉饋電過(guò)濾器。)
8.59 crystalizer(擴展音頻動(dòng)態(tài)范圍的簡(jiǎn)單算法。)
8.60 dcshift(對音頻應用直流偏移。)
8.61 deesser(測對音頻樣本進(jìn)行de-essing處理。)
8.62 drmeter(測量音頻動(dòng)態(tài)范圍。)
8.63 dynaudnorm(動(dòng)態(tài)音頻規范化器。)
8.64 earwax(使音頻更易于在耳機上收聽(tīng)。)
8.65 equalizer(應用兩極峰均化(EQ)濾波器。)
8.66 extrastereo(線(xiàn)性增加左右聲道之間的差異,從而在播放中增加某種“實(shí)時(shí)”效果)
8.67 firequalizer(使用任意頻率響應進(jìn)行FOR均衡。)
8.68 flanger(對音頻應用鑲邊效果。)
8.69 haas(將哈斯效果應用于音頻。)
8.70 hdcd(解碼高清兼容數字(HDCD)數據。具有嵌入式HDCD代碼的16位PCM流被擴展為20位PCM流)
8.71 headphone
8.72 highpass
8.73 join(將多個(gè)輸入流合并為一個(gè)多通道流。)
8.74 ladspa(加載LADSPA(Linux音頻開(kāi)發(fā)人員的簡(jiǎn)單插件API)插件。要啟用此過(guò)濾器的編譯,您需要使用--enable-ladspa配置FFmpeg。)
8.75 loudnorm
8.76 lowpass(應用點(diǎn)頻為3dB的低通濾波器。)
8.77 lv2
8.78 mcompand
8.79 pan
8.80 replaygain
8.81 resample
8.82 rubberband
8.83 sidechaincompress
8.84 sidechaingate
8.85 silencedetect(檢測音頻流中的靜音。)
8.86 silenceremove(消除音頻開(kāi)頭,中間或結尾的靜音。)
8.87 sofalizer
8.88 stereotools
8.89 stereowiden
8.90 superequalizer
8.91 surround
8.92 treble, highshelf
8.93 tremolo
8.94 vibrato
8.95 volume(調整輸入音頻音量。)
8.96 volumedetect(檢測輸入視頻的音量。)
stereo雙聲道、mono單聲道
9.1 abuffer(緩沖音頻幀,并使它們可用于過(guò)濾器鏈。該資源主要用于編程用途,尤其是通過(guò)libavfilter / buffersrc.h中定義的接口。)
9.2 aevalsrc(生成表達式指定的音頻信號。)
生成頻率為440 Hz的正弦信號,將采樣率設置為8000 Hz
ffplay -f lavfi aevalsrc='sin(4402PI*t):s=8000'
產(chǎn)生白噪聲
aevalsrc='-2+random(0)'
9.3 afirsrc(使用頻率采樣方法生成FIR系數。)
9.4 anullsrc(空音頻源,返回未處理的音頻幀。它主要用作模板并在分析/調試工具中使用,或用作忽略輸入數據的過(guò)濾器(例如sox合成過(guò)濾器)的來(lái)源。)
9.5 flite(使用libflite庫合成語(yǔ)音。要啟用此過(guò)濾器的編譯,您需要使用--enable-libflite配置FFmpeg。)
9.6 anoisesrc(產(chǎn)生噪音音頻信號。)
ffplay -f lavfi anoisesrc=d=60:c=pink:r=44100:a=0.5
9.7 hilbert(生成奇抽頭希爾伯特變換FIR系數。)
9.8 sinc(生成Sinc Kaiser窗式低通,高通,帶通或帶阻FIR系數。)
9.9 sine(生成由振幅為1/8的正弦波組成的音頻信號。)
10.1 abuffersink(緩沖音頻幀,并使它們可用于過(guò)濾器鏈的末尾。該接收器主要用于編程用途,尤其是通過(guò)libavfilter / buffersink.h或選項系統中定義的接口。)
10.2 anullsink(空音頻接收器;輸入音頻絕對不做任何事情。它主要用作模板并用于分析/調試工具。)
音頻解碼后,可以avfilter api對解碼出來(lái)的AVFrame進(jìn)行效果處理,如音量調節,變速處理。多個(gè)音頻輸入還可以進(jìn)行混音處理單輸入過(guò)濾器解碼流程
解碼出
AVFrame -> abuffer-> 其他過(guò)濾器(volume)...->aformat->abuffersink->過(guò)濾后的AVFrame
這里看到有三個(gè)通用的過(guò)濾器,abuffer,aformat,abuffersink。abuffer用于接收輸入frame,形成待處理的數據緩存,abuffersink用于傳出輸出Frame,aformat過(guò)濾器約束最終的輸出格式(采樣率,聲道數,存儲位數等),這三個(gè)不可缺少。而中間的其他過(guò)濾器可以串聯(lián)多個(gè)filter,如volume,atempo
比如視頻縮放、截取、翻轉、疊加、模糊等。其中定義了很多的filter,例如以下常用的一filter。
(1)ffplay -i good.mp4 -vf scale=640:360
(2)ffplay -i good.mp4 -vf scale=iw/2:ih/2
(3)ffmpeg -i mark.png -vf scale=iw2:ih2 mark_scale.png
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay good_mark.mp4
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=main_w-overlay_w-10:main_h-overlay_h-10 good_mark.mp4
ffplay -i good_scale.mp4 -vf crop=200:200
ffplay -i good_scale.mp4 -vf crop=w=200:h=200:x=100:y=0
ffplay -i good_scale.mp4 -vf crop=in_w-210:in_h-220
ffplay -i good_scale.mp4 -vf 'crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)sin(n/7)'
ffmpeg -i good_scale.mp4 -vf trim=10:30 good_trim.mp4
(1)順時(shí)針旋轉輸入PI / 6弧度
ffplay -i good_scale.mp4 -vf rotate=PI/6
(2)從PI / 3的角度開(kāi)始,以周期T進(jìn)行恒定旋轉(T=10就是10s)
ffplay -i good_scale.mp4 -vf 'rotate=PI/3+2PIt/T:fillcolor = red'
(3)使輸入視頻旋轉以T秒的周期和A弧度的幅度振蕩(A = 5, T = 10)
ffplay -i good_scale.mp4 -vf rotate=Asin(2PI/T*t)
ffplay -i Irving_360p.mp4 -vf 'crop=iw/2:ih:0:0,split[left][tmp];[tmp]hflip[right];[left][right] hstack'
ffplay -i Irving_360p.mp4 -vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2'
ffplay -i good.mp4 -vf boxblur=luma_radius=2:luma_power=1
rrrgrbragrgggbgabrbgbbbaaragabaa
參數本質(zhì)就是加權求值時(shí)候的權重,每個(gè)參數接受0-1得值,濾鏡本
質(zhì)是將每個(gè)顏色值加權求值.公式:red=redrr+bluerb+greenrg+alphara 。green/blue和alpha同理。參數默認值對應得是1,其他為0.如:rr,rg,rb,ra。其中rr默認為1,其他為0。
ffplay -i good_scale.mp4 -vf 'colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3'
之所以會(huì )是灰階效果,原因是將每個(gè)顏色分量相等,所以rgb混合后為透明度不同得黑色
褐色處理:
ffplay -i good_scale.mp4 -vf 'colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131'
感覺(jué)這個(gè)最好還是當作中間操作來(lái)用,因為單純過(guò)這個(gè)濾鏡并不會(huì )有什么美感,但是邊緣檢測卻是實(shí)現其他操作的必經(jīng)之路,比如:油畫(huà)效果,動(dòng)畫(huà)片效果等等。
ffplay -i good_scale.mp4 -vf 'edgedetect=low=0.1:high=0.4'
添加油畫(huà)效果
ffplay -i good_scale.mp4 -vf 'edgedetect=mode=colormix:high=0'
根據像素位置修改RGB分量
ffplay -i good_scale.mp4 -vf 'geq=r='X/Wr(X,Y)':g='(1-X/W)g(X,Y)':b='(H-Y)/H*b(X,Y)''
要啟用這些過(guò)濾器的編譯,需要使用--enable-opencl配置FFmpeg。運行OpenCL篩選器要求您初始化硬件設備,并將該設備傳遞給任何篩選器圖中的所有篩選器。
由于OpenCL過(guò)濾器無(wú)法訪(fǎng)問(wèn)普通內存中的幀數據,因此所有幀數據需要先上傳(hwupload)到連接到適當設備的硬件表面,然后再使用,然后再下載(hwdownload)回到普通存儲器。請注意,hwupload將以與軟件框架相同的布局上載到表面,因此可能有必要在將輸入轉換為正確格式之前立即添加格式過(guò)濾器,并且hwdownload不支持輸出中的所有格式-這可能必須在圖表后立即插入一個(gè)附加的格式過(guò)濾器,以獲取受支持格式的輸出。
12.1 avgblur_opencl
12.2 boxblur_opencl
12.3 colorkey_opencl(RGB色彩空間顏色鍵控。)
12.4 convolution_opencl(應用3x3、5x5、7x7矩陣的卷積)
12.5 erosion_opencl(對視頻應用腐蝕效果。)
12.6 deshake_opencl(基于特征點(diǎn)的視頻穩定濾波器。防抖)
12.7 dilation_opencl(將膨脹效果應用于視頻。)
12.8 nlmeans_opencl(通過(guò)OpenCL的非本地均值降噪過(guò)濾器)
12.9 overlay_opencl(將一個(gè)視頻疊加在另一個(gè)視頻上。)
12.10 pad_opencl(將填充物添加到輸入圖像,并將原始輸入放置在提供的x,y坐標處。)
12.11 prewitt_opencl
12.12 program_opencl(使用OpenCL程序過(guò)濾視頻。)
12.13 roberts_opencl
12.14 sobel_opencl(應用Sobel運算符,邊緣檢測用的算子)
12.15 tonemap_opencl(通過(guò)色調映射執行HDR(PQ / HLG)到SDR的轉換。)
12.16 unsharp_opencl(銳化或模糊輸入視頻。)
12.17 xfade_opencl(使用OpenCL交叉淡化具有自定義過(guò)渡效果的兩個(gè)視頻。)
針對Intel CPU X86架構平臺,可采用FFmpeg+VAAPI的硬解方案。其中,FFmpeg用于處理各種格式的視頻解碼;VAAPI則提供對硬件加速視頻處理的訪(fǎng)問(wèn),處理流程圖如下。

VAAPI視頻過(guò)濾器通常與VAAPI解碼器和VAAPI編碼器一起使用。以下是VAAPI視頻過(guò)濾器的說(shuō)明。要啟用這些過(guò)濾器的編譯,您需要使用--enable-vaapi配置FFmpeg
(1)cellauto 創(chuàng )建由基本元胞自動(dòng)機生成的模式。
ffplay -f lavfi -i cellauto=ratio=2/3:s=200x200
(2)mptestsrc 生成由MPlayer測試過(guò)濾器生成的各種測試模式。
ffplay -f lavfi -i mptestsrc=t=dc_luma
(3)life 生成細胞動(dòng)態(tài)模式。
ffplay -f lavfi -i life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
用于音頻轉為視頻的顯示(頻率等),
16.1 abitscope(將輸入音頻轉換為視頻輸出,顯示音頻位范圍。)
16.2 adrawgraph(使用輸入的音頻元數據繪制圖形。)
16.3 agraphmonitor
16.4 ahistogram(將輸入音頻轉換為視頻輸出,顯示音量直方圖。)
16.5 aphasemeter(測量輸入音頻的相位,將其導出為元數據l)
16.6 avectorscope(將輸入音頻轉換為視頻輸出,代表音頻矢量范圍。)
ffplay -f lavfi 'amovie=ca.mp3, asplit [a][out1]; [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
16.7 bench, abench(篩選器的基準部分。)
16.8 concat(連接音頻和視頻流,一個(gè)接一個(gè)地將它們連接在一起。該過(guò)濾器適用于同步視頻和音頻流的片段。所有段的每種類(lèi)型必須具有相同數量的流,并且這也將是輸出中的流數量。)
16.9 ebur128
16.10 interleave, ainterleave(臨時(shí)交錯來(lái)自多個(gè)輸入的幀。)
16.11 metadata, ametadata
16.12 perms, aperms
16.13 realtime, arealtime
16.14 select, aselect(選擇要傳遞的幀。)
16.15 sendcmd, asendcmd
16.16 setpts, asetpts(更改輸入幀的PTS(演示時(shí)間戳記)。)
16.17 setrange
16.18 settb, asettb
16.19 showcqt(將輸入音頻轉換為代表頻譜的視頻輸出)
ffplay -f lavfi 'amovie=ca.mp3, asplit [a][out1]; [a] showcqt [out0]'
ffplay -f lavfi 'aevalsrc=0.1sin(2PI55t)+0.1sin(4PI55t)+0.1sin(6PI55t)+0.1sin(8PI55t),asplit[a][out1]; [a] showcqt [out0]'
16.20 showfreqs(將輸入音頻轉換為代表音頻功率譜的視頻輸出)
16.21 showspatial(將立體聲輸入音頻轉換為視頻輸出,以表示兩個(gè)通道之間的空間關(guān)系。)
16.22 showspectrum
將輸入音頻轉換為代表音頻頻譜的視頻輸出。
ffplay -f lavfi 'amovie=ca.mp3, asplit [a][out1]; [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
16.23 showspectrumpic
16.24 showvolume(將輸入音頻音量轉換為視頻輸出。)
16.25 showwaves
16.26 showwavespic
16.27 sidedata, asidedata
16.28 spectrumsynth
16.29 split, asplit(將輸入音頻音量轉換為視頻輸出。split使用音頻輸入,使用視頻分割。)
16.30 zmq, azmq
movie/amovie
從movie容器中讀取音頻和/或視頻流。
(1) 水印 overlaye
ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=10:10 good_mark.mp4
(2) 人物濾鏡 colorchannelmixer
(3) 截取視頻片段 copy
ffmpeg -ss 5 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4
//-ss 5指定從輸入視頻第5秒開(kāi)始截取,-t 10指明最多截取10秒。
(4) 把視頻文件推送到rtmp服務(wù)器(ffmpeg -re -i jack.mp4 -c copy -f flv rtmp://host/live/test)
(5) 分離/合并視頻音頻流 (copy)
ffmpeg -i input-video -vn -c:a copy output-audio //分離音頻流
ffmpeg -i input-video -c:v copy -an output-video //分離視頻流
ffmpeg -i input-video -c:v copy -an output-video -c:a -vn output-audio //同時(shí)分離音頻和視頻流
ffmpeg -i video_file -i audio_file -c:v copy -c:a copy output_file //合并視頻音頻流
(6) 視頻截圖
ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
(7) 圖片序列與視頻的互相轉換
ffmpeg -i %04d.jpg output.mp4
ffmpeg -i input.mp4 %04d.jpg
\第一行命令是把0001.jpg、0002.jpg、0003.jpg等編碼成output.mp4,
\第二行則是相反把input.mp4變成0001.jpg……。
\%04d.jpg表示從1開(kāi)始用0補全的4位整數為文件名的jpg文件序列。
(8) 視頻中去水印delogo
ffmpeg -i good_mark.mp4 -vf delogo=x=10:y=10:w=100:h=60 delogo.mp4
(ffmpeg -i good_scale.mp4 -i mark.png -filter_complex overlay=10:10 good_mark.mp4 加水?。?/p>
[1]. http://ffmpeg.org/ffmpeg.html#Filtering
[2]. https://ffmpeg.org/ffmpeg-filters.html
[3]. https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-30.md
[4]. FFmpeg filter的使用介紹
[5]. https://www.bogotobogo.com/FFMpeg/ffmpeg_image_scaling_jpeg.php
[6]. 使用gprof2dot和graphivz生成程序運行調用圖
[7]. Graphviz 畫(huà)圖和例子
[8]. Graphviz典型例子
[9]. https://restream.io/blog/what-is-low-latency/
聯(lián)系客服