濾鏡的作用主要是對原始的音視頻數(shù)據(jù)進行處理以實現(xiàn)各種各樣的效果。比如疊加水印,翻轉(zhuǎn)縮放視頻等。
下圖表示的正常轉(zhuǎn)碼流程,濾鏡在解碼和編碼中間,虛線表示可有可無。
使用命令查看ffmpeg支持的濾鏡
ffmpeg -filters?
查看某個濾鏡的詳細參數(shù)
ffmpeg -h filter=pad
?上圖顯示的pad濾鏡的功能和需要的參數(shù)。
ffmpeg中的濾鏡可分為:
- source filter? 只有輸出
- audio filter? 音頻過濾器
- video filter? 視頻過濾器
- multimedia filter? 復雜過濾器
- sink filter 只有輸入
這里需要重點提的兩個特別的filter:buffer和buffersink。
(1)buffer:濾波器buffer代表filter graph中的源頭,原始數(shù)據(jù)就往這個filter節(jié)點輸入的。通過調(diào)用該濾波器提供的函數(shù)(如av_buffersrc_add_frame)可以把需要濾波的幀傳輸進入濾波過程。在創(chuàng)建該濾波器實例的時候需要提供一些關(guān)于所輸入的幀的格式的必要參數(shù)(如:time_base、圖像的寬高、圖像像素格式等)。
(2)buffersink:一個特殊的濾波器,濾波器buffersink代表filter graph中的輸出節(jié)點,處理完成的數(shù)據(jù)從這個filter節(jié)點輸出。通過調(diào)用濾波器提供的函數(shù)(如av_buffersink_get_frame)可以提供出被濾波過程過濾完成后的幀。
除了source和sink filter,其他filter都至少有一個輸入、至少一個輸出。
也可以簡單的分為簡單濾鏡和復雜濾鏡。
簡單濾鏡:只有一個輸入和輸出,命令行中使用??-vf(視頻濾鏡),??-af(音頻濾鏡)
?復雜濾鏡:有多個輸入和輸出,命令行中使用?-lavfi 或 -filter_complex
下圖中官方給出一個filtergrpah示例:
?在這個濾鏡圖中,我們可以看到使用4個濾鏡
1.使用split濾鏡將輸入流復制成兩路流輸出,一個叫main. 一個tmp
2.使用crop濾鏡對tmp流進行裁剪
3.使用vflip對tmp流進行垂直翻轉(zhuǎn)
4.使用overlay將tmp流疊加在main流中
可以使用命令行表示如下
ffmpeg -i INPUT -vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0,vflip [flip]; [main][flip] overlay=0:H/2' OUTPUT
同一路的濾鏡間用逗號(‘,’)進行分割,不同路的濾鏡間用分號(‘;’)進行分割。
?
Filter的語法
Filter 的語法
filter_name=param_name1=param_value1:param_name2=param_value2
filter_name : 是fliter的名稱, 必須有;它的參數(shù)是可選 的,以":"分隔或"+"號,可以有參數(shù)名,也可以沒有;
例如:
ffmpeg -i video.avi? -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
這個抽取視頻Y、U、V分量的filter,就有三個輸出,分別是 [y][u][v], 抽取后,將不同的輸出保存到不同的文件中
沒有音頻、視頻輸入的filter稱為source filter
沒有音頻、視頻輸出的filter稱為sink filter
filterchain的語法
filter1,filter2,....
它是多個filter的組合,以逗號分隔;并且每個filter是輸入是前一個filter的輸出;
ffmpeg -i audio.aac -filter_complex "aresample=async=16000,adelay=316397,volume=1.0" -acodec libfdk_aac -y output.mp4
這里用到了三個filter,分別的aresample, adelay, volume, 組成一個filterchain;
filtergraph的語法
filterchain1;filterchain2;...
它是多個filterchain的組合,以分號";"分隔,
ffmpeg -i INPUT -filter_complex "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
這里用到了三個filterchain, 分別是:
split [main][tmp]; // 它只有一個filter,即 split; 它有一個默認的輸入,即INPUT解碼后的frame;
有兩個輸出, 以 [main], [tmp] 標識;
[tmp] crop=iw:ih/2:0:0, vflip [flip] // 它由兩個filter組成,即crop和vflip;一個輸入 [tmp], 一個輸出[flip];文章來源:http://www.zghlxwxcb.cn/news/detail-625058.html
[main][flip] overlay=0:H/2 // 它由一個filter組成,即overlay, 有兩輸入,分別是[main][flip], 一個默認的輸出;文章來源地址http://www.zghlxwxcb.cn/news/detail-625058.html
常用濾鏡
- scale:視頻/圖像的縮放
- overlay:視頻/圖片的疊加
- crop:視頻/圖像的裁剪
- trim:截取視頻的片段
- rotate:以任意?度旋轉(zhuǎn)視頻
- movie:加載第三方的視頻,圖片
- yadif:去隔行
- pad:? 填充視頻
- drawtext: 添加文字
到了這里,關(guān)于關(guān)于FFMPEG中的filter濾鏡的簡單介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!