37 視頻濾鏡
在配置編譯FFmpeg時可以通過--disable-filters
來禁止所有濾鏡的編譯。也可以配置編譯腳本來輸出所有包含進編譯的濾鏡信息。
下面是當前可用的視頻濾鏡介紹。
alphaextract
把輸入視頻作為灰度視頻來提取透明通道,它通常和alphamerge
濾鏡聯用。
alphamerge
通過添加或者替換透明通道,讓主要視頻與另外一路視頻混合。這里主要是使用alphaextract
來讓不支持透明通道的視頻成為允許傳輸或存儲幀透明的幀序列
例如:為了重建完整的幀,讓一個普通的YUV編碼視頻和利用了alphaextract
的一個單獨的視頻混合:
movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
因為這個濾鏡專為重建幀設計,所以它的運行過程中沒有考慮時間戳,而是在輸入達到流結束時終止。這可能將導致編碼管道丟幀,如果你僅想實現一個圖像疊加到視頻,建議采用overlay
濾鏡。
ass
類似subtitles
,除了它不需要libavcodec
和libavformat
。另一方面,它受限於ASS(Advanced Substation Alpha-高級子透明)字幕格式文件
這個濾鏡除了subtitles
濾鏡選項外還接受下面選項:
-
shaping
設置圖像引擎,有效的值有:
‘auto’
默認的`libass`圖像引擎,它是最合適的值
‘simple’
快, 僅采用font-agnostic圖像
‘complex’
慢,采用OpenType。
默認為auto.
bbox
在輸入的亮度平面上計算非黑邊緣。
這個濾鏡按設定的最小亮度值計算平面上所有像素圖像的編譯(按亮度——即按閥值連接起來構成多個區塊,閥值連線即邊緣)。描述邊緣的參數會記錄到濾鏡日志中。
濾鏡接受下面的選項:
-
min_val
設置最小的亮度值(其下認為是黑的,其上為非黑),默認16
blackdetect
檢測視頻(幾乎)完全是黑色的時間間隔(段)。它可以用於檢測章間的過渡、廣告或者無效的錄制。輸出是以秒為單位的檢測出黑場時間段的開始、結束和持續時間線信息。
為了顯示(輸出)時間線信息,你需要設置日志層次為AV_LOG_INFO
。
濾鏡接受下面的選項:
-
black_min_duration, d
以秒為單位設置最小黑場持續時間(小於這個的不被檢出),它必須是非負浮點數,默認為2.0
-
picture_black_ratio_th, pic_th
設置畫面黑場檢驗標准,即圖像中黑色像素占畫面所有像素比的最小值:
nb_black_pixels / nb_pixels
如果畫面中黑色像素占比大於這個值則判斷當前畫面是黑場畫面,默認值為0.98
-
pixel_black_th, pix_th
設置判斷像素是黑色像素的標准
采用像素亮度值來判斷,只有像素亮度不大於一個設定的值(所確定的標准,見后)即為黑色像素。其依據下面的方程計算亮度:
absolute_threshold = luminance_minimum_value + pixel_black_th * luminance_range_size
luminance_range_size
和luminance_minimum_value
依賴於輸入視頻格式,范圍為 對YUV全范圍格式視頻[0-255],非全范圍格式[16-235]默認值0.10(對於YUV全范圍格式,則計算值為 0+0.1255=25.5,對於非YUV全范圍則為 16+0.1(235-16)=37.9)
下面的例子設置黑像素標准為最小值,黑場時長大於等於2秒:
blackdetect=d=2:pix_th=0.00
blackframe
判斷(幾乎)黑幀。它可以用於檢測章間的過渡、廣告等。輸出內容包括檢測到的黑幀數、占比和文件中的偏移(對文件格式支持檢測,如果不支持檢測為-1)和以秒為單位的時間戳。
為了顯示這些輸出信息,需要設置日志層次為AV_LOG_INFO
它接受下面的參數:
-
amount
像素為黑在幀中的占比百分比數,默認98
-
threshold, thresh
像素為黑的判斷標准,默認為32
blend,tblend
混合兩個視頻幀
其中blend
混合兩路輸出1路流,第一個輸入為top
層,二個路為bottom
層,輸出以輸入短的為結束。而tblend
(時間混合)需要從一個單獨視頻流的連續兩幀,讓新幀在上疊加在老幀上。
接受選項的介紹如下:
-
c0_mode
-
c1_mode
-
c2_mode
-
c3_mode
-
all_mode
設置混合模式(對指定像素或者所有像素——利用
all_mode
),默認值是normal
當前有效的混合模式如下:
‘addition’
‘and’
‘average’
‘burn’
‘darken’
‘difference’
‘difference128’
‘divide’
‘dodge’
‘exclusion’
‘glow’
‘hardlight’
‘hardmix’
‘lighten’
‘linearlight’
‘multiply’
‘negation’
‘normal’
‘or’
‘overlay’
‘phoenix’
‘pinlight’
‘reflect’
‘screen’
‘softlight’
‘subtract’
‘vividlight’
‘xor’ -
c0_opacity
-
c1_opacity
-
c2_opacity
-
c3_opacity
-
all_opacity
設置特定像素的透明度,或者設置整個透明度(利用
all_opacity
),僅用於組合像素混合模式blend
濾鏡. -
c0_expr
-
c1_expr
-
c2_expr
-
c3_expr
-
all_expr
設置特定像素混合表達式或所有像素混合表達式(
all_expr
),注意如果它們被設定,則相關模式選項被忽略表達式可以采用下面的變量:
N
進入濾鏡的幀序數,從0開始計數
X
Y樣本點坐標(像素坐標)
W
H整個幀畫面的寬和高(原始的)
SW
SH取決於當前濾鏡平面的寬和高。它對應於像素亮度平面和當前平面的比值,如對於YUV4:2:0格式,則對於亮度平面為1,1,對於色度平面則是0.5,0.5
T
當前幀的時間,單位秒
TOP, A
`top`層的視頻幀上當前像素值
BOTTOM, B
`bottom`層的視頻幀上當前像素值
-
shortest
在短輸入結束時強制結束,默認為0,只用於
blend
濾鏡 -
repeatlast
在結束流后繼續應用底幀。值為0表明不繼續應用底幀,默認為1.選項只用於
blend
濾鏡
blend,tblend例子
-
在前10秒應顯示底幀:
blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
-
顯示1x1棋盤效應效果(有的顯示A,有的顯示B):
blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
-
從左到右揭開的效果:
blend=all_expr='if(gte(N*SW+X,W),A,B)'
-
從上到下揭開效果:
blend=all_expr='if(gte(Y-N*SH,0),A,B)'
-
從右下向左上揭開效果:
blend=all_expr='if(gte(TSH40+Y,H)gte((T40*SW+X)*W/H,W),A,B)'
-
顯示當前和前一幀之間的差異:
tblend=all_mode=difference128
boxblur
對輸入視頻應用邊緣虛化
接受下面的參數:
-
luma_radius, lr
-
luma_power, lp
-
chroma_radius, cr
-
chroma_power, cp
-
alpha_radius, ar
-
alpha_power, ap
接受選項的介紹見下:
-
luma_radius, lr
-
chroma_radius, cr
-
alpha_radius, ar
在輸入平面,設置用於邊緣模糊的像素半徑表達式
這個半徑必須是非負數,且必須在亮度和透明度(平面/通道上)大於min(w,h)/2,在色度平面上大於 min(cw,ch)/2
luma_radius
默認為2,如果沒有指定 is "2".chroma_radius
和alpha_radius
默認是根據luma_radius
值的默認集表達式中允許下面內容:
w
h輸入視頻寬和高
cw
ch輸入色度圖像的高和寬
hsub
vsub水平和垂直采樣的色彩濃度值,例如對於 "yuv422p"像素格式,`hsub`為2,`vsub`為1
-
luma_power, lp
-
chroma_power, cp
-
alpha_power, ap
指定應用於相應平面的邊緣虛化濾鏡次數。
默認
luma_power
為2,chroma_power
和alpha_power
的默認值是根據luma_power
的對於默認值集如果有1個值為0則禁止了效果
boxblur例子
-
對亮度、色度和透明都以2的半徑進行邊緣虛化(模糊):
boxblur=luma_radius=2:luma_power=1
boxblur=2:1 -
設置亮度編譯模糊半徑為2,而透明和色度模糊半徑為0:
boxblur=2:1:cr=0:ar=0
-
設置亮度和色度模糊半徑是視頻維度的小部分(這里是1/10):
boxblur=luma_radius=min(h,w)/10:luma_power=1:chroma_radius=min(cw,ch)/10:chroma_power=1
codecview
可視化展示一些編碼的信息
一些編碼可以在圖像的一端或者其他地方輸出信息。例如一些MPEG
編碼器就可以通過設置flags2
標志為export_mvs
來輸出運動矢量檢測信息
濾鏡接受下面選項:
-
mv
設置運動矢量檢測來可視化,
對
mv
選項有效的標志有:‘pf’
基於P幀的前向預測
‘bf’
基於B幀的前向預測
‘bb’
基於B幀的后向預測
codecview例子
-
基於P幀和B幀,可視化多徑向運動矢量檢測
ffplay -flags2 +export_mvs input.mpg -vf codecview=mv=pf+bf+bb
colorbalance
對輸入幀編輯主要的顏色(紅、綠和藍)強度
濾鏡用於對輸入幀調整陰影、中間調或高亮區域實現 red-cyan(紅和藍綠), green-magenta(綠和品紅) 或blue-yellow(藍和黃)的平衡。
一個正向的調整值對應於平衡主要顏色,一個負數值則對應於補色。
濾鏡接受下面的選項:
-
rs
-
gs
-
bs
調整red, green和blue的陰影(黑暗像素).
-
rm
-
gm
-
bm
調整red, green和blue的中間調 (中亮度像素).
-
rh
-
gh
-
bh
調整red, green和blue的高亮 (亮的像素).
所有值的取值范圍為[-1.0, 1.0],默認為0(不調整)
colorbalance例子
-
添加影子的紅色
colorbalance=rs=.3
colorkey
RGB顏色鍵控
濾鏡接受下面的選項:
-
color
設置被作為透明的顏色
-
similarity
設置對色鍵的相似性百分比(表示也作為色鍵的顏色范圍)
0.01匹配表示只有色鍵,而1表示所有顏色(相當於直接是透明了)
-
blend
混合百分比
0.0 表示像素完全透明或者完全不透明
更高的值導致半透明像素,對於更高的透明度相當於像素的顏色更接近於色鍵
colorkey例子
-
讓所有的綠色像素透明
ffmpeg -i input.png -vf colorkey=green out.png
-
在綠屏上顯示背景圖片
ffmpeg -i background.png -i video.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.flv
colorlevels
使用層來調整輸入視頻
濾鏡接受下面的選項:
-
rimin
-
gimin
-
bimin
-
aimin
調整輸入紅、綠、藍和透明的黑(標准),允許范圍為[-1.0,1.0],默認為0
-
rimax
-
gimax
-
bimax
-
aimax
調整輸入紅、綠、藍和透明的白(標准),允許范圍為[-1.0,1.0],默認為1.
輸入水平被用來減輕突出(明亮的色調),變暗陰影(暗色調),改變亮和暗的平衡
-
romin
-
gomin
-
bomin
-
aomin
調整輸出紅、綠、藍和透明的黑(標准),允許范圍為[-1.0,1.0],默認為0
-
romax
-
gomax
-
bomax
-
aomax
調整輸出紅、綠、藍和透明的白(標准),允許范圍為[-1.0,1.0],默認為1.
用來手動調整輸出電平范圍
colorlevels例子
-
讓視頻輸出暗色調
colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
-
增加對比度
colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
-
讓視頻更亮
colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
-
增加亮度
colorlevels=romin=0.5:gomin=0.5:bomin=0.5
colorchannelmixer
通過重新混合顏色通道調整視頻輸入幀
這個濾鏡通過在不同顏色通道對同一個像素添加與其他通道相關的值進行顏色調整,例如為了修改紅色,輸出會是:
red=red*rr + blue*rb + green*rg + alpha*ra
濾鏡接受下面選項:
-
rr
-
rg
-
rb
-
ra
為調整輸出的紅色通道而進行參數設置(分別對應於根據紅、綠、藍和透明通道的權值),rr默認為1,其他默認為0
-
gr
-
gg
-
gb
-
ga
為調整輸出的綠色通道而進行參數設置(分別對應於根據紅、綠、藍和透明通道的權值),gg默認為1,其他默認為0
-
br
-
bg
-
bb
-
ba
為調整輸出的藍色通道而進行參數設置(分別對應於根據紅、綠、藍和透明通道的權值),bb默認為1,其他默認為0
-
ar
-
ag
-
ab
-
aa
為調整輸出的透明通道而進行參數設置(分別對應於根據紅、綠、藍和透明通道的權值),aa默認為1,其他默認為0
各個值的運行范圍為[-2.0, 2.0].
colorchannelmixer例子
-
轉換源到灰度模式
colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
-
模擬墨色應用
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
colormatrix
顏色轉換矩陣(常用於顏色標准轉換)
濾鏡接受下面的選項:
-
src
-
dst
分別指定源和目標的顏色矩陣模式。兩個值都必須要設置。
接受的值為:
‘bt709’
BT.709
‘bt601’
BT.601
‘smpte240m’
SMPTE-240M
‘fcc’
FCC
例如要轉換BT.601 到 SMPTE-240M需要:
colormatrix=bt601:smpte240m
copy
復制輸入源,而不改變的輸出,常用於測試。
crop
裁剪輸入
接受下面的參數:
-
w, out_w
輸出視頻的寬,默認為
iw
。這個表達式只有過濾器配置是進行一次求值 -
h, out_h
輸出視頻的高,默認為
iw
。這個表達式只有過濾器配置是進行一次求值 -
x
輸入的水平坐標,默認為(in_w-out_w)/2,每幀都計算
-
y
輸入的垂直坐標,默認為(in_h-out_h)/2,每幀都計算
-
keep_aspect
如果設置為1,則強制輸出采樣輸入一樣的長寬比例,默認為0
這里 out_w
, out_h
, x
, y
參數都可以是表達式,包含下述意義:
-
x
-
y
計算x和y,通常每幀計算
-
in_w
-
in_h
輸入的寬和高
-
iw
-
ih
同於
in_w
和in_h
-
out_w
-
out_h
輸出的(裁剪后的)寬和高
-
ow
-
oh
同於
out_w
和out_h
-
a
同於
iw / ih
-
sar
輸入的樣本點(像素)長寬比
-
dar
輸入顯示樣本點長寬比它同於
(iw / ih) * sar
-
hsub
-
vsub
水平和垂直顏色分量值。例如對於"yuv422p"的像素,
hsub
為2,vsub
為1 -
n
輸入幀的序數,從0計數
-
pos
輸入幀在文件中的偏移,如果未知則為
NAN
-
t
秒為單位的輸入幀時間戳,如果時間戳未知則為
NAN
crop例子
-
從(12,34)開始裁剪出一個100x100的圖像
crop=100:100:12:34
-
使用命名選項,同上例一樣:
crop=w=100:h=100:x=12:y=34
-
在輸入中心裁剪出100x100:
crop=100:100
-
裁剪輸入的2/3區域:
crop=2/3in_w:2/3in_h
-
裁剪輸入中心區域:
crop=out_w=in_h
crop=in_h -
據邊緣100裁剪出中間部分.
crop=in_w-100:in_h-100:100:100
-
據左右10像素,上下20像素的中間部分
crop=in_w-210:in_h-220
-
保留右下角(四分后的右下部分)
crop=in_w/2:in_h/2:in_w/2:in_h/2
-
按黃金分割裁剪
crop=in_w:1/PHI*in_w
-
應用抖動效果
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)
-
取決於時間戳的不定照相效果:
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(t10):(in_h-out_h)/2 +((in_h-out_h)/2)sin(t13)"
-
讓x依賴於y
crop=in_w/2:in_h/2:y:10+10*sin(n/10)
cropdetect
自動檢測裁剪尺寸(自動去除邊緣的黑部)
它計算必要的剪切參數並通過日志系統輸出推薦的參數。檢測尺寸對應於輸入視頻的黑色區域
它接受下面的參數:
-
limit
設置更高的黑色閥值。可以選擇從0到所有(255,基於8位格式)。一組強度值更大的價值被認為是黑色。它默認為24。你也可以指定一個值在0.0和1.0之間,將按比例根據像素格式的位深計算
-
round
設置可行(分割出)的寬/高分割基數,默認為16。偏移量自動調整到視頻的中心,對於平面維度采用2的倍數(4:2:2視頻需要的),16已經可以滿足大多數編碼要求了
-
reset_count, reset
設置在處理多少幀后計數器重置以重新檢測最佳裁剪區域。 默認為0.
它被用於通道標志混亂的視頻。0表示不復位,並返回已播放視頻的最大區域
curves
利用curves(曲線)實現顏色調整
這個濾鏡模擬Adobe Photoshop 和GIMP的curves
工具。每個分量(紅、綠和藍)都由定義的N
個節點相互作用成為光滑的曲線來調整輸入到輸出的關系。其中x軸是像素從輸入幀獲取的值,而y軸則是對應作為輸出幀的值(從而實現輸入到輸出的映射)。
默認原始的曲線實為(0,0)和(1,1)連接的直線。這種“變化”關系就是輸出=輸入,意味着沒有變化。
濾鏡允許根據設置的兩點或者更多點產生一個新的分量關系曲線(采用自然三次樣條插值法依次連接各個點形成的平滑曲線)。所有的點坐標中x和y值范圍在[0,1],超出定義域的點都被拋棄。
如果定義中沒有關鍵點定義在x=0,則自動添加點(0,0),類似,如果沒有關鍵點定義在x=1,則自動添加一個(1,1)點。
下面是濾鏡允許的選項:
-
preset
選定一個顏色預置(配置)。這個選項用在除了r,g,b選項的設置。在這種情況下,在后的選擇作為實際預置。可用的預置有:
‘none’
‘color_negative’
‘cross_process’
‘darker’
‘increase_contrast’
‘lighter’
‘linear_contrast’
‘medium_contrast’
‘negative’
‘strong_contrast’
‘vintage’默認為none.
-
master, m
設置主要的關鍵點。這些關鍵點用於定義第二個通過映射。它們有時調用"luminance" 或者 "value"映射。它們可以被用於r, g, b 或者 all,因為它們更像一個后處理LUT。
-
red, r
對紅色分量指定關鍵點
-
green, g
對綠色分量指定關鍵點
-
blue, b
對藍色分量指定關鍵點
-
all
設置針對所有分量的關鍵點(對復合信號,但不包括主要的——即對單獨設置了的分量外的其他分量的處理), 在這種情況下,沒有單獨設置的分量都采用這里的設置
-
psfile
指定一個Photoshop曲線文件(.asv)來導入設置
curves例子
-
略有增加中間層次的藍色:
curves=blue='0.5/0.58'
-
復古的效果:
curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
在這里,我們為每個分量設置以下坐標:
red
(0;0.11) (0.42;0.51) (1;0.95)
green
(0;0) (0.50;0.48) (1;1)
blue
(0;0.22) (0.49;0.44) (1;0.80)
-
前面的例子也可以通過預置實現:
curves=preset=vintage
-
或者更簡單的:
curves=vintage
-
采用Photoshop預置並應用於綠色分量:
curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
dctdnoiz
采用2D DCT來降噪(頻域濾波)
濾鏡不能實時應用。
濾鏡接受下面的選項:
-
sigma, s
設置固定的噪聲標准差(西格瑪——sigma)
這里的
sigma
用於確定一個固定的閥值3*sigma
,每個DCT系數(絕對值)如果低於這個閥值則被丟棄(認為是噪聲)如果你需要更多高級的過濾特性,則需要
expr
默認為 0
-
overlap
為每個塊重疊的像素數。如果濾鏡非常慢,你可以降低這個值,從而在較少的成本下有效過濾各種紋理
如果重疊值不允許處理整個輸入寬度或高度,將顯示一個警告,且在邊界不會運用
默認為blocksize-1,它通常是一個最佳設置
-
expr, e
設置系數表達式
對於每個DCT塊的系數,表達式會計算得出一個乘數系數值
如果這里被設置,則
sigma
選項被忽略系數的絕對值可以通過
c
變量訪問到 -
n
按位寬設置塊尺寸。1遠遠小於n(1<<n),這決定於處理塊的寬度和高度
默認值是3(對應於8x8)和 4(對應於16x16),注意改變這個值將極大影響處理速度,同時一個更大的塊大小並不一定有好的降噪效果
dctdnoiz例子
-
以
sigma
為4.5降噪dctdnoiz=4.5
-
同上效果,但是采用了
expr
dctdnoiz=e='gte(c, 4.5*3)'
-
塊大小設置為16x16
dctdnoiz=15:n=4
decimate
定期重復的幀數丟棄
接受下面的選項:
-
cycle
指示要被丟棄的幀。設置為
N
表示如果一幀已經被重復N
次就被丟棄,默認為5 -
dupthresh
設置檢驗重復的閥值。如果幀間變化量小於等於閥值則被認為是重復的。默認為1.1.
-
scthresh
設置場景變化閥值,默認為15
-
blockx
-
blocky
設置x或y軸大小,其用於度量計算內存。更大的內存塊可以更好的實現噪聲抑制,但小的運動檢測效果也越差。 必須是2的冪。,默認為32
-
ppsrc
標記一個輸入是有預處理的,還有一個是原始源。它允許通過輸入(經各種濾鏡)預處理的源和原始源來更好的無損保持內容。設置為1時,第一個輸入是經過預處理的輸入流,第二個流是清潔源,其保留了原始的幀(信息)。 默認為0.
-
chroma
設置顏色通道是否也用這個矩陣計算。默認為1
dejudder
刪除部分隔行電視電影的內容產生的顫動
顫動可被引發,例如通過pullup
濾鏡,如果原始內容經pullup
產生向上的爬動效應,dejudder
可以引入動態幀頻來消除。它可能會改變容器的幀頻記錄,除了這個改變,濾鏡不會影響固定幀頻視頻的其他地方。
下面的選項被允許:
-
cycle
指定顫抖的重復窗口的長度
接受一個大於1的整數,常用值有:
‘4’
常用於把24幀電影轉換為30幀的NTSC信號
‘5’
用於把25幀的PAL轉換為30幀的NTSC
‘20’
前倆個的混合
默認為‘4’.
delogo
通過一個簡單的插值周圍像素來抑制台標。僅需要在台標周圍設置一個矩形遮蓋就可以消除台標(有時會出現莫名的東西)
它接受下面的參數:
-
x
-
y
指定台標覆蓋的x和y坐標,必須被設置
-
w
-
h
指定覆蓋的寬和高,必須被設置(聯合前面的x和y就定義了一個矩形覆蓋區)
-
band, t
指定矩形的邊緣模糊厚度(添加到w和h),默認為4
-
show
但設置為1時,一個綠色的矩形被簡單填充到覆蓋區。默認為0,這時采用的區域內像素填充計算方法為:矩形內,畫在最外層的像素將(部分)內插替換值。下一個像素的值在每個方向用於計算矩形內的內插像素值。
delogo例子
-
采用默認方法,在坐標(0,0)采用100x77,模糊10的台標覆蓋:
delogo=x=0:y=0:w=100:h=77:band=10
deshake
嘗試在小的范圍內去除/修復 水平/垂直變化。用於去除手持、或者旋轉三腳架以及在移動車輛上拍攝的抖動(防抖效果)
接受下面的選項
-
x
-
y
-
w
-
h
定義一個處理區域,它限定了動態監測搜索范圍。它定義了有限運動矢量的左上角位置以及寬度和高度。這些參數隨着
drawbox
濾鏡一樣有相同的意義,可以用來界定想象的邊界位置對於同時運動(比如在車上拍攝),它十分有用,因為主題框架內混淆了本身有益的運動和無意的抖動,通過限定可以有效的區分,減少搜索難度。
如果這些參數中的一個或者所用被設置為-1則意味着在全幀應用。這使得后來選項設置不指定的邊界框運動矢量搜索
默認為搜索整個幀
-
rx
-
ry
指定最大程度x和y方向運動范圍,值范圍為0-64像素,默認為16.
-
edge
指定如何生成像素來填補空白的邊緣。可用值:
‘blank, 0’
在空白的地方填零
‘original, 1’
填充原始圖像(背景部分) locations
‘clamp, 2’
在空白地方擠壓邊緣值
‘mirror, 3’
在空白位置反映邊緣
默認為 ‘mirror’.
-
blocksize
指導用於運動檢測的塊尺寸,范圍4-128像素,默認8.
-
contrast
指定塊的對比度閾值。只有塊超過指定的對比(黑暗和輕的像素)將被考慮。范圍1-255,默認125 。
-
search
指定的搜索策略。可用值:
‘exhaustive, 0’
窮舉搜索
‘less, 1’
不詳盡的搜索
默認‘exhaustive’.
-
filename
如果設置,那么運動搜索的詳細日志寫入指定的文件
-
opencl
如果設置為1時,指定使用OpenCL功能,只在編譯FFmpeg時配置了
——enable-opencl
可用。默認值是0。
detelecine
使用電視電影的逆操作。它需要一個預定的模板指定使用過的模式(必須同原始操作一樣的參數)
濾鏡接受下面的選項:
-
first_field
‘top, t’
頂場優先
‘bottom, b’
底場優先
默認為top.
-
pattern
一串數字表示您想要應用的下拉模式。默認值是23。
-
start_frame
許多代表第一幀的位置對電視電影模式,這用於流被剪輯過。默認值是0。
drawbox
在輸入圖像上畫一個顏色區塊。
它接受下面的參數:
-
x
-
y
指定區塊的x和y坐標,可以是表達式,默認為0
-
width, w
-
height, h
指定表示區塊寬和高的表達式,如果為0表示整個輸入的寬和高,默認為0
-
color, c
指定填充顏色。語法詳見顏色/color中的介紹。如果指定的值是
invert
,則區塊邊緣顏色采用視頻該處顏色的反亮(這樣可以襯托出區域)。 -
thickness, t
設置邊緣寬度的表達式,默認為3.
各個表達式接受的值見下面的介紹。
對於 x, y, w 和 h 以及t是表達式時,可以包括下面的內容:
-
dar
輸入的顯示長寬比,它即為 (w / h) * sar.
-
hsub
-
vsub
水平和垂直色度量化分量值,例如對於"yuv422p"像素格式,hsub為2,vsub為1
-
in_h, ih
-
in_w, iw
輸入的寬和高
-
sar
輸入樣本點的長寬比
-
x
-
y
區塊的x和y坐標偏移
-
w
-
h
區塊的寬和高
-
t
區塊邊緣厚度
這些x, y, w, h 和 t常(變)量都允許相互在表達式中引用,例如可以設置 y=x/dar 或 h=w/dar.
drawbox例子
-
在輸入圖像上畫一個黑塊
drawbox
-
采用50%透明的紅色畫一個區塊
drawbox=10:20:200:60:red@0.5
也可以寫為
drawbox=x=10:y=20:w=200:h=60:color=red@0.5
-
采用
pink
填充一個區塊drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
-
畫一個2像素紅,有2.40:1的遮蓋區域
drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t2:h=iw/2.4+t2:t=2:c=red
drawgrid
在輸入圖像上畫上網格線(外框)
接受下面的參數:
-
x
-
y
指定區塊的x和y坐標,可以是表達式,默認為0
-
width, w
-
height, h
指定表示區塊寬和高的表達式,如果為0表示整個輸入的寬和高采用最小的
thickness
划線,默認為0. -
color, c
指定填充顏色。語法詳見顏色/color中的介紹。如果指定的值為
invert
,則網格線采用視頻該處的反亮顏色繪制。 -
thickness, t
設置邊緣寬度的表達式,默認為1.
各個表達式接受的值見下面的介紹。
對於 x, y, w 和 h 以及t是表達式時,可以包括下面的內容:
-
dar
輸入的顯示長寬比,它即為 (w / h) * sar.
-
hsub
-
vsub
水平和垂直色度量化分量值,例如對於"yuv422p"像素格式,hsub為2,vsub為1
-
in_h, ih
-
in_w, iw
輸入的寬和高
-
sar
輸入樣本點的長寬比
-
x
-
y
區塊的x和y坐標偏移
-
w
-
h
區塊的寬和高
-
t
區塊邊緣厚度
這些x, y, w, h 和 t常(變)量都允許相互在表達式中引用,例如可以設置 y=x/dar 或 h=w/dar.
drawgrid例子
-
以2像素寬度繪制一個100x100的網格,顏色是紅色,透明度50%
drawgrid=width=100:height=100:thickness=2:color=red@0.5
-
在圖像上繪制3x3網格,透明度50%
drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
drawtext
在視頻的上繪制文本或者描述於文件的文本塊,使用了libfreetype
庫。
為了允許這個濾鏡,在編譯時需要配置--enable-libfreetype
,為了允許默認的字體回調和font
選項,還需要配置--enable-libfontconfig
。為了允許text_shaping
選項,還需要配置--enable-libfribidi
drawtext語法
它接受如下參數:
-
box
設置是否在文本下襯一個背景顏色,1為要,0為不要,默認為0
-
boxborderw
設置背景塊邊緣厚度(用於在背景塊邊緣用
boxcolor
再圍繞畫一圈),默認為0 -
boxcolor
設置用於繪制文本底襯的顏色。語法詳見顏色/color中的介紹。
默認為"white".
-
borderw
使用
bordercolor
顏色繪制的文字邊緣厚度,默認為0 -
bordercolor
繪制文本襯底的顏色。語法詳見顏色/color中的介紹。
默認為"black".
-
expansion
設置文本擴展模式。可以為
none
,strftime
(已棄用了) 或normal
(默認). 見后面文本擴展中的詳細介紹 -
fix_bounds
如果為true,檢查和修復文本坐標來避免剪切
-
fontcolor
設置文本顏色。語法詳見顏色/color中的介紹。
默認為"black".
-
fontcolor_expr
用於計算獲得動態
fontcolor
值的字符串表達式。默認為控,即不處理。當被設置時將把計算結果覆蓋fontcolor
選項 -
font
設置選用的字體,默認為Sans.
-
fontfile
指定字體文件。信息中包括路徑。這個參數在
fontconfig
被禁用時必須設置 -
draw
這個選項已不存在,參考
timeline
系統(時間線) -
alpha
設置繪制的文本透明度,值范圍為0.0-1.0。而且還可以接受x和y的變量。請參閱
fontcolor_expr
-
fontsize
設置字體大小,默認為16 drawing text. The default value of fontsize is 16.
-
text_shaping
如果設置為1,則試圖整理文本排列順序(例如阿拉伯語是按從右到左排序),否則按給定的順序從左到右排,默認為1
-
ft_load_flags
這些標志用於加載字體
這些標志對應於
libfreetype
支持的標志,並結合下面的值:default
no_scale
no_hinting
render
no_bitmap
vertical_layout
force_autohint
crop_bitmap
pedantic
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint默認值為 "default".
要了解更多信息,請參考文檔中
libfreetype
標志的FT_LOAD_*
部分。 -
shadowcolor
陰影顏色。語法詳見顏色/color中的介紹。
默認為"black".
-
shadowx
-
shadowy
這里的x和y是字陰影對於字本體的偏移。可以是正數或者負數(決定了偏移方向),默認為0
-
start_number
起始幀數,對於
n/frame_num
變量。 默認為0 -
tabsize
用於呈現的區域數量空間大小,默認為4
-
timecode
設置初始的時間碼,以"hh:mm:ss[:;.]ff"格式。它被用於有或者沒有
text
參數,此時timecode_rate
必須被指定 -
timecode_rate, rate, r
設置時間碼
timecode
的幀率(在timecode
指定時) -
text
要被繪制的文本。文本必須采用
UTF-8
編碼字符。如果沒有指定textfile
則這個選項必須指定 -
textfile
一個文本文件,其內容將被繪制。文本必須是一個
UTF-8
文本序列如果沒有指定
text
選項,則必須設定。如果同時設定了
text
和textfile
將引發一個錯誤 -
reload
如果設置為1,
textfile
將在每幀前加載。一定要自動更新它,或者它可能是會被讀取的或者失敗 -
x
-
y
指定文本繪制區域的坐標偏移。是相對於圖像頂/左邊的值
默認均為"0".
下面是接受的常量和函數
對於x和y是表達式時,它們接受下面的常量和函數:
-
dar
輸入顯示接受的長寬比,它等於 (w / h) * sar
-
hsub
-
vsub
水平和垂直色度分量值。例如對於"yuv422p"格式像素,
hsub
為2,vsub
為1 -
line_h, lh
文本行高
-
main_h, h, H
輸入的高
-
main_w, w, W
輸入的寬
-
max_glyph_a, ascent
從基線到最高/上字形輪廓高點(所有內容的最高點)的最大距離。必須是一個正值,因為網格與Y軸方向關系使然
-
max_glyph_d, descent
從基線到最低/下字形輪廓高點(所有內容的最高點)的最大距離。必須是一個負值,因為網格與Y軸方向關系使然
-
max_glyph_h
最大字形高度,限定了所有單個字的高度,如果設置值小於實際值,則輸出可能覆蓋到其他行上
-
max_glyph_w
最大字形寬度,限定了所單個字顯示的寬度,如果設置值小於實際值,則發生字重疊
-
n
輸入幀序數,從0計數
-
rand(min, max)
返回一個min和max間的隨機數
-
sar
輸入樣本點的長寬比
-
t
以秒計的時間戳。如果無效則為
NAN
-
text_h, th
渲染文本的高
-
text_w, tw
渲染文本的寬
-
x
-
y
文本的x和y坐標。
所有參數都允許
x
和y
被引用,例如y=x/dar
文本擴展
如果expansion
設置為strftime
,則濾鏡會接受strftime()
序列提供的文本並進行相應擴展。檢查strftime()
的文檔。這個特性現在是棄用的。
如果expansion
設置為none
,則文本都是直接打印文本(即直接以文本內容不擴展進行輸出)
如果expansion
設置為normal
(它是默認值),將應用下面的擴展規則。
序列形式${...}
的內容將被擴展。大括號之間的文本是一個函數的名字,可能緊隨其后是一些用:
隔開的參數。如果包含特殊字符或分隔符(這里是:
或者}
),它們應該被轉義。
注意對於在作為濾鏡參數的text
選項值,或者濾鏡鏈圖中的參數(多個濾鏡連接時)以及是在shell
環境中使用,則可能需要4層轉義。使用文本文件可以避免這些問題(減少轉義的使用)。
下面是有效的函數(功能):
-
expr, e
計算結果的表達式
它必須有一個參數來計算,接受計算x和y相同的常數和函數。注意並不是所有的常數都適合,例如
text_w
和text_h
在此時還是一個未定義值(因為這兩個值依賴於這里計算結果) -
expr_int_format, eif
把表達式求值和輸出格式化為整數
第一個參數是用於計算的表達式,就像是
expr
函數(包括了變量/常量等),第二個參數指定輸出格式,允許‘x’, ‘X’, ‘d’ 和 ‘u’,其意義同於printf
函數(C語言)中的意義。第三個參數是可選的,用來設置格式化為固定位數,左邊可以用0來填補。 -
gmtime
設置濾鏡運行時間,是UTC時間。它接受一個
strftime()
格式字符串參數 -
localtime
濾鏡運行的本地時間,它以本地時區表示的時間。它接受一個
strftime()
格式字符串參數 -
metadata
幀的元數據。它必須有一個指定元數據鍵的參數
-
n, frame_num
幀序數,從0開始計數
-
pict_type
一個字符描述當前圖片類型
-
pts
當前幀的時間戳。它可以有2個參數
第一個參數是時間戳格式,默認為
flt
是秒格式,其有微秒級精度;hms
則代表[-]HH:MM:SS.mmm
格式時間戳表示,其也有毫秒精度。第二個參數是添加到時間戳的偏移量
drawtext例子
-
以FreeSerif字體繪制 "Test Text" ,其他可選參數均為默認值
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
-
以FreeSerif字體,24大小在x=100 和y=50位置 繪制 ’Test Text’ ,字體采用黃色且還有紅色邊緣,字體和襯底軍為20%透明度
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':
x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"注意如果不是參數列表則不一定采用雙引號來標識范圍
-
把字顯示在視頻中間(計算位置)
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
-
在視頻幀的最后一排從右向左滑動顯示一個文本行。假設文件LONG_LINE僅包含一行且沒有換行。
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
-
從下向上顯示文本行內容
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
-
在視頻中間以綠色繪制單獨的字符"g"。文本基線放置在視頻半高位置
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
-
每3秒顯示文本1秒
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t,3),1):text='blink'"
-
采用
fontconfig
來設置字體。注意冒號需要轉義drawtext='fontfile=Linux Libertine O-40:style=Semibold:text=FFmpeg'
-
輸出實時編碼日期(參考
strftime(3)
):drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
-
以淡入淡出顯示文本 (顯示/消失)
#!/bin/sh
DS=1.0 # display start
DE=10.0 # display end
FID=1.5 # fade in duration
FOD=5 # fade out duration
ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\: clip(255*(1*between(t\, $DS + $FID\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\, $DS\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\, $DE - $FOD\, $DE) )\, 0\, 255) \\: x\\: 2 }"
關於libfreetype
, 參考http://www.freetype.org/
對於fontconfig
,參考http://freedesktop.org/software/fontconfig/fontconfig-user.html.
對於libfribidi
, 參考http://fribidi.org/.
edgedetect
檢測邊緣。濾鏡采用精明邊緣檢測(Canny Edge Detection)算法
接受下面的選項:
-
low
-
high
設置檢測算法邊緣探測的低和高的閥值。
high
閥值選擇強有力
的邊緣像素,然后通過8向鄰接檢測軟弱
到low
閥值,從而標注出邊緣low
和high
的值范圍為[0,1],且low
<=higt
默認
low
為20/255,high
為50/255. -
mode
定義繪制(邊緣)模式
‘wires’
繪制一個 white/gray間隔線在黑背景上
‘colormix’
混合顏色創建一個油漆/卡通效果
默認為 wires.
edgedetect例子
-
采用了自定義滯后閥值的標准邊緣檢測
edgedetect=low=0.1:high=0.4
-
繪畫效果沒有閾值(因為high設置為0,low必須小於等於high則只能為0了)
edgedetect=mode=colormix:high=0
eq
設置亮度、對比度、飽和度和近似伽馬(gamma)調整
濾鏡支持下面選項:
-
contrast
設置contrast表達式,值必須是一個-2.0-2.0間的浮點數,默認為0
-
brightness
設置brightness表達式.值必須是一個-1.0-1.0間的浮點數,默認為0
-
saturation
設置saturation表達式. 值必須是一個0-3.0間的浮點數,默認為1
-
gamma
設置gamma表達式 ,值必須是一個0.1-10.0間的浮點數,默認為1
-
gamma_r
設置gamma表達式,對紅色. 值必須是一個0.1-10.0間的浮點數,默認為1
-
gamma_g
設置gamma表達式,對綠色. 值必須是一個0.1-10.0間的浮點數,默認為1
-
gamma_b
設置gamma表達式,對藍色. 值必須是一個0.1-10.0間的浮點數,默認為1
-
gamma_weight
設置gamma權重表達式.它可以用來減少高伽馬值在明亮的圖像區域影響,例如只是普通的白色放大,而其它保持不變。值必須是一個在0.0到1.0范圍的浮點數。值為0.0時把伽馬校正效果最強,為1.0沒有效果。默認設置是“1”。
-
eval
設置brightness, contrast, saturation 和 gamma是表達式時的計算模式S
它接受下面值:
‘init’
僅在濾鏡初始化或者命令被處理時計算
‘frame’
每幀計算
默認為‘init’.
下面是表達式中接受的參數:
-
n
幀序數,從0計數
-
pos
當前包在文件中的偏移,如果沒有定義則為
NAN
-
r
輸入視頻幀率,如果無效則為
NAN
-
t
以秒計的時間戳,如果輸入時間戳無效則為
NAN
eq命令
濾鏡也接受下面的命令:
-
contrast
設置contrast表達式
-
brightness
設置brightness表達式
-
saturation
設置saturation表達式
-
gamma
設置gamma表達式
-
gamma_r
設置gamma_r表達式
-
gamma_g
設置gamma_g表達式
-
gamma_b
設置gamma_b表達式
-
gamma_weight
設置gamma_weight表達式
命令接受對應選項中相同的語法
如果指定的表達式是無效的,則保持當前值
extractplanes
從輸入流分離單獨的顏色通道成為灰度視頻流
濾鏡接受下面選項:
-
planes
設置要提取的通道
接受下面的值(標識通道):
‘y’
‘u’
‘v’
‘a’
‘r’
‘g’
‘b’選擇無效的值會產生錯誤。這也意味着同時你只能選擇
r, g, b和y
,或者y, u, v
extractplanes例子
-
提取亮度和
u
和v
顏色分量到3個灰度輸出。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
elbg
應用多色調分色印效果,使用了ELBG(增強型LBG)算法。(構建顏色模板)
對每個輸入圖像,濾鏡會對於給定編碼長度計算最優的從輸入到輸出的的映射,它們對應於不同的輸出顏色的數量
濾鏡接受下面的選項:
-
codebook_length, l
設置編碼長度,值必須是正整數,代表不同的輸出顏色數量,默認為256
-
nb_steps, n
設置計算最優映射的最大迭代數。值越高,結果越好,但越耗時。默認為1
-
seed, s
設置一個隨機種子,必須是0-UINT32_MAX間的整數,如果不指定,或者設置為-1 ,則會自動選擇一個好的隨機值
fade
應用淡入/淡出
它接受下面參數:
-
type, t
指定類型是
in
代表淡入,out
代表淡出,默認為in
-
start_frame, s
指定應用效果的開始時間,默認為0.
-
nb_frames, n
應用效果的最后一幀序數。對於淡入,在此幀后將以本身的視頻輸出,對於淡出此幀后將以設定的顏色輸出,默認25.
-
alpha
如果設置為1,則只在透明通道實施效果(如果只存在一個輸入),默認為0
-
start_time, st
指定按秒的開始時間戳來應用效果。如果
start_frame
和start_time
都被設置,則效果會在更后的時間開始,默認為0 -
duration, d
按秒的效果持續時間。對於淡入,在此時后將以本身的視頻輸出,對於淡出此時后將以設定的顏色輸出。如果
duration
和nb_frames
同時被設置,將采用duration
值。默認為0(此時采用nb_frames
作為默認) -
color, c
設置淡化后(淡入前)的顏色,默認為"black".
fade例子
-
30幀開始淡入
fade=in:0:30
-
等效上面
fade=t=in:s=0:n=30
-
在200幀視頻中從最后45幀淡出
fade=out:155:45
fade=type=out:start_frame=155:nb_frames=45 -
對1000幀的視頻25幀淡入,最后25幀淡出:
fade=in:0:25, fade=out:975:25
-
讓前5幀為黃色,然后在5-24淡入:
fade=in:5:20:color=yellow
-
僅在透明通道的第25開始淡入
fade=in:0:25:alpha=1
-
設置5.5秒的黑場,然后開始0.5秒的淡入:
fade=t=in:st=5.5:d=0.5
fftfilt
在頻域內應用任意表達式於樣品
-
dc_Y
調整亮度dc值(增益),范圍0-1000,默認為0
-
dc_U
調整色度第1分量dc值(增益),范圍0-1000,默認為0
-
dc_V
調整色度第2分量dc值(增益),范圍0-1000,默認為0
-
weight_Y
設置對於亮度的頻域權重表達式
-
weight_U
設置對於色度第1分量的頻域權重表達式
-
weight_V
設置對於色度第2分量的頻域權重表達式
濾鏡接受下面的變量:
-
X
-
Y
對應當前樣本點的坐標
-
W
-
H
當前圖像的寬和高
fftfilt例子
-
高通:
fftfilt=dc_Y=128:weight_Y='squish(1-(Y+X)/100)'
-
低通:
fftfilt=dc_Y=0:weight_Y='squish((Y+X)/100-1)'
-
銳化:
fftfilt=dc_Y=0:weight_Y='1+squish(1-(Y+X)/100)'
field
使用步算法從隔行圖像中提取單個場來避免浪費CPU時間。標記為逐行輸出幀。
濾鏡接受下面選項:
-
type
指定是
top
(或者0)還是bottom
(或者1)類型的場
fieldmatch
場匹配用於反轉電視(隔行)電影。它為了從電視流中建立起逐幀電影,需要過濾保留部分重復幀,為了更好的對壓縮轉換電視fieldmatch
濾鏡需要跟隨一個decimate
濾鏡之類的抽取濾鏡。
為了更好的分離和抽取,需要在兩個濾鏡間插入一個反交錯濾鏡。如果源是混合了電視電影和現實的內容,則單獨的fieldmatch
濾鏡不足以分離出交錯內容,所以需要一個諸如yadif
之類的反交錯濾鏡來進一步標記剩余的交錯內容,以便於后面的抽取。
除了各種配置選項,fieldmatch
可以通過ppsrc
可選項啟用第二個流。如果被允許,將基於第二個流進行幀的重建。它允許第一個流作為預處理來幫助各種濾鏡算法實現無損輸出(減少能正確匹配)。通常一個field-aware
降噪,或者亮度/對比度調整可以實現這一的幫助。
注意濾鏡使用如TIVTC/TFM (AviSynth項目)和 VIVTC/VFM(VapourSynth項目)的相同算法。fieldmatch
有一點克隆TFM的意味,除了一些行為和選項不同外,語義和用法很接近。
當前decimate
濾鏡僅工作在固定幀率視頻。在輸入視頻是混合了電視電影和逐場內容且是變幀率時不能使用fieldmatch
和decimate
濾鏡接受下面的選項:
order
指定輸入流的場序。可用值:
‘auto’
自動探測 (采用FFmpeg內部校驗值).
‘bff’
設置為下場優先
‘tff’
設置為上場優先
**注意**不要太信任流的宣稱值(即需要嘗試探測)
默認為auto.
mode
設置匹配模式或采用的策略. `pc`模式是最安全的,不會產生抖動,但其對於錯誤編輯或者混合會被輸出,而實際有更好的匹配結果(即檢測不出最好匹配結果)。在其他處理中`pcn_ub`模式最有可能出現創建抖動的危險,但如果存在最好匹配則一定可以檢測出。其他模式介於二者之間。
更多關於p/c/n/u/b 的有效性見 p/c/n/u/b 意義部分。
有效值有:
‘pc’
2路匹配 (p/c)
‘pc_n’
2路匹配,並嘗試第3路 (p/c + n)
‘pc_u’
2路匹配,並嘗試第3路 (同`order`)對應 (p/c + u)
‘pc_n_ub’
2路匹配,並嘗試第3路, 並可嘗試第4/第5匹配(p/c + n + u/b)
‘pcn’
3路匹配 (p/c/n)
‘pcn_ub’
3路匹配,並嘗試第4/第5匹配 (p/c/n + u/b)
括號中的模式匹配是假設order=tff (場序是自動或者上場優先).
pc模式最快,而pcn_ub則最慢
默認為pc_n.
ppsrc
標記主要輸入作為預處理輸入,而且允許第二個輸入流作為干凈源。參考濾鏡介紹以了解更多詳細信息。它類似於VFM/TFM 的clip2特性.
默認為0 (表示禁止).
field
設置場序,它建議設置為同`order`,除非你嘗試的結果是失敗。在某些情況下改變設置可以產生很大的匹配性能影響,可用值有:
‘auto’
自動 (同於`order`中的介紹).
‘bottom’
下場優先
‘top’
上場優先
默認為auto.
mchroma
設置色度信號是否包含在比較判斷中。大多數情況下建議不專門設置。僅當影片中包含壞的色度問題如有大片的彩虹或者其他工件時才該設置為0。設置為0也可以加快處理但會造成精度的降低
默認為1.
y0
y1
這些定義用來明確一個范圍,以除去(忽略)字幕、台標或者其他可能干擾匹配的東西。其中y0設置掃描的開始行,y1設置掃描的結束行(包括y0和y1,之外的部分被忽略),如果y0和y1設置為相同的值將禁用這個特性。y0和y1都默認為0
scthresh
設置在亮度上場景變化最大百分比數, 好的值范圍為[8.0, 14.0],場景變化檢測只是在combmatch=sc有效. 可用值范圍[0.0, 100.0].
默認為12.0.
combmatch
當設置為非`none`, `fieldmatch`會在更多的情況中梳理出合適的結果。有效值:
‘none’
梳理多種可能但沒有最優結果
‘sc’
在采用了場景改變檢測基礎上梳理結果
‘full’
全時梳理結果
默認為sc.
combdbg
強制`fieldmatch`對某些指標匹配並輸出。這個設置在TFM/VFM中被稱為`micout`,有效值有:
‘none’
沒有強制
‘pcn’
強制p/c/n
‘pcnub’
強制p/c/n/u/b.
默認none.
cthresh
用於控制梳理檢測的閥值。它實質上控制“強烈”或“可見”的交錯必須被檢測到。大的值意味着必須有更多差異才能被檢驗到,小的值則允許很少的交錯(量)就會被檢測到。有效值為-1(像素級的檢測)到255(沒有像素會被作為交錯檢驗出來),這基本上是一個像素值的差異,好的范圍是[8, 12].
默認為9.
chroma
決定是否把色度檢測包含在匹配模式中。如果源中存在色度問題(彩虹)則必需要禁用。實際上設置`chroma=0`通常就足夠可靠了,除非你確實在源中包含了色度需要被檢測
默認為0.
blockx
blocky
設置檢測窗的x和y軸尺寸。它協同`combpel`領域像素一起來聲明梳理框架。參考`combpel`介紹了解更多信息。可能值是2的冪數,從4到512。
默認為16.
combpel
在梳理檢測窗中梳理像素的數量。雖然`cthresh`控制了必須是“可見”的才被梳理(即精度),而這個參數控制了在局部(檢測窗)中有“多少”則被檢出,最小為0,最大為`blocky x blockx`(它們定義了整個檢測窗)。它類似於TFM/VFM中的MI
默認為80.
p/c/n/u/b的意義
p/c/n
我們假定有下如下的電視電影流:
Top fields: 1 2 2 3 4
Bottom fields: 1 2 3 4 4
對應的數字對應需處理的場。在這里前2幀是需要的,3和4則被梳理,等等
當fieldmatch
被配置運行在field=bottom
時,輸入流被如下傳輸:
輸入流:
T 1 2 2 3 4
B 1 2 3 4 4 <-- 匹配參考
匹配檢測: c c n n c
輸出流:
T 1 2 3 4 4
B 1 2 3 4 4
作為一個場匹配的結果,我們可以看到一些幀被復制了。為了完整實現電視電影的逆轉換,你需要依靠后續的濾鏡去除掉重復的幀。參考decimate
濾鏡。
如果相同的處理但配置為field=top
,結果會:
輸入流:
T 1 2 2 3 4 <-- 匹配參考
B 1 2 3 4 4
匹配檢測: c c p p c
輸出流:
T 1 2 2 3 4
B 1 2 2 3 4
在這些例子里,我們可以看出p
、c
和n
的意義。基本上,它們指出參考幀的位置(關系)
-
p,匹配於前一幀
-
c,匹配於當前幀
-
n,匹配於下一幀
u/b
這里的u
和b
是在匹配幀基礎上的位級描述。在下面的例子中,我們假定當前匹配了2個幀(Top:2 ,bottom:2),根據匹配,一個x
是在每個匹配場景的上方和下方:
對於field=bottom
的匹配
匹配: c p n b u
x x x x x
Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
x x x x x
輸出幀:
2 1 2 2 2
2 2 2 1 3
對於field=top
的匹配
匹配: c p n b u
x x x x x
Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
x x x x x
輸出幀:
2 2 2 1 2
2 1 3 2 2
fieldmatch例子
-
簡單的IVTC 有上場優先的視頻電影流:
fieldmatch=order=tff:combmatch=none, decimate
-
高級IVTC,由后續
yadif
繼續處理:fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
fieldorder
改變輸入的場序
接受下面的參數:
-
order
輸出場序。有效值有
ttf
對應的上場優先和bff
對應的下場優先
默認是tff
轉換是將圖像內容向上或者向下一行,並填充其余部分以符合圖像內容。該方法適合大多數廣播電視的場序轉換
如果輸入視頻沒有標記為交錯,或者已經標記為所需場序,則濾鏡不會改變輸入視頻
它常用於轉換到PAL DV格式,它是下場優先的。
例如:
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
fifo
緩沖輸入並在需要時送出
它常用於libavfilter
的自動插入(保證一些連接有效)
它沒有參數
find_rect
找到一個矩形對象
它接受下面的選項:
-
object
對象圖像的文件路徑,需要是gray8.
-
threshold
探測閥,默認0.5.
-
mipmaps
最小的貼圖, 默認為3.
-
xmin, ymin, xmax, ymax
指定矩形對象檢測的范圍(xmin,ymin)(xmax,ymax)定義的一個矩形中
find_rect例子
-
對視頻生產一個調色板視頻
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
cover_rect
覆蓋一個矩形對象
它接受下面的選項:
-
cover
用作覆蓋的圖像路徑,需要是yuv420.
-
mode
設置覆蓋模式
接受下面的值:
‘cover’
蒙在表面
‘blur’
同周邊插值來覆蓋
默認blur.
cover_rect例子
-
對視頻生產一個調色板視頻
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
format
轉換輸入視頻為指定的像素格式。libavfilter
嘗試為下一個濾鏡輸入選擇一個合適的輸出(而自動采用)。
它接受下面的參數:
-
pix_fmts
一個用
|
分隔的像素格式名列表,例如"pix_fmts=yuv420p|monow|rgb24".
format例子
-
轉換輸出為
yuv420p
格式format=pix_fmts=yuv420p
轉換輸入到列表的任何格式之一
format=pix_fmts=yuv420p|yuv444p|yuv410p
fps
通過復制或者丟棄幀來把幀率調整為一個近似固定值
它接受下面的參數:
-
fps
目標幀率,默認25
-
round
舍入方法.
可能值:
zero
對0舍入(去小數),絕對值最小
inf
從0開始的園
down
向負無窮舍入(去除小數)
up
向正無窮舍入(見小數加1)
near
舍入到近似值(命名的頻率)
默認為near.
-
start_time
假設第一個
PTS
是一個按秒的給定值。它允許填補/去除流的開始。默認沒有需要填補/去除。例如設置為0,將會在視頻流后於音頻流時在前面添加黑幀,否則去除早於音頻流的負幀。
另外,選項可以指定為一個平面字符串形式:fps[:round]
參考setpts
濾鏡
fps例子
-
輸出25幀頻
fps=fps=25
-
輸出24幀頻,使用了幀頻縮寫名和舍入方法為最接近
fps=fps=film:round=near
framepack
包兩個不同的視頻流到立體視頻,設置適當的元數據支持的編解碼器。兩個視角視頻需要有相同的尺寸與幀頻以及以短的視頻為停止時間。注意你可能需要預先通過scale
和fps
調整。
接受下面的參數:
-
format
設置包裝格式,支持:
sbs
一個視圖左另一個在右(默認).
tab
一個視圖在上,一個視圖在下
lines
視圖按線交錯(按行)
columns
視圖按列交錯
frameseq
視圖都暫時交錯
一些例子:
-
把左/右視圖以
frameseq
模式打包成立體視頻ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
-
把視圖以
sbs
模式交錯,還進行了放縮預處理ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
framestep
每N
幀選擇1幀
它接受下面選項:
-
step
設置間隔的
N
值。必須大於0,默認為1(這樣相當於不處理,完全輸出)
frei0r
對視頻采用frei0r
效果
編譯配置參數--enable-frei0r
接受下面的參數:
-
filter_name
設置加載的
frei0r
效果名。如果環境變量FREI0R_PATH
被定義,則將在其所指目錄搜索。FREI0R_PATH
是有,
分隔的多個路徑。通常frei0r
的搜索路徑是: HOME/.frei0r-1/lib/, /usr/local/lib/frei0r-1/, /usr/lib/frei0r-1/. -
filter_params
一個由’|’分隔的參數列表來傳遞給
frei0r
效果一個
frei0r
效果的參數是布爾值(為y
或者n
)、雙精度數、顏色值(以R/G/B形式描述,其中R、G和B是0.0-1.0間的浮點數)或者在顏色/color中定義的顏色名、位置量(以X/Y形式描述,X和Y均是浮點數)和/或 字符串參數的數量和類型要根據加載的效果,如果一個效果參數沒有指定則選用默認設置
frei0r例子
-
采用
distort0r
效果,參數有2個值。frei0r=filter_name=distort0r:filter_params=0.5|0.01
-
應用
colordistance
效果,有一個顏色值作為參數(下面3個形式等效)frei0r=colordistance:0.2/0.3/0.4
frei0r=colordistance:violet
frei0r=colordistance:0x112233 -
應用
perspective
效果,指定了圖像的左上和右上位置frei0r=perspective:0.2/0.2|0.8/0.2
關於frei0r
的更多信息參考http://frei0r.dyne.org
fspp
應用快速簡單的后處理,這是spp
濾鏡的快速版本
它分離 (I)DCT為水平/垂直 來傳遞,不同於簡單的 post
濾鏡,其中每個塊執行一次,而不是每個像素,則允許更快的速度。
濾鏡接受下面的選項:
-
quality
設置品質水平,它定義了平均水平數,接受4-5的整數,默認為4
-
qp
強制包含一個不斷量化參數,它接受0-63間的整數,如果不設定,濾鏡會使用視頻流的
QP
(如果有效) -
strength
設置濾鏡強度。它接受-15-30間的整數。越低表示更多細節但需要更多工作,高的值則圖像平滑(模糊)也更快,默認值為0——PSNR最佳
-
use_bframe_qp
為1則允許從B幀使用QP。使用它在大的QP時可能導致B幀閃爍。默認為0(不允許)
geq
濾鏡接受下面的選項:
-
lum_expr, lum
設置亮度表達式
-
cb_expr, cb
設置色度分量中藍色表達式
-
cr_expr, cr
設置色度分量中紅色表達式
-
alpha_expr, a
設置透明通道表達式Set the alpha expression.
-
red_expr, r
設置紅色表達式
-
green_expr, g
設置綠色表達式
-
blue_expr, b
設置藍色表達式
根據指定的選項來確定顏色空間。如果lum_expr
, cb_expr
, 或者cr_expr
中的一個被定義,則濾鏡自動選擇YCbCr
顏色空間,如果red_expr
, green_expr
,或 blue_expr
中有一個被定義則選擇RGB
顏色空間
如果其中一個顏色分量選項沒有被定義,則它等於前一個谷底值。如果alpha_expr
沒有被定義則認為是不透明的。如果沒有任何顏色分量被定義,它將只計算亮度表達式
表達式接受下面變量和函數:
-
N
幀序數,從0開始計數 from 0.
-
X
-
Y
當前樣本坐標
-
W
-
H
圖像寬和高
-
SW
-
SH
依賴當前濾鏡的放縮寬和高。它根據當前像素亮度數和當前平面的比例。例如對於YUV4:2:0給我餓死,這個值是1,1對應於亮度還有0.5,0.5 的顏色分量
-
T
按秒當前幀時間
-
p(x, y)
返回當前幀平面(x,y)點的像素值
-
lum(x, y)
返回當前幀平面(x,y)點的像素亮度值
-
cb(x, y)
返回當前幀平面(x,y)點的像素色度分量差藍色值,0表示沒有該分量
-
cr(x, y)
返回當前幀平面(x,y)點的像素色度分量差紅色值,0表示沒有該分量
-
r(x, y)
-
g(x, y)
-
b(x, y)
返回當前幀平面(x,y)點的像素紅/綠/藍值,為0表示沒有該顏色
-
alpha(x, y)
返回當前幀平面(x,y)點的像素透明通道值,為0表示沒有該值
對於函數,如果x和y超出了范圍,則值自動由影片邊緣值代替
geq例子
-
水平翻轉圖像
geq=p(W-X,Y) -
生成一個二維的正弦波,角π/ 3和100像素的波長:
geq=128 + 100sin(2(PI/100)(cos(PI/3)(X-50*T) + sin(PI/3)*Y)):128:128
-
生成一個花哨的神秘的光:
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N0.07)W/2-W/2,Y-sin(N0.09)H/2-H/2)^21000000sin(N*0.02):128:128
-
生成一個快速浮雕效果:
format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
-
根據像素的位置修改RGB分量:
geq=r='X/W*r(X,Y)':g='(1-X/W)g(X,Y)':b='(H-Y)/Hb(X,Y)'
-
創建一個徑向漸變,是相同的大小作為輸入(也見
vignette
濾鏡):geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
-
創建一個線性漸變使用作為另一個濾鏡的蒙版,然后用疊加組成。在本例中,視頻會從底部到頂部的y軸定義的線性梯度逐漸變得更加模糊:
ffmpeg -i input.mp4 -filter_complex "geq=lum=255*(Y/H),format=gray[grad];[0:v]boxblur=4[blur];[blur][grad]alphamerge[alpha];[0:v][alpha]overlay" output.mp4
gradfun
解決條帶效果,這是由於對於8位顏色深度有時會被就近截斷成平面(化),通過插入漸變來柔化它們
這個濾鏡僅用於回放。在有損壓縮前也不要使用它,因為壓縮本身就會損傷細節(漸變)而成為條帶
它接受下面的參數:
-
strength
濾鏡對任何像素最大的改變值。這也是檢測(顏色)平坦區域的閥值。取值范圍是.51 至64,默認為1.2.超出范圍的值會被被裁減為有效值
-
radius
指定合適的修正梯度。一個大的
radius
值會產生更平滑的過渡,也防止濾鏡修改處理區域附近的像素。接受的范圍為8-32,默認為16,超出范圍的值會被裁減以符合
另外,選項可以采用平面字符串的形式指定: strength[:radius]
gradfun例子
-
以3.5的
strength
和8的radius
值應用濾鏡:gradfun=3.5:8
-
指定
radius
,省略strength
(會采用默認值為1.2):gradfun=radius=8
haldclut
對視頻流采用Hald CLUT
第一個輸入是要處理的視頻,第二個則是Hald CLUT
,這個Hald CLUT
輸入可以是一張簡單的圖片或者復合視頻信號
濾鏡接受下述選項:
-
shortest
強制以最短輸入來總作為整個數出。默認為0
-
repeatlast
在結束后繼續以
CLUT
處理。值為0則禁止。默認為1.
haldclut
也有類似lut3d
相同的選項(兩個濾鏡共享相同的內部結構)。
關於Hald CLUT
可以通過Eskil Steenberg
(Hald CLUT的作者)的網站,在http://www.quelsolaar.com/technology/clut.html
haldclut工作流例子
Hald CLUT視頻流
-
生成一個
Hald CLUT
的流 ,流改變各種效果。ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2PIt:s=sin(2PIt)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
注意:確認你選用的是無損編碼
-
然后把濾鏡(隨
haldclut
)應用在隨機流。ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
這里
Hald CLUt
被用於前10秒(持續時間由clut.nut定義)。然后其最后的CLUT圖片應用到繼續的的mandelbrot
流上
帶預覽的Hald CLUT
一個Hald CLUT
支持作為有多層(Level*Level*Level
)像素的多層(Level*Level*Level
)圖像。 對於一個給定的Hald CLUT
,FFmpeg盡可能在圖像的左上開始選擇最大可能, 將選擇盡可能最大的廣場在圖片的左上角開始。剩下的填充像素(底部或右)將被忽略。這個區域可以用來添加一個預覽Hald CLUT
。.
通常,下面會利用haldclutsrc
生成一個支持haldclut
濾鏡的Hald CLUT
圖:
ffmpeg -f lavfi -i haldclutsrc=8 -vf "
pad=iw+320 [padded_clut];
smptebars=s=320x256, split [a][b];
[padded_clut][a] overlay=W-320:h, curves=color_negative [main];
[main][b] overlay=W-320" -frames:v 1 clut.png
它包含原始和CLUT的預覽效果:SMPTE顏色條被顯示在右上,其下顯示相同的顏色處理的顏色變化
然后,這Hald CLUT效果可以可視化:
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
hflip
水平翻轉輸入視頻
例如利用fmpeg水平翻轉輸入視頻:
ffmpeg -i in.avi -vf "hflip" out.avi
histeq
這個過濾器適用於每幀的基礎上的全局顏色直方圖均衡化
它被用於產生壓縮了像素強度的正確視頻。濾鏡在強度范圍內重新分配像素強度分布。它可被視為“自動調整對比度濾鏡"。濾鏡只適用於糾正退化或者較差質量的視頻采集
接受下面的選項:
-
strength
確定的數量均衡。隨着參數的降低,像素強度的分布在輸入幀中越來越多。值為浮點數,范圍為[0,1],默認0.200.
-
intensity
設置在生成的輸出中最大可能強度。
strength
設置表面了期望,而intensity
的設置強調了限制,從而避免了出現錯誤。值為浮點數,范圍為[0,1],默認0.210. -
antibanding
設置antibanding級別。如果啟用,濾鏡將通過隨機小批量改變輸出像素的亮度直方圖避免產生條帶。允許的值有
none
,weak
或strong
,默認為none
。
histogram
對輸入視頻計算並繪制一個顏色分布直方圖
它計算的直方圖代表了各種顏色分量在圖像中的分布情況。
濾鏡接受下面的選項:
-
mode
設置直方圖模式.
有下面的可能值:
‘levels’
顯示圖像顏色分量的標准直方圖。它顯示每個顏色分量圖形。依據輸入視頻可以顯示當前幀的`Y, U, V, A `或者`R, G, B`分量圖形。其下是每個圖像顏色分量的規模計
‘color’
在二維圖(這被稱為矢量監視器)中顯示色度通道值 (U / V顏色位置) 。像素矢量表示亮度,每個點對應代表輸入中的各個像素(都有其色度分量值)。V分量為水平(X)坐標,最左表示`V=0`,最右為`V=255`,U分量為垂直(Y)坐標,最上標識`U=0`,最下`U=255`. 圖中白色像素的位置對應一個像素的色度值輸入。因此該圖可以用來了解色相(顏色味道)和飽和度(顏色)的情況其反映了原始圖像的主導色調。顏色的色調變化圍繞着一個區域(監視器面),在區域的中心飽和度是0,則意味着對應的像素沒有顏色(白色,只有亮度值)。如果圖像中一個特定的顏色的數量增加(而其他顏色不變),即飽和度的增加,則在矢量監視器中顯示為整體偏向邊緣。
‘color2’
類似color以矢量監視器顯示,不過增加了實際色度值的顯示。
‘waveform’
每行(row)/列(colum)顏色分量圖形。在row模式,圖形左邊表示顏色分量為0,右邊為255,在column默認,頂部表示顏色分量值為0,底部為255
默認為
levels
模式 -
level_height
在
levels
模式中設置圖形高,默認200,允許[50, 2048]. -
scale_height
在
levels
設置顏色放縮高,默認12,允許[0, 40]. -
step
對
waveform
模式設置步長。小的值用於更多了解在相同亮度下顏色分布情況,默認10,允許 [1, 255] 。 -
waveform_mode
對
waveform
設置row
或者column
,默認row
-
waveform_mirror
對
waveform
設置鏡像模式,0表示不鏡像(默認),1表示鏡像。在鏡像模式中,對row
高值在左邊,對column
高值在上面 -
display_mode
設置
waveform
和levels
的顯示模式,它接受:‘parade’
依次排列各種顏色圖,`waveform`的`row`是從左到右,`column`是從上到下。`levels`中是從上到下。 `waveform`中應用這種模式可以容易的通過比較頂部與底部輪廓波形來區分高光和陰暗的顏色圖像,因為白、灰和黑的特點是完全相等的紅、綠和藍的混合。中性的圖片區域應該是這三種波形的大致相等的寬/高度。如果不是,則可以通過水平調整這三個波形來很容易的實現校正。
‘overlay’
除了表示顏色的圖形組件直接疊加在一起外,與`parade`模式展示的信息相同 在`waveform`中這樣的顯示模式更易於發現顏色的相對差異或相似。因為重疊區域的分量應該是相同的,如中性的白色、灰和黑
默認為
parade
-
levels_mode
對
levels
設置模式,可以是linear
或logarithmic
,默認linear
histogram例子
-
計算並繪制柱狀圖:
ffplay -i input -vf histogram
hqdn3d
這是一個高精度/質量的3D降噪濾鏡。它的目的是減少圖像噪聲,產生平滑的圖像和讓靜止圖像保存原樣。它可以提高壓縮率。
接受下面可選參數:
luma_spatial
非負浮點數來指明亮度強度。默認為4.0
chroma_spatial
非負浮點數來指明亮色強度,默認為`3.0*luma_spatial/4.0`.
luma_tmp
一個浮點數指明亮度臨時強度。默認為`6.0*luma_spatial/4.0`
chroma_tmp
一個浮點數指明色度臨時強度。默認為`luma_tmp*chroma_spatial/luma_spatial`
hqx
應用一個高質量的像素放大濾鏡。這個濾鏡最初由 Maxim Stepin創建。
它接受下面的選項:
-
n
設置縮放尺度。2 對應hq2x, 3 對應hq3x,4對應hq4x,默認為3。
hue
編輯或者設定顏色的飽和度
接受下面的參數:
-
h
指定色度角的度數,接受表達式,默認為0
-
s
指定飽和度,范圍[-10,10],接受表達式,默認為"1".
-
H
指定色調角的弧度,接受表達式,默認為"0".
-
b
指定亮度,范圍[-10,10]。接受表達式,默認為"0".
h
和H
互斥,不能同時設定
其中b
, h
, H
和s
表達式允許下面內容:
-
n
從0開始的幀序數
-
pts
按時間基單位的輸入幀時間戳
-
r
輸入視頻幀率,如果無效則為
NAN
-
t
按秒的時間碼,如果無效則為
NAN
-
tb
輸入視頻時基
hue例子
-
設置色度角90度,飽和度為1:
hue=h=90:s=1
-
同上,但以色度角弧度值進行設置:
hue=H=PI/2:s=1
-
旋轉色相,以及讓飽和度在0-2間變化:
hue="H=2PIt: s=sin(2PIt)+1"
-
從0開始應用一個3秒飽和度淡入效果:
hue="s=min(t/3,1)"
-
一般淡入表達式可以為:
hue="s=min(0, max((t-START)/DURATION, 1))"
-
從5秒開始的飽和度淡出:
hue="s=max(0, min(1, (8-t)/3))"
-
一般淡出表達式為:
hue="s=max(0, min(1, (START+DURATION-t)/DURATION))"
hue命令
濾鏡還支持下面的命令:
-
b
-
s
-
h
-
H
它們分別編輯色度 和/或 飽和度 和/或 亮度。命令接受對應選項一樣的語法。
如果指定的表達式是無效的,則采用當前值(不變化)
idet
檢測視頻交錯類型。
這個濾鏡試圖檢測如果輸入幀交錯,逐行,頂部或底部優先(對交錯視頻)。它還將嘗試檢測相鄰幀之間的字段重復(電視電影的標志)。
單幀檢測時只考慮當前與相鄰幀每一幀類型。多幀檢測結合的之前的幀類型歷史。
濾鏡輸出日志有下面的元數據值:
-
single.current_frame
對當前幀單幀檢測結果,有如下值:“tff” (上場優先), “bff” (下場優先), “progressive”(逐行), 和“undetermined”(不能檢測出)
-
single.tff
累積的以單幀檢測檢測出的上場優先數
-
multiple.tff
累積的以多幀檢測檢測出的上場優先數
-
single.bff
累積的以單幀檢測檢測出的下場優先數
-
multiple.current_frame
對當前幀多幀檢測結果,有如下值:“tff” (上場優先), “bff” (下場優先), “progressive”(逐行), 和“undetermined”(不能檢測出,不定)
-
multiple.bff
累積的以多幀檢測檢測出的下場優先數
-
single.progressive
累積的以單幀檢測檢測出的逐行幀數
-
multiple.progressive
累積的以多幀檢測檢測出的逐行幀數
-
single.undetermined
累積的以單幀檢測檢測出的不定幀數
-
multiple.undetermined
累積的以多幀檢測檢測出的不定幀數
-
repeated.current_frame
指示當前幀是從最近幀的重復情況,為“neither”(表示不是重復), “top”,或者 “bottom”.
-
repeated.neither
累積的
neither
重復情況. -
repeated.top
累積的
top
重復情況 -
repeated.bottom
累積的
bottom
重復情況
濾鏡接受下面選項:
-
intl_thres
設置交錯閥值
-
prog_thres
設置逐行閥值
-
repeat_thres
重復檢測閥值
-
half_life
設定指定的幀數之后,一個給定的數據幀的貢獻是減半(即只占0.5的類型)。默認為0意味着所有的幀永遠是有1.0的權重
-
analyze_interlaced_flag
當設置為非0數時,
idet
將使用指定的幀數來確定交錯標記是准確的,它不會對不能檢測幀計數。如果發現標記是正確的使用它沒有進一步的計算,即使發現標記不正確,也只是將它(標記)清除而沒有進一步的計算。它插入idet
濾鏡作為低計算方法來清除交錯標記。
il
反轉非交錯或者交錯
這個濾鏡可以把讓非交錯圖像變成交錯的,把交錯圖像變成非交錯的。非交錯的圖像被分裂為2部分(稱作半圖),其中奇數行移到輸出圖像的上部,偶數行移到下半部分。你可以利用濾鏡連續處理2次(相當於沒有效果)。
濾鏡接受下面的選項:
-
luma_mode, l
-
chroma_mode, c
-
alpha_mode, a
對
luma_mode
,chroma_mode
和alpha_mode
的可能值有:‘none’
什么都不做
‘deinterleave, d’
非交錯部分,放置在其它上
‘interleave, i’
交錯部分,反向非交錯效果
默認值為
none
-
luma_swap, ls
-
chroma_swap, cs
-
alpha_swap, as
交換 luma/chroma/alpha 部分。交換奇數和偶數行。 默認0.
interlace
簡單的從逐行轉交錯濾鏡。它把奇數幀交錯上(或下)行,同時把偶數幀作為下(或上)行。同時減半幀率和保持圖像高度。
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
... ... ...
新的幀 + 1 會以幀'j+2'和幀'j+3'這樣依次生成
它接受下面的選項參數:
-
scan
它決定了交錯幀模式是
even
(tff - 默認) 還是odd
(bff) -
lowpass
允許(默認)或禁止垂直低通濾波器來避免
twitter
交錯和減少波紋。
kerndeint
通過Donald Graft的自適應內核deinterling反交錯視頻。其使交錯視頻轉換成逐行視頻
下面是接受參數的介紹.
-
thresh
設置一個濾鏡閥值用於確定哪些像素會被處理。值為[0,255]間整數,默認為10.如果為0則處理所有像素
-
map
設置如果超過閥值的處理模式,為1則為白色,默認為0
-
order
設置字段順序。如果為1則交換字段,否則為0,默認為0.
-
sharp
為1則附加銳化,默認為0.
-
twoway
為1則盡量銳化,默認為0
kerndeint例子
-
以默認值應用:
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
-
允許附加銳化:
kerndeint=sharp=1
-
超閥值后刷成白色
kerndeint=map=1
lenscorrection
徑向透鏡畸變修正
這個濾鏡可以用來修正廣角鏡頭產生的徑向畸變,從而修正圖像。要找到合適的參數,可以使用工具,例如opencv
或者簡單的多次試錯嘗試。利用opencv
源碼中的校准樣例(在 samples/cpp
)並且從結果矩陣中提取k1
和k2
系數。
注意相同效果濾鏡在開源KDE項目工具Krita
和Digikam
中同樣是有效的。
這個濾鏡還可以同vignette
濾鏡聯合使用,來補償透鏡錯誤,它修正濾鏡處理圖像的失真,而vignette
濾鏡糾正亮度分布,所以你有時可能需要同時使用兩個濾鏡,不過你還要注意點二者的順序,即到底是哪個濾鏡先使用
lenscorrection選項
濾鏡接受下面選項:
-
cx
圖像的焦點相對x坐標,從而扭曲的中心。這個值區間[0,1],用分數表示圖像的寬度比
-
cy
圖像的焦點相對y坐標,從而扭曲的中心。這個值區間[0,1],用分數表示圖像的高度比
-
k1
二次修正系數。0.5意味着沒有修正
-
k2
雙二次修正系數。0.5意味着沒有修正。
生成修正的公式:
r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)
這里r_0
是減半的圖像對角,r_src
和r_tgt
分別是源和目標圖像中相對於焦點的距離。
lut3d
對視頻應用3D LUT濾鏡。
濾鏡接受下面的選項:
-
file
設置3D LUT文件名,該文件支持的類型有:
‘3dl’
AfterEffects 的類型
‘cube’
Iridas 的類型
‘dat’
DaVinci 的類型
‘m3d’
Pandora 的類型
-
interp
選擇插值模式,有效值有:
‘nearest’
選用離定義點最近的
‘trilinear’
采用8點多維設置來定義插入值
‘tetrahedral’
使用一個四面體插入值
lut, lutrgb, lutyuv
根據每個像素的分量數據查表選擇輸出值的濾鏡。
其中lutyuv
應用於YUV
輸入視頻,而lutrgb
應用於RGB
輸入視頻
濾鏡接受下面的參數:
-
c0
設置第一個像素分量表達式
-
c1
設置第二個像素分量表達式set second pixel component expression
-
c2
設置第三個像素分量表達式
-
c3
設置第四個像素分量表達式
-
r
設置紅色分量表達式
-
g
設置綠色分量表達式
-
b
設置藍色分量表達式
-
a
設置透明分量表達式
-
y
設置亮度(Y)分量表達式
-
u
設置色度U/Cb分量表達式
-
v
設置色度V/Cr分量表達式
它們每個人都指定使用的表達式計算像素對應分量(查找表方法)。
具體的分量關聯到每個c*
選項的輸入格式。
其中lut
濾鏡允許輸入像素格式是YUV
或者RGB
,lutrgb
只允許RGB
格式,lutyuv
只允許YUV
格式
表達式支持下列常量和函數:
-
w
-
h
輸入的寬和高
-
val
輸入像素分量值
-
clipval
輸入值,並且裁剪到
minval-maxval
范圍內 -
maxval
輸入像素分量的最大值
-
minval
輸入像素分量的最小值 component.
-
negval
“負片”表示的分量值,它被裁剪到
minval-maxval
范圍內,對應於maxval-clipval+minval
. -
clip(val)
對於
val
的計算值,裁剪到minval-maxval
范圍內 -
gammaval(gamma)
伽馬校正計算值像素分量的值,裁剪到
minval-maxval
范圍內,其對應於pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval
所有表達式默認為"val"
lut, lutrgb, lutyuv例子
-
輸入圖像的負片效果
lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"等效於:
lutrgb="r=negval:g=negval:b=negval"
lutyuv="y=negval:u=negval:v=negval" -
亮度負片效果
lutyuv=y=negval
-
移除色度分量,轉換成灰度圖像:
lutyuv="u=128:v=128"
-
應用一個亮度燃燒效果:
lutyuv="y=2*val"
-
移除綠色和藍色分量(紅色灰度圖):
lutrgb="g=0:b=0"
-
設定固定的透明通道效果:
format=rgba,lutrgb=a="maxval-minval/2"
-
以系數0.5進行伽瑪亮度矯正:
lutyuv=y=gammaval(0.5)
-
丟棄的亮度低有效位(減少細節,亮塊化):
lutyuv=y='bitand(val, 128+64+32)'
mergeplanes
從一些視頻流中混合顏色通道
濾鏡最多接受4路輸入流,然后混合選用的(顏色)平面來輸出。
濾鏡接受下面的選項:
-
mapping
設置輸入到輸出顏色映射,默認為0 mapping. Default is 0.
這個映射由一個位映射指定,它被描述為一個格式為
0xAa[Bb[Cc[Dd]]]
的十六進制數。其中Aa
描述第一個用作輸出的(顏色)平面,A
設置采用那個輸入流(0-3),a
指定是輸入流的那個分量(0-3,因為一個輸入視頻流最多有4個輸入分量)。此后的Bb
、Cc
和Dd
以此類推,分別指定第2到第4個輸出映射關系。 -
format
設置輸出像素格式,默認為
yuva444p
mergeplanes例子
-
從三個灰度視頻流混合為單個視頻流(有相同的圖像尺寸):
[a0][a1][a2]mergeplanes=0x001020:yuv444p
-
混合第一路的
yuv444p
和第二路的灰度視頻到一個yuva444p
:[a0][a1]mergeplanes=0x00010210:yuva444p
-
在yuva444p交換Y和A通道:
format=yuva444p,mergeplanes=0x03010200:yuva444p
-
在
yuv420p
交換U和V輸出到yuv420p
:format=yuv420p,mergeplanes=0x000201:yuv420p
-
轉換
rgb24
到yuv444p
format=rgb24,mergeplanes=0x000102:yuv444p
mcdeint
應用反交錯運動補償
它每幀需要一個輸入字段,所以必須同yadif=1/3
或者等效 一同使用。
率接受下面的選項:
-
mode
設置反交錯模式,有下列有效值:
‘fast’
‘medium’
‘slow’使用迭代的運動估計
‘extra_slow’
類似‘slow’,但使用多個參考幀
默認‘fast’.
-
parity
設置輸入視頻圖片字段校驗。它必須以下值之一:
‘0, tff’
對應上場優先
‘1, bff’
對應下場優先
默認 ‘bff’.
-
qp
設置內部使用的編碼器按塊量化參數設置(QP)
更高的值會導致一個更平滑的運動向量場但不最優個體向量。默認值是1。
mpdecimate
減少對前幀變化不大的幀,以減少幀速率
這個濾鏡的主要作用是對非常低碼率的編碼進行預處理(例如面向撥號調整解調器應用的),不過理論上還可以用於修復發轉的電視電影影片(影片轉換成電視又轉換回來)
下面是選項介紹:
-
max
設置連續幀的最大數量,可以刪除(如果正),或刪除幀之間的最小間隔幀(如果負的) ,如果為0,則刪除幀和前面刪除幀沒有關聯(關系)
默認為0.
-
hi
-
lo
-
frac
設置刪除閥值。
其中
hi
和lo
是對於一個8x8
像素塊和代表實際像素值差異,所以閥值64對應與每個像素都有1個單位的差異,或者被完全不同的塊覆蓋一個幀作為候選(被丟棄)則它沒有超過
hi
個不同的8x8
塊和沒有超過frac
量的(1意味着整個圖像)超過lo
個不同的8x8
塊默認值為
hi
是64*12
,lo
為64*5
,frac
為0.33
negate
否定輸入視頻
它接受一個整數(參數),如果非零它否定透明分量(如果可用)。默認值是0
noformat
強制libavfilter
不采用指定的像素格式來輸入到下一個濾鏡
接受的參數為:
-
pix_fmts
是一個由 ’|’分隔的像素格式名列表,例如pix_fmts=yuv420p|monow|rgb24"
noformat例子
-
強制不采用
yuv420p
的像素格式來輸出到vfilp
濾鏡noformat=pix_fmts=yuv420p,vflip
-
轉換輸入到不是指定的像素格式
noformat=yuv420p|yuv444p|yuv410p
noise
給視頻添加噪點
濾鏡接受下面的選項:
-
all_seed
-
c0_seed
-
c1_seed
-
c2_seed
-
c3_seed
對指定像素分量或者整個像素設置噪點種子,默認為123457.
-
all_strength, alls
-
c0_strength, c0s
-
c1_strength, c1s
-
c2_strength, c2s
-
c3_strength, c3s
對指定像素分量或者整個像素設置噪點強度,默認為0,值范圍[0, 100].
-
all_flags, allf
-
c0_flags, c0f
-
c1_flags, c1f
-
c2_flags, c2f
-
c3_flags, c3f
設置分量或者所有的標志,可能的標志有:
‘a’
平均時間的噪點(平滑)
‘p’
混合隨機噪點(半)規律
‘t’
時間噪點(噪點模式在幀間變化)
‘u’
統一噪點 (gaussian外的)
noise例子
-
添加時間和統一的噪點給圖像
noise=alls=20:allf=t+u
null
不改變輸入進行輸出
ocv
申請使用libopencv
進行視頻轉換。
要啟用需要處理編譯參數--enable-libopencv
,且系統中要有libopencv
的頭和庫。
接受下面的參數:
-
filter_name
指定要使用的
libopencv
濾鏡名 -
filter_params
對濾鏡指定參數,如果不指定則采用具體濾鏡默認參數
在libopencv
官方文檔了解更多libopencv
精確信息
在libopencv
中下面的濾鏡被支持。
dilate
這個濾鏡使用特定結構化的元素來擴張圖像,其對應於libopencv
中的函數cvDilate
它接受的參數形式為:struct_el|nb_iterations
其中struct_el
代表了一個結構化元素,語法為:colsxrows+anchor_xxanchor_y/shape
,其中cols
和rows
是結構元素的行和列數,anchor_x
和anchor_y
是錨點的坐標值,shape
是結構化元素的圖形,shape
可能值是"rect"、 "cross"、 "ellipse"和 "custom"。如果custom
被設置,它還必須跟一個格式為=filename
來指定一個位圖,其每個可打印字符對應於一個亮的像素。當定制的圖形被使用,cols
和rows
被忽略,行和列的數有讀取的文件決定。
struct_el
的默認值為3x3+0x0/rect
nb_iterations
指定迭代的次數,默認為1
一些例子:
-
采用默認值
ocv=dilate
-
Dilate采用了一個5x5的結構元素,且迭代2次
ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2
-
從文件
diamond.shape
讀取圖像,迭代2次其中
diamond.shape
文件的內容為:
*
***
*****
***
*
因為描述為定制,所以原來指定的行和列值被忽略:
ocv=dilate:0x0+2x2/custom=diamond.shape|2
erode
通過使用特定的結構化元素侵蝕一個圖像。它對應於libopencv
中的cvErode
函數。
它接受參數為:struct_el:nb_iterations
,解釋同dilate
smooth
平滑輸入視頻
濾鏡接受的參數為:type|param1|param2|param3|param4
其中type
是應用的平滑類型,有 "blur", "blur_no_scale", "median", "gaussian", 或者"bilateral".默認為"gaussian"
接下來的參數param1
, param2
, param3
和param4
依賴於所選的平滑類型,其中param1
, param2
接受正整數或0,param3
和param4
接受浮點數。其中param1
的默認為3,其他的默認為0.
這些參數對應於libopencv
中的cvSmooth
函數。
overlay
把一個視頻覆蓋在另外一個上面
它有兩個輸入,其中第一個輸入是主要的輸入會覆蓋到第二個輸入上
它接受下面的參數(介紹見下):
-
x
-
y
設置主要視頻(在被覆蓋視頻上)的x和y坐標表達式,默認為0,如果表達式無效則會設置為一個巨大的值(在這種情況下相當於沒有覆蓋,即覆蓋出現在非可視區域)
-
eof_action
在操作時遇到第二路輸入的
EOF
信號時的處理,它接受下面的值之一::repeat
重復最后一幀(默認)
endall
同時結束兩個流
pass
把第一路輸入作為輸出
-
eval
它設置何時計算x和y坐標值
它接受下面的值:
‘init’
僅在濾鏡初始化或命令處理時計算一次
‘frame’
每幀計算
默認‘frame’.
-
shortest
如果設置為1,強制以最短的輸入時間終止輸出,默認為0
-
format
設置輸出格式,允許:
‘yuv420’
強制為YUV420
‘yuv422’
強制為YUV422
‘yuv444’
強制為YUV444
‘rgb’
強制為RGB
默認 ‘yuv420’.
-
rgb (棄用的)
如果設置為1,強制濾鏡接受輸出是RGB顏色空間。默認為0,它已經被棄用,而是使用格式來代替。
-
repeatlast
如果設置為1,強制濾鏡繪制最后一個覆蓋幀直到結束流。如果設置為0則禁止這樣的行為,默認為1
值x
和y
的表達式中接受下面的參數:.
-
main_w, W
-
main_h, H
主要輸入流的寬和高
-
overlay_w, w
-
overlay_h, h
被覆蓋流的寬和高
-
x
-
y
對於
x
和y
的計算值,它在每幀中都計算 -
hsub
-
vsub
輸出格式中的水平和垂直色度通道分量值,例如對於
yuv422p
像素格式,hsub
是2 ,vsub
是1 -
n
幀序數,從0開始計數
-
pos
輸入幀在文件當中的偏移,如果未知則為
NAN
-
t
時間碼,以秒計。如果時間碼未知則為
NAN
overlay命令
濾鏡支持下面的命令:
-
x
-
y
修改覆蓋輸出的
x
和y
坐標。它接受的語法同於前面對應的選項如果指定的表達式無效,則保持當前值
overlay例子
-
在據右下10像素位置繪制主要視頻:
overlay=main_w-overlay_w-10:main_h-overlay_h-10
采用名字選項,則上面的變成:
overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
-
插入一個透明的PNG標記到右下。協同
ffmpeg
工具集利用-filter_complex
選項來實現:ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
-
插入2個不同的透明PNG標志,(第二個在右下角):
ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
-
在視頻上面添加一個透明顏色層,其中
WxH
指定了輸入視頻的寬和高:color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
-
同時播放原始和過濾版(協同了
deshake
濾鏡):ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
同上效果,但利用命令完成
ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
-
從2秒開始一個從左到右的滑動疊加:
overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
-
組合2個輸入,一個放置在一邊:
ffmpeg -i left.avi -i right.avi -filter_complex "
nullsrc=size=200x100 [background];
[0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
[1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
[background][left] overlay=shortest=1 [background+left];
[background+left][right] overlay=shortest=1:x=100 [left+right]
" -
在10-20秒應用一個
delogo
濾鏡ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
-vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
masked.avi -
串聯多個
overlays
濾鏡:nullsrc=s=200x200 [bg];
testsrc=s=100x100, split=4 [in0][in1][in2][in3];
[in0] lutrgb=r=0, [bg] overlay=0:0 [mid0];
[in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1];
[in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2];
[in3] null, [mid2] overlay=100:100 [out0]
owdenoise
應用超完備小波降噪
濾鏡接受下面的選項:
-
depth
設置深度
大的值將在低頻部分降噪明顯,但速度很慢
值范圍8-16,默認為8
-
luma_strength, ls
設置亮度強度
為0-1000的雙精度值,默認為1.0
-
chroma_strength, cs
設置色度強度
為0-1000的雙精度值,默認為1.0
pad
在原始輸入的x
和y
坐標上填充輸入圖像(多處部分用顏色填充)
它接受下面參數:
width, w
height, h
指定輸出尺寸的表達式。如果值為0,則輸入圖像尺寸作為輸出尺寸
在`width`表達式中可以引用`height`值,反之亦然
默認都是0
x
y
指定輸入圖像在輸出中放置的坐標據上邊和左邊的值
其中`x`可以引用`y`值計算,反之亦然
默認為0.
color
指定添加區域的顏色。語法參考[顏色/color](ffmpeg-doc-cn-07.md#顏色Color)章節的介紹
默認為"black".
對於width
, height
, x
和y
選項的表達式,可以包含下面的常量:
in_w
in_h
輸入寬和高
iw
ih
同於`in_w`和`in_h`
out_w
out_h
輸出的寬和高(輸出添加的區域),它由`width`和`height`表達式指定
ow
oh
同於`out_w`和`out_h`
x
y
指定的x和y的偏移(在另外一個表達式中),如果不指定則為`NAN`
a
同於`iw / ih`
sar
輸入樣本點長寬比
dar
輸入視頻長寬比,它等於`(iw / ih) * sar`
hsub
vsub
水平和垂直色度分量值,例如對`yuv422p`像素格式,`hsub`為2,`vsub`為1
pad例子
-
在(0,40)填充
violet
顏色到輸入視頻,輸出視頻為640x480
pad=640:480:0:40:violet
其等效於:
pad=width=640:height=480:x=0:y=40:color=violet
-
把圖像放置在原始輸入擴大3/2倍的襯底中間位置:
pad="3/2iw:3/2ih:(ow-iw)/2:(oh-ih)/2"
-
輸出到一個正方形襯底上,襯底的變長是輸入圖像寬和高中的大的一個值,放置在正中:
pad="max(iw,ih):ow:(ow-iw)/2:(oh-ih)/2"
-
輸出成為有16:9的長寬比的襯底上,水平中置圖像(其他比例視頻轉16:9視頻,但不拉伸放縮的效果):
pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
-
在合成視頻的情況下,為了正確設置顯示,有必要利用
sar
設置表達式:(ih * X / ih) * sar = output_dar
X = output_dar / sar因此需要修正前例為:
pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
-
雙倍輸入視頻尺寸,把輸入放置在右下區域(占輸出區域的右下1/4):
pad="2iw:2ih:ow-iw:oh-ih"
palettegen
對整個視頻產生一個調色板
它接受下面的選項:
-
max_colors
設置調色板最大數量。注意調色板仍包含256個色彩,只是沒有用到的色彩都被設置為黑色了
-
reserve_transparent
創建一個255色調色板,最后一個存儲顏色。GIF優化保留透明的顏色是非常有用的。如果沒有設置,那么最大的顏色調色板將達到256。你可能對於某個獨立的圖像想要禁用該選項。默認設置是
default
-
stats_mode
設置統計模式
接受下面值:
‘full’
計算全幀直方圖
‘diff’
只計算與前一幀的差異部分。這將更關注輸入中變化的部分(運動的部分),如果背景是靜態的。
默認為full.
palettegen例子
-
生成一個調色板
ffmpeg -i input.mkv -vf palettegen palette.png
paletteuse
使用一個調色板來處理輸入視頻流中的樣本點轉換
濾鏡接受2個輸入,一個視頻輸入流和一個調色板。調色板必須是256個像素的圖像(即有256個顏色)
它接受下面選項:
-
dither
選擇抖動模式,可用算法有:
‘bayer’
順序8x8 bayer抖動(確定的)
‘heckbert’
由Paul Heckbert定義與1982年的抖動算法(簡單的錯誤擴散)**注意**這個抖動有時被認為是“錯誤”的,而僅作為參考
‘floyd_steinberg’
Floyd 和Steingberg抖動(錯誤擴散)
‘sierra2’
Frankie Sierra抖動第二版(錯誤擴散)
‘sierra2_4a’
Frankie Sierra抖動第二版的"簡化" (錯誤擴散)
默認為sierra2_4a.
-
bayer_scale
當bayer抖動算法被選取,這個選項將定義用作調色板規模(多少交叉——混合是可見的)。一個小的值意味着更多可見的且更少的條紋,高的值意味更少可見可能更多的條紋。
值范圍為[0,5],默認為2
-
diff_mode
如果設置,定義區域過程
‘rectangle’
只有改變的矩形區域會進行再加工. 這類似於GIF裁剪/抵消壓縮機制。它用來加快速度,對於只要部分改變時,如用例,只有一個矩形移動(邊界)區域,且限制誤差范圍抖動(它會導致更多的確定性產出,如果現場沒有太大的改變,它可以減少噪音且更好的GIF壓縮移動)
默認為none.
paletteuse例子
-
利用
palette
(調色板可由palettegen
產生)編碼輸出GIFffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
perspective
采用正確的視角記錄視頻,而不是垂直於平面
接受參數的介紹如下:
-
x0
-
y0
-
x1
-
y1
-
x2
-
y2
-
x3
-
y3
對左上、右上、左下和右下各點設置表達式。默認為
0:0:W:0:0:H:W:H
表示不改變視角。如果場景選項是對源設置(sense=0
),那么將發送指定點給目標。如果是對目標設置的(sense=1
),則對應的源將被送到指定坐標表達式接受下面的變量:
W
H視頻幀的寬和高
-
interpolation
為透視校正設置插值
允許下面的值:
‘linear’
‘cubic’默認為‘linear’.
-
sense
設置協調選項的解釋.
它接受值為:
‘0, source’
表明前面`x0y0x1y1x2y2x3y3`是對源設置的
‘1, destination’
表明前面`x0y0x1y1x2y2x3y3`是對目標設置的 默認為‘source’.
phase
延遲隔行視頻一段時間以便現場秩序變化
用於解決PAL制下電影到視頻轉換中的場序問題
接受參數介紹見下:
-
mode
設置相位方法,它允許的值為:
‘t’
捕獲是上場優先,要轉換為下場優先3,濾鏡會延遲下場
‘b’
捕獲是下場優先,要轉為上場優先,濾鏡會延遲上場。
‘p’
捕獲和輸出相同場序。這個模式存在文檔中引用的其他選項,如果你真的選擇它,濾鏡將什么也不做。
‘a’
捕獲字段自動確定場序標志,轉換則相反。濾鏡根據相應標識在逐幀的基礎上自動選擇' t '和' b '。如果沒有包含有效的指示字段,則同於`u`
‘u’
捕獲模式未知或者不定,轉換時則相反。濾鏡通過分析自動選擇 ‘t’ 和 ‘b’實現最佳匹配
‘T’
捕獲是上場優先,轉換未知或者不定。濾鏡通過圖像分析選擇`t`和`p`
‘B’
捕獲是下場優先,轉換未知或者不定。濾鏡通過圖像分析選擇`b`和`p`
‘A’
捕獲根據標志確定,濾鏡由此選擇`t`、`b`和`p`,如果沒有有效的標志信息,則同於`U`,這是默認模式
‘U’
捕獲和轉換都未知,根據檢測自動選擇`t`、`b`和`p`以使最佳匹配
pixdesctest
像素格式檢測測試濾鏡,主要用於內部測試。輸出視頻等於輸入視頻
例如:
format=monow,pixdesctest
可以用來測試monowhite像素格式描述是否符合定義
pp
使用指定的libpostproc
后處理subfilters
鏈。這個庫會自動選擇一個GPL
編譯(--enable-gpl)。subfilters
必須是由/
分隔,可以利用-
來禁用。每個subfilter
有長或短的選項名,例如dr/dering
濾鏡接受下面的選項:
-
subfilters
指定subfilters字符串
所有subfilters有共同選項來確定其范圍,它們是:
a/autoq
對subfilter的質量等級
c/chrom
同時做色差和亮度(默認).
y/nochrom
只做亮度過濾 (無色差處理).
n/noluma
只做色差過濾 (無亮度處理).
這些選項可以通過|
附加在subfilter
名后面
有效的subfilter
有:
hb/hdeblock[|difference[|flatness]]
水平解封濾鏡
difference
差異因素,高值意味着更多的解封(默認值:32)。
flatness
平面度閾值,降低值意味着更多的解封(默認值:39)。
vb/vdeblock[|difference[|flatness]]
垂直解封濾鏡
difference
差異因素,高值意味着更多的解封(默認值:32)。
flatness
平面度閾值,降低值意味着更多的解封(默認值:39)。
ha/hadeblock[|difference[|flatness]]
准確的水平解封濾鏡
difference
差異因素,高值意味着更多的解封(默認值:32)。
flatness
平面度閾值,降低值意味着更多的解封(默認值:39)。
va/vadeblock[|difference[|flatness]]
准確的垂直解封濾鏡
difference
差異因素,高值意味着更多的解封(默認值:32)。
flatness
平面度閾值,降低值意味着更多的解封(默認值:39)。
水平和垂直解封過濾器共享difference
和flatness
,因此不能設置平面度值不同的水平和垂直的閾值。
h1/x1hdeblock
實驗的水平解封濾鏡
v1/x1vdeblock
實驗的垂直解封濾鏡
dr/dering
去振鈴濾鏡
tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
threshold1
larger -> stronger filtering /大->強濾鏡
threshold2
larger -> stronger filtering /大->強濾鏡
threshold3
larger -> stronger filtering /大->強濾鏡
al/autolevels[:f/fullyrange], automatic brightness / contrast correction
f/fullyrange
拉伸亮度到0-255范圍
lb/linblenddeint
通過`(1 2 1)`濾鏡線性混合`deinterlacing`濾鏡的去交錯塊
li/linipoldeint
每秒通過線性插值`deinterlacing`濾鏡的去交錯塊
ci/cubicipoldeint
每秒通過立方插值`deinterlacing`濾鏡的去交錯塊
md/mediandeint
每秒通過中值濾波`deinterlacing`濾鏡的去交錯塊
fd/ffmpegdeint
每秒通過線性(-1 4 2 4 -1)濾波來處理`deinterlacing`濾鏡的去交錯塊
l5/lowpass5
通過`(-1 2 6 2 -1)`濾波處理`deinterlacing`濾鏡的去交錯塊
fq/forceQuant[|quantizer]
覆蓋指定一個從輸入到輸出指示不變的量化器
quantizer
使用的Quantizer(量化器)
de/default
默認的`pp`濾鏡組合 (hb|a,vb|a,dr|a)
fa/fast
快的`pp`濾鏡組合 (h1|a,v1|a,dr|a)
ac
高品質`pp`濾鏡組合(ha|a|128|7,va|a,dr|a)
pp例子
-
應用水平和垂直解封,去交錯和自動亮度/對比度:
pp=hb/vb/dr/al
-
應用默認的濾鏡但不包括自動亮度/對比度:
pp=de/-al
-
應用默認濾鏡且包括瞬時降噪A:
pp=default/tmpnoise|1|2|3
-
應用亮度解封,自動根據可用的CPU時間開關垂直解封:
pp=hb|y/vb|a
pp7
應用Postprocessing
濾鏡7.它是spp
濾鏡的變通,類似於 spp =6 或者7的點DCT。是有中心樣本使用者IDCT后
濾鏡接受下面的選項:
-
qp
強制設置的量化參數,接受一個0-63的整數,如果沒有設置,將使用視頻流的
QP
值(如果可用) -
mode
設置閥值模式,可用的是:
‘hard’
設置為硬閥值
‘soft’
設置為軟閥值(更好的de-ringing效果,但可能變得更模糊)
‘medium’
設置中度閥值 (最好的效果,默認)
psnr
兩個輸入視頻之間的平均,最大和最小峰值信噪比(PSNR-Peak Signal to Noise Ratio)表示。
濾鏡接受2路輸入視頻,其中第一個輸入被認為是“主要”的源,將不改變的進行輸出,第二輸入作為“參考”視頻進行PSNR計算
兩個視頻必須有相同的分辨率和像素格式才能正常工作。而且假定了有相同的輸入幀來進行比較。
獲得的平均PSNR會被輸出到日志系統
濾鏡存儲每幀積累MSE(均方誤差),並在處理末尾記錄幀平均值,其公示為:
PSNR = 10*log10(MAX^2/MSE)
這里MAX
是圖像中每個分量最大值的平均值。
濾鏡接受參數的介紹見下:
-
stats_file, f
如果指定,濾鏡將采用指定的文件來保存每個幀的PSNR值
在stats_file
指定的文件中將包含一個key/value
序列,其是每兩個比較幀的相應值
stats_file
指定的文件中各個key的介紹如下::
-
n
幀序數,從1計數
-
mse_avg
對比幀逐像素均方誤差,平均值是基於整個圖像所有分量
-
mse_y, mse_u, mse_v, mse_r, mse_g, mse_g, mse_a
對比幀逐像素分量均方誤差,后綴就是分量類型
-
psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
對比幀分量峰值信噪比,后綴表明分量類型
例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
[main][ref] psnr="stats_file=stats.log" [out]
在這個例子中,輸入和ref_movie.mpg
文件比較,每個單獨幀的PSNR
存儲在stats.log
中
pullup
下拉轉換(逆電視電影)濾鏡。能夠處理混合hard-telecine
,24000/1001幀率逐行和30000/1001幀率逐行內容。
這個pullup
濾鏡利用上下文進行決策。它是無狀態的,不鎖定模式,但不期待有以下字段可以進行匹配識別和重建逐行幀。
為了能產生一個包含偶數幀率的內容,在pullup
后插入一個濾鏡,如果輸入幀率是29.97fps使用fps=24000/1001
,如果輸入是30fps或者25fps則fps=24
濾鏡接受下面的選項:
-
jl
-
jr
-
jt
-
jb
這些選項設置“垃圾”部分(會被忽略的左、右、上和下部分),左和右是8像素單位的整數倍,上和下是2行的整數被。默認每邊8像素
-
sb
設置嚴格的打斷。設置為1將減少濾鏡生成一個偶爾不匹配框架的機會,但也可能在高運動序列下導致幀數下降。設置為-1將更容易過濾匹配,則可以幫助處理視頻內輕微的模糊,但也可能導致輸出交錯幀,默認為0
-
mp
設置度量標准平面(通道),允許值有:
‘l’
采用亮度通道
‘u’
采用色差藍通道
‘v’
采用色差紅
這個選項被設置為使用指定的通道作為濾鏡計算平面,而替換默認的亮度通道計算。它可能會提高精度(如果源材料十分干凈),但更可能是降低精度,特別是色度噪聲(彩虹效應)或灰度視頻(無色差信號——這時結果是隨機的)。設置它的主要目的是減少CPU負載,使得
pullup
在慢的計算機上可以減速停止
為了最好的效果(而不在輸出中復制幀)且盡量讓輸出幀率接近,例如要反轉一個NTSC輸入:
ffmpeg -i input -vf pullup -r 24000/1001 ...
qp
改變視頻的量化參數(QP)
濾鏡接受下面選項:
-
qp
設置量化參數表達式
這個表達式通過eval
API計算,可以包含以下常量:
-
known
1表示索引不是129,否則為0
-
qp
從-129到128的時序索引
qp例子
-
一個方程:
qp=2+2sin(PIqp)
removelogo
抑制台標,使用一個圖像文件來確定哪些像素組成台標。它通過采用台標相近像素來填充台標位置。
率接受下面選項:
-
filename, f
設置一個過濾位圖文件,它指示了要抑制的台標圖像信息,格式可以是
libavformat
中任何有效格式。圖像的寬和高必須匹配要處理的視頻流。
像素依據這樣的規則指示台標:為0的位置不屬於台標部分,非0的值則是台標的部分。如果使用白色(255)黑色(0)來標志是最安全的。過濾位圖建議是帶黑底的台標截屏,然后使用一個閥值標志台標周圍的虛化。
若必要,可以手動固定小斑點。記住如果台標像素沒有被標注到,則濾鏡質量會大大降低。標記過多的像素不會有太多傷害,但會增加需要模糊處理信息,對於一個大的圖標過多額外像素會減慢處理。
repeatfields
這個濾鏡根據其價值使用視頻ES
頭中和重復字段中的repeat_field
標志
rotate
任意旋轉視頻角度(以弧度值表示)
可選參數介紹如下:
-
angle, a
設置一個表示要旋轉角度的弧度表達式(中心旋轉)。負值表示逆時針旋轉,默認為0
這個表達式會每幀計算
-
out_w, ow
設置輸出寬表達式,默認為"iw",表達式只在配置時計算一次
-
out_h, oh
設置輸出高表達式,默認為"iw",表達式只在配置時計算一次
-
bilinear
如果為1則允許雙線性插值,為0禁用,默認為1
-
fillcolor, c
設置填補顏色(圖像旋轉后水平),顏色的語法見顏色/color章節的介紹,如果指定為
none
表示沒有背景色輸出(例如背景色不顯示——相當於透明)默認為"black".
角度和輸出大小的表達式可以包含以下常量和函數:
-
n
輸入幀序數,從0計數(開始濾鏡時),如果早於濾鏡第一幀則為
NAN
-
t
輸入幀按秒時間,當濾鏡被配置時為0,早於則為
NAN
-
hsub
-
vsub
水平和垂直色度分量。例如對像素格式
yuv422p
,hsub
為2,vsub
為1 -
in_w, iw
-
in_h, ih
輸入的視頻寬和高
-
out_w, ow
-
out_h, oh
輸出的寬和高,它指定了要填補的寬和高表達式
-
rotw(a)
-
roth(a)
計算要完整包含旋轉
a
弧度圖像的最小的寬和高它只能用於計算
out_w
和out_h
的表達式
rotate例子
-
順時針旋轉PI/6:
rotate=PI/6
-
逆時針旋轉PI/6 :
rotate=-PI/6
-
順時針旋轉45度:
rotate=45*PI/180
-
應用一個恆定選擇周期T,開始角度為PI/3:
rotate=PI/3+2PIt/T
-
讓輸入旋轉振盪T秒,有A弧度振幅:
rotate=Asin(2PI/T*t)
-
旋轉視頻,輸出能包含所有內容:
rotate='2PIt:ow=hypot(iw,ih):oh=ow'
-
旋轉視頻,減少輸出大小且沒有背景:
rotate=2PIt:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
rotate命令
濾鏡接受下面的命令:
-
a, angle
設置表示角度的弧度表達式,命令接受同對於選項相同的語法。
如果指定的表達式無效,則保持當前值(不旋轉)
sab
應用形狀自適應模糊
濾鏡接受下面選項:
-
luma_radius, lr
設置亮度模糊強度,值范圍0.1-4.0,默認1.0。更大的值會導致圖像更模糊,但更慢
-
luma_pre_filter_radius, lpfr
設置亮度預處理半徑,值范圍為0.1-2.0,默認值1.0.
-
luma_strength, ls
設置被認為是同一像素的最大亮度區別。值范圍0.1-100.0,默認1.0.
-
chroma_radius, cr
設置色差模糊強度,值范圍0.1-4.0,默認1.0。更大的值會導致圖像更模糊,但更慢
-
chroma_pre_filter_radius, cpfr
設置色差預處理半徑,值范圍為0.1-2.0
-
chroma_strength, cs
設置被認為是同一像素的最大色差區別。值范圍0.1-100.0
每個色度選項值,如果沒有明確指定,則選用對應亮度選項值
scale
對輸入視頻放縮(修改尺寸),利用了libswscale
庫。
這個scale
濾鏡強制輸出與輸入有相同的長寬比,但改變輸出樣本點長寬比。
如果輸入圖像格式不同於下一個濾鏡要求的格式,這個scale
濾鏡可以轉換以符合要求。
scale選項
濾鏡接受下面介紹的選項或任何libswscale
放縮支持的選項。
參考 (ffmpeg-scaler)ffmpeg-scaler手冊中以了解完整的放縮選項。
-
width, w
-
height, h
設置輸出視頻尺寸表達式,默認是輸入尺寸。
如果值為0,則輸入寬被用作輸出
如果其中一個值被設置為-1,
scale
濾鏡將以另外一個值在保持輸入長寬比的基礎上計算該值。如果兩個都設置為-1則以輸入尺寸作為輸出如果一個值設置為-n,且n>1,濾鏡將以另外一個值為基礎,保持輸入長寬比進行計算,然后確保計算出的值是可整除n的最接近值
看下面對於表達式中允許內容的介紹
-
interl
設置交錯模式,允許:
‘1’
強制交錯放縮
‘0’
不應用交錯放縮Do not apply interlaced scaling.
‘-1’
根據輸入源幀標志中是否有`interlaced`來決定是否采用交錯放縮
默認為‘0’.
-
flags
設置
libswscale
放縮標志,參考ffmpeg-scaler文檔來了解完整的值列表。如果沒有顯式指定將采用默認值 -
size, s
設置視頻尺寸,語法同於視頻尺寸(分辨率)
-
in_color_matrix
-
out_color_matrix
設置輸入/輸出
YCbCr
顏色空間類型這將設定一個值來覆蓋且強制用於輸出和編碼器
如果不指定,則顏色空間類型依賴於像素格式。
可能值:
‘auto’
自動選擇.
‘bt709’
格式符合國際電信聯盟( International Telecommunication Union-ITU) 推薦標准 BT.709.
‘fcc’
格式符合美國聯邦通信委員會(United States Federal Communications Commission-FCC)的美國聯邦法規(Code of Federal Regulations-CFR) 的Title 47 (2003) 73.682 (a).
‘bt601’
設置顏色空間符合: 格式符合國際電信聯盟( International Telecommunication Union-ITU) 推薦標准 BT.601 ITU-R Rec. BT.470-6 (1998)系統的B, B1, 和 G 以及電影與電視工程師學會( Society of Motion Picture and Television Engineers-SMPTE)的 ST 170:2004
‘smpte240m’
顏色空間符合SMPTE ST 240:1999.
-
in_range
-
out_range
設置輸入/輸出
YCbCr
樣本范圍它設置一個值來覆蓋且強制用於輸出和編碼。如果不知道,則范圍依賴於輸入像素格式,可能值是:
‘auto’
自動選擇.
‘jpeg/full/pc’
設置完整的范圍 (在8-bit亮度上是0-255).
‘mpeg/tv’
設置"MPEG"范圍(在8-bit亮度上是16-235 ).
-
force_original_aspect_ratio
設置在減少或者增加視頻高/寬時是否保持原來的寬高比模式。可能值:
‘disable’
禁用這個特性而完全依據設置的寬/高尺寸
‘decrease’
輸出視頻尺寸將自動減少(以保持寬高比)
‘increase’
輸出視頻尺寸將自動增加(以保持寬高比)
關於這個選項的有用例子是:當你知道一個特定設備的最大允許尺寸時,可以使用這個來限制輸出視頻,同時保持寬高比。例如設備允許1280x720,你的視頻是1920x800,使用這個選項(選擇‘decrease’),且設定輸出是1280x720,將得到一個1280x533的實際結果。
請注意它與讓w或者h為-1有些不同,要使用這個選項,你需要完整指定w和h為實際需要的尺寸才能工作
在上述表達式中允許下面的內容::
-
in_w
-
in_h
輸入的寬和高
-
iw
-
ih
同於
in_w
和in_h
. -
out_w
-
out_h
輸出 (放縮后)寬和高
-
ow
-
oh
同於
out_w
和out_h
-
a
等於
iw / ih
-
sar
輸入的樣本點寬高比
-
dar
輸入的寬高比,計算自
(iw / ih) * sar
-
hsub
-
vsub
水平和垂直輸入色差分量值,例如對於
yuv422p
像素格式,hsub
為2,vsub
為1 -
ohsub
-
ovsub
水平和垂直輸出色差分量值,例如對於
yuv422p
像素格式,hsub
為2,vsub
為1
scale例子
-
放縮輸入為200x100
scale=w=200:h=100
等效於:
scale=200:100
或者:
scale=200x100
-
指定輸出為縮寫尺寸名:
scale=qcif
也可以寫為:
scale=size=qcif
-
放大為輸入的2倍:
scale=w=2iw:h=2ih
-
上面等效於:
scale=2in_w:2in_h
-
放大2倍,且采用交錯放大模式:
scale=2iw:2ih:interl=1
-
縮小為一半:
scale=w=iw/2:h=ih/2
-
增大寬度,且高度保持:
scale=3/2*iw:ow
-
黃金分割比:
scale=iw:1/PHIiw
scale=ihPHI:ih -
增加高度,且讓寬是高的3/2:
scale=w=3/2oh:h=3/5ih
-
增加尺寸,讓尺寸是一個色差分量的整數倍:
scale="trunc(3/2*iw/hsub)hsub:trunc(3/2ih/vsub)*vsub"
-
增加最大為500像素,保持輸入的寬高比:
scale=w='min(500, iw*3/2):h=-1'
separatefields
這個separatefields
濾鏡以視頻幀為基礎,將每個幀分成多個分量,產生一個半高而兩有兩倍幀率和幀數。
這個濾鏡默認使用在幀中的場序標志信息來決定那些先輸出。如果結果不對,在之前使用setfield
setdar, setsar
其中setdar
濾鏡設置輸出的寬高比
是按下式通過改變指定的樣本(即像素)寬高比來實現的:
DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR
記住,setdar
濾鏡不修改視頻幀的像素尺寸(畫面尺寸,即還是WxH)。設定的顯示長寬比也可能改變其后的濾鏡鏈中的濾鏡,例如在放縮濾鏡或者另一個“setdar”或“setsar”濾鏡。
而setsar
濾鏡設置輸出視頻的像素寬高比
注意有用setsar
濾鏡的應用,輸出顯示的寬高比將根據前面的方程變化。
記住這里改變了樣本(像素)寬高比將影響到后續濾鏡,如另外一個“setdar”或“setsar”濾鏡。
它接受下面參數:
-
r, ratio, dar (setdar only), sar (setsar only)
設置指定的寬高比
可以是浮點數或者表達式或者一個
num:den
形式的字符串(其中分別對應分子和分母,表示num/den
)。如果沒有指定則假定為0。在使用num:den
形式時要注意特殊字符轉義問題。 -
max
設置可改變的最大整數的值,其用於保證寬高比為設置值,而允許在分子(對應寬)和分母(對應高)減少的數.默認為100
參數表達式接受下面的內容:
-
E, PI, PHI
一些可用常量,其中
E
為自然對數的底,PI
為π值, 以及PHI
為黃金比例 -
w, h
輸入的寬和高
-
a
等於
w / h
-
sar
輸入的樣本點寬高比
-
dar
輸入的寬高比,計算自
(iw / ih) * sar
-
hsub, vsub
水平和垂直輸入色差分量值,例如對於
yuv422p
像素格式,hsub
為2,vsub
為1
setdar, setsar例子
-
設置輸出為16:9,可以是
setdar=dar=1.77777
setdar=dar=16/9
setdar=dar=1.77777 -
設置樣本點寬高比為10:11
setsar=sar=10/11
-
設置輸出為16:9,並設置了
max
值,采用命令setdar=ratio=16/9:max=1000
setfield
強制輸出幀的場序
這里setfield
把交錯場提供給輸出幀,它不改變輸入幀,只是設置相應的屬性,影響到后續的濾鏡(如果 fieldorder
和 yadif
)
濾鏡接受下面選項:
-
mode
有效的值是:
‘auto’
保持輸入屬性.
‘bff’
設置為下場優先
‘tff’
設置為上場優先
‘prog’
設置為逐行
showinfo
不改變輸入而在行中顯示每幀信息。
顯示的信息以key/value
的序列形式給出
下面是將顯示在輸出中的值:
-
n
幀序數,從0開始計數
-
pts
輸入幀的時間戳,以時基為單位,時間依賴於輸入
-
pts_time
按秒計的時間戳
-
pos
輸入幀在輸入流中的偏移定位,-1表示信息不可用和/或無意義(例如合成視頻中)
-
fmt
像素格式名
-
sar
輸入幀的寬高比,表示為
num/den
格式 -
s
輸入幀尺寸,語法同於視頻尺寸(分辨率)
-
i
交錯模式 ("P"對應 "逐行", "T" 對應上場優先, "B"為下場優先t)
-
iskey
為1表示是關鍵幀,0則不是
-
type
輸入幀圖片類型 ("I"對應I幀, "P" 對應P幀, "B" 對應B幀,或者 "?"對應未知類型).參考定義與
libavutil/avutil.h
中的av_get_picture_type_char
函數和AVPictureType
枚舉 -
checksum
輸入幀所有信息內容的 Adler-32校驗值 (以16進制輸出)
-
plane_checksum
輸入幀所有信息內容的 Adler-32校驗值 (以16進制輸出), 以格式"[c0 c1 c2 c3]"顯示
showpalette
顯示每個幀的256色模板。濾鏡是關於pal8
像素格式幀的。
它接受下面選項:
-s
設置調色板中顏色數量寬,默認為30(對應於30x30`pixel`)
shuffleplanes
重排和/或復制視頻通道
它接受下面參數:
-
map0
被用作第一個輸出通道的輸入通道
-
map1
被用作第二個輸出通道的輸入通道
-
map2
被用作第三個輸出通道的輸入通道
-
map3
被用作第四個輸出通道的輸入通道
第一個通道序數為0,默認是保持輸入不變。
交換第二和第三通道:
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
signalstats
評估各種視覺指標,協助確定問題與模擬視頻媒體的數字化。
默認濾鏡會以日志記錄這些元數據值:
-
YMIN
顯示輸入幀中最小的Y值(亮度),范圍為[0-255]
-
YLOW
顯示10%(表示有10%的像素點Y值低於這個值)的Y值,范圍[0-255]
-
YAVG
顯示輸入幀的平均Y值,范圍[0-255]
-
YHIGH
顯示90%(表示有90%的像素點Y值低於這個值)的Y值,范圍[0-255]
-
YMAX
顯示輸入幀中最大Y值,范圍[0-255]
-
UMIN
顯示輸入幀中最小的U值(色差U),范圍為[0-255]
-
ULOW
顯示10%(表示有10%的像素點U值低於這個值)的U值,范圍[0-255]
-
UAVG
顯示輸入幀的平均U值,范圍[0-255]
-
UHIGH
顯示90%(表示有90%的像素點U值低於這個值)的U值,范圍[0-255]
-
UMAX
顯示輸入幀中最大U值,范圍[0-255]
-
VMIN
顯示輸入幀中最小的V值(色差V),范圍為[0-255]
-
VLOW
顯示10%(表示有10%的像素點V值低於這個值)的V值,范圍[0-255]
-
VAVG
顯示輸入幀的平均V值,范圍[0-255]
-
VHIGH
顯示90%(表示有90%的像素點U值低於這個值)的U值,范圍[0-255]
-
VMAX
顯示輸入幀中最大V值,范圍[0-255]
-
SATMIN
顯示輸入幀最小色包含度值,范圍[0-~181.02].
-
SATLOW
顯示輸入幀10%(表示有10%的像素點該類值低於這個值)色包含度值,范圍[0-~181.02].
-
SATAVG
顯示輸入幀最平均包含度值,范圍[0-~181.02].
-
SATHIGH
顯示輸入幀90%(表示有90%的像素點該類值低於這個值)色包含度值,范圍[0-~181.02].
-
SATMAX
顯示輸入幀最大色包含度值,范圍[0-~181.02].
-
HUEMED
顯示輸入幀中的顏色中值,范圍[0-360].
-
HUEAVG
顯示輸入幀中顏色中值平均,范圍[0-360].
-
YDIF
顯示當前幀與前幀的像素平均Y值差,范圍[0-255].
-
UDIF
顯示當前幀與前幀的像素平均U值差,范圍[0-255].
-
VDIF
顯示當前幀與前幀的像素平均V值差,范圍[0-255].
濾鏡接受下面的選項:
-
stat
-
out
stat
指定一個額外形式的圖像分析,out
則對指定類型像素在輸出視頻中高亮(突出)顯示這兩個選項都接受下面的值::
‘tout’
識別時間離群值(瞬時差異)像素。 一個時間離群是像素不同於其周圍的像素有同樣的分量特性(趨勢)。例如視頻的中斷、頭阻塞、磁帶跟蹤問題
‘vrep’
識別垂直線重復。垂直線重復即幀內包含類似的行像素。在數碼視頻中垂直線重復較常見的,但這種情況在數字化模擬源時是罕見的,當出現則表明信號失落補償出現了問題。
‘brng’
識別像素超出范圍的
-
color, c
指定高亮的顏色,默認為黃色
signalstats例子
-
輸出各種數據指標
ffprobe -f lavfi movie=example.mov,signalstats="stat=tout+vrep+brng" -show_frames
-
輸出每幀Y的最小和最大值:
ffprobe -f lavfi movie=example.mov,signalstats -show_entries frame_tags=lavfi.signalstats.YMAX,lavfi.signalstats.YMIN
-
播放視頻,並以紅色突出標識超出范圍的像素
ffplay example.mov -vf signalstats="out=brng:color=red"
-
播放視頻,並與標志元數據一同展示:
ffplay example.mov -vf signalstats=stat=brng+vrep+tout,drawtext=fontfile=FreeSerif.ttf:textfile=signalstat_drawtext.txt
使用的命令后signalstat_draw.text的內容:
time %{pts:hms}
Y (%{metadata:lavfi.signalstats.YMIN}-%{metadata:lavfi.signalstats.YMAX})
U (%{metadata:lavfi.signalstats.UMIN}-%{metadata:lavfi.signalstats.UMAX})
V (%{metadata:lavfi.signalstats.VMIN}-%{metadata:lavfi.signalstats.VMAX})
saturation maximum: %{metadata:lavfi.signalstats.SATMAX}
smartblur
在不影響輪廓的基礎上模糊視頻
它接受下面的選項:
-
luma_radius, lr
設置亮度半徑,為浮點數,范圍[0.1,5.0],用於指示高斯濾波模糊的方差值(越大越慢),默認為1.0
-
luma_strength, ls
設置亮度強度。為浮點數,范圍[-1.0,1.0],用於配置模糊強度,在[0.0,1.0]內的值將模糊圖像,而[-1.0,0.0]內的值將銳化圖像,默認為1.0
-
luma_threshold, lt
設置亮度閥值作為系數來判斷一個像素是否該模糊。為[-30,30]內的整數,如果值在[0,30]則過濾平面,如果值在[-30,0]則過濾邊緣。默認為0
-
chroma_radius, cr
設置色度半徑,為浮點數,范圍[0.1,5.0],用於指示高斯濾波模糊的方差值(越大越慢),默認為1.0
-
chroma_strength, cs
設置色度強度。為浮點數,范圍[-1.0,1.0],用於配置模糊強度,在[0.0,1.0]內的值將模糊圖像,而[-1.0,0.0]內的值將銳化圖像,默認為1.0
-
chroma_threshold, ct
設置色度閥值作為系數來判斷一個像素是否該模糊。為[-30,30]內的整數,如果值在[0,30]則過濾平面,如果值在[-30,0]則過濾邊緣。默認為0
如果色度(差)選項沒有顯式設置,將采用對應的亮度值來設定
stereo3d
在不同的立體圖像格式之間進行轉換
濾鏡接受下面選項:
-
in
設置輸入格式類型
有效的是:
‘sbsl’
並排,左眼在左,右眼在右
‘sbsr’
並排,右眼在左,左眼在右
‘sbs2l’
半寬並排,左眼在左,右眼在右
‘sbs2r’
半寬並排,右眼在左,左眼在右
‘abl’
上下排布,左眼上,右眼下
‘abr’
上下排布,右眼上,左眼下
‘ab2l’
半高上下排布,左眼上,右眼下
‘ab2r’
半高上下排布,右眼上,左眼下
‘al’
交替幀,左眼前,右眼后
‘ar’
交替幀,右眼前,左眼后 默認是‘sbsl’.
-
out
設置輸出排布類型:
有效的在輸入格式基礎上還有:
‘arbg’
浮雕紅/藍通道 (紅色左眼,藍色右眼)
‘argg’
浮雕紅/綠通道 (紅色左眼,綠色右眼)
‘arcg’
浮雕紅/青通道 (紅色左眼,青色右眼)
‘arch’
浮雕紅/青一半(紅色左眼,青色右眼)
‘arcc’
浮雕紅/青通道 (紅色左眼,青色右眼)
‘arcd’
浮雕紅/青最小二乘優化杜布瓦投影 (紅色左眼,青色右眼)
‘agmg’
浮雕綠/品紅通道 (綠色左眼,品紅色右眼)
‘agmh’
浮雕綠/品紅半色通道 (綠色左眼,品紅色右眼)
‘agmc’
浮雕綠/品紅通道 (綠色左眼,品紅色右眼)
‘agmd’
浮雕綠/品紅最小二乘優化杜布瓦投影 (綠色左眼,品紅色右眼)
‘aybg’
浮雕黃/藍通道 (黃色左眼,藍色右眼)
‘aybh’
浮雕黃/藍半色通道 (黃色左眼,藍色右眼)
‘aybc’
浮雕黃/藍通道 (黃色左眼,藍色右眼)
‘aybd’
浮雕黃/藍最小二乘優化杜布瓦投影 (黃色左眼,藍色右眼)
‘irl’
隔行掃描的行 (左眼上行,右眼下一行)
‘irr’
隔行掃描的行 (右眼上行,左眼下一行)
‘ml’
單獨輸出左眼
‘mr’
單獨輸出右眼
默認是‘arcd’.
stereo3d例子
-
將並排3d格式轉換為浮雕黃/綠通道混合3d:
stereo3d=sbsl:aybd
-
將上下排布3d轉換為並排3d
stereo3d=abl:sbsr
spp
應用一個簡單的后處理濾鏡,壓縮或者解壓縮圖像(或-quality
為6)變化提升平均結果。
濾鏡接受下面選項:
-
quality
設置質量系數。它是一個平均水平數,范圍0-6,為6意味着有最高質量,每個增量大約對應處理速度2倍降低,默認為3
-
qp
強制量化參數。如果不設置,將從輸入流中提取
QP
值(如果可用) -
mode
設置閥值模式,允許:
‘hard’
硬閥值 (默認)
‘soft’
軟閥值 (更好的效果,也可能更模糊).
-
use_bframe_qp
如果為1將支持使用B幀的QP,使用這個選項如果B幀有大的QP則可能導致閃爍默認為0(不允許)
subtitles
利用libass
庫在輸入視頻上添加字幕
編譯配置選項--enable-libass
。濾鏡還需要編譯包含libavcodec
和libavformat
以支持把字幕文件轉換成ASS(Advanced Substation Alpha) 字幕格式
濾鏡接受下面選項:
-
filename, f
設置要讀取的字幕文件,它必須指定
-
original_size
指定原始視頻分辨率,這個視頻是要組合ASS文件的。其語法見視頻尺寸(分辨率)部分。為了應對ASS中長寬比例不良設計,放縮字體長寬比是必要的
-
charenc
設置輸入字符編碼,只對字幕過濾,僅當編碼不是UTF-8時使用
-
stream_index, si
設置字幕流索引數,僅在
subtitles
濾鏡中使用 -
force_style
覆蓋
subtitles
的默認樣式或腳本信息參數。它接受一個有,隔開的
KEY=VALUE`字符串
如果第一個鍵沒有指定,則假定第一個值是描述filename
例如渲染字幕文件sub.srt到輸入視頻頂部采用命令:
subtitles=sub.srt
它等效於:
subtitles=filename=sub.srt
渲染mkv文件中的字幕:
subtitles=video.mkv
渲染從文件活動的字幕文件中提取的字幕:
subtitles=video.mkv:si=1
為字幕添加一個透明的綠DejaVer
襯線:
subtitles=sub.srt:force_style='FontName=DejaVu Serif,PrimaryColour=&HAA00FF00'
super2xsai
使用濾鏡來平滑放大2倍(放大和插入)像素擴展算法。
通常用於在不降低銳度基礎上放大圖像。
swapuv
交換U和V分量值
telecine
對視頻應用telecine
處理
濾鏡接受下面選項:
-
first_field
可能值:
‘top, t’
上場優先(默認)
‘bottom, b’
下場優先
-
pattern
要應用的下拉模式。默認為23
一些典型的模式是
NTSC輸出(30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444
PAL輸出(25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334
thumbnail
在一個給定的連續幀序列中選定一個最具代表性的幀(縮略圖,抽幀效果形成跳幀序列)。
濾鏡接受下面選項:
-
n
設置要分析的幀批量大小。設置為
n
幀,則濾鏡會從中挑選出一幀,然后處理下面n
幀,直到最后,默認為100
因為濾鏡跟蹤整個幀序列,一個更大的n
將占用更多的內存,所有不推薦設置太高的值
thumbnail例子
-
每50幀抽取一個
thumbnail=50
-
應用ffmpeg來輸出一個縮略圖序列
ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
tile
讓連續幾幀磁貼拼接
濾鏡接受下面選項:
-
layout
設置網格布局模式(行和列數)。語法同於視頻尺寸(分辨率)部分
-
nb_frames
設置最大用作渲染的區域尺寸,必須小於或者等於
wxh
(這里是layout
值),默認為0,表示最大(所有)尺寸 -
margin
設置外邊界邊緣像素
-
padding
設置內邊界邊緣厚度(布局渲染后兩個幀間的像素個數)。更大的填補選項(表示有更多的值用於邊緣)將由濾鏡填充(顏色)
-
color
設置未使用區域的顏色。描述語法同於顏色/Color部分。默認為"black".
tile例子
-
產生8x8的PNG關鍵幀標題(
-skip_frame nokey
)ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
這里
-vsync 0
是必要的,以防止ffmpeg以原始幀率復制每個輸出幀 -
每個區域顯示5個圖片(在3x2的
layout
值下),間隔7像素且有2像素的外邊緣,使用了省略(關鍵名)和命名選項tile=3x2:nb_frames=5:padding=7:margin=2
tinterlace
執行各種類型的時間交錯
幀計數從1開始,所以第一幀為奇數幀。
濾鏡接受下面選項:
-
mode
指定交錯模式。這個選項也可以單獨指定一個值。關於值的列表見下。
有效的值:
‘merge, 0’
移動奇數幀到上場,偶數幀到下場,產生雙倍高度的幀,但是只要一半的幀率. ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 輸出: 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444
‘drop_odd, 1’
只輸出偶數幀,奇數幀被丟棄,不改變高但只要一半幀率 ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 輸出: 22222 44444 22222 44444 22222 44444 22222 44444
‘drop_even, 2’
只輸出奇數幀,丟棄了偶數幀,不改變高,但只有一半幀率 ------> time 輸入: 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’
擴展每個幀的高度,每行用黑色間隔,生成有2倍的高,和相同的幀率 ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 輸出: 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444
‘interleave_top, 4’
奇數幀在上保留奇數行,偶數幀在下保留偶數行的交錯,不改變高,有一半的幀率 ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 輸出: 11111 33333 22222 44444 11111 33333 22222 44444
‘interleave_bottom, 5’
偶數幀在上保留奇數行,奇數幀在下保留偶數行的交錯,不改變高,有一半的幀率 ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 輸出: 22222 44444 11111 33333 22222 44444 11111 33333
‘interlacex2, 6’
雙倍幀率不改變高,幀間插入一個兩幀的混合,混合模式(依賴於`top_field_first`標志)可是后幀的奇數行和前幀的偶數行交錯。這對沒有同步的隔行視頻顯示有好處 ------> time 輸入: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 輸出: 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
單獨的數字值被棄用,但這里給出是為了向后兼容
默認為
merge
. -
flags
指定標記影響篩選過程.
有效值對
flags
是:low_pass_filter, vlfp
使用垂直低通濾波。在從逐行源(且包含高頻垂直細節)創建交錯視頻時為了減少’twitter’和雲紋圖案現象需要使用這個濾波器 垂直低通濾波僅在`interleave_top`和`interleave_bottom`模式時允許使用
transpose
對輸入轉置行和列來可選的翻轉(圖像)
它接受下面的參數:
-
dir
指定翻轉方向,可以采用下面的值:
‘0, 4, cclock_flip’
逆時針90度和垂直翻轉(默認),它的效果是: L.R L.l . . -> . . l.r R.r
‘1, 5, clock’
順時針90度旋轉,效果是: L.R l.L . . -> . . l.r r.R
‘2, 6, cclock’
逆時針90度旋轉,效果是: L.R R.r . . -> . . l.r L.l
‘3, 7, clock_flip’
順時針90度旋轉且垂直翻轉,效果是: L.R r.R . . -> . . l.r l.L
對於4-7的值,表示轉換是對於肖像或風景的。這些值都是被棄用的,應該采用
passthrough
設定來替代數值是棄用,應該被刪除,取而代之的是符號常量
-
passthrough
如果輸入的幾何匹配(超出)一個指定的形式部分將不進行轉換。有效值是:
‘none’
一直適用
‘portrait’
保護肖像的幾何(對於 height >= width) ,指裁剪一定的轉換寬度,保護高度不變(等比例)
‘landscape’
保護景觀幾何 (對於 width >= height),表示裁剪一定的轉換高度,保持寬度不變(等比例)
默認為none.
例如,要順時針旋轉90度且保護肖像布局:
transpose=dir=1:passthrough=portrait
以命令的形式實現同樣效果:
transpose=1:portrait
trim
減少輸入,輸出包含一個連續輸入的組成部分
它接受下面參數:
-
start
指定開始部分時間的,即幀時間戳開始將輸出第一幀
-
end
指定結束部分時間,即幀的時間戳達到的前一幀是輸出的最后一幀。
-
start_pts
同於
start
,只是以時基為時間單位替代秒 -
end_pts
同於
end
,只是以時基為時間單位替代秒 -
duration
按秒最大持續時間 seconds.
-
start_frame
開始的幀序數,該幀開始被輸出
-
end_frame
結束的幀序數,該幀開始被丟棄(不被輸出)
其中start
、end
和duration
采用持續時間表示格式,其語法見持續時間
注意start
/end
開頭的選項和duration
都僅關注幀的時間戳,而帶_frame
后綴的版本則僅僅通過幀簡單計數。還要注意濾鏡並不改變時間戳,如果你想輸出是以0開始的時間戳,則需要在濾鏡后接一個setpts
濾鏡來處理。
如果有多個開始或者結束時間,濾鏡將采取貪婪算法,視圖在匹配至少一個約束(開始/結束)的情況下盡量多的輸出。想保留多個約束部分組成,需要鏈式采用多個裁剪過濾器(可能還需要結合其他濾鏡來拼接)
默認是保留所有輸入。所以它可以僅設置一個結束值來保留之前的一切。
例如:
-
只保留第二分鍾
ffmpeg -i INPUT -vf trim=60:120
-
保留第一秒內的
ffmpeg -i INPUT -vf trim=duration=1
unsharp
銳化或者模糊輸入視頻
它接受下面的參數:
-
luma_msize_x, lx
設置亮度矩陣水平尺寸。它必須是3-63的奇數值,默認5
-
luma_msize_y, ly
設置亮度矩陣垂直尺寸,它必須是3-63的奇數值,默認5
-
luma_amount, la
設置亮度效果強度,合理值為-1.5 - 1.5的浮點數(可超出前范圍)。
負數值表明視頻會被模糊,正數值則會被銳化,0則沒有效果
默認為1.0.
-
chroma_msize_x, cx
設置色度矩陣水平尺寸。它必須是3-63的奇數值,默認5
-
chroma_msize_y, cy
設置色度矩陣垂直尺寸。它必須是3-63的奇數值,默認5.
-
chroma_amount, ca
設置色度效果強度,合理值為-1.5 - 1.5的浮點數(可超出前范圍)。
負數值表明視頻會被模糊,正數值則會被銳化,0則沒有效果
默認為0.0.
-
opencl
如果為1,指定采用OpenCL能力, 要求編譯時啟用了
--enable-opencl
,默認0.
所有參數都是可選的默認值等效於’5:5:1.0:5:5:0.0’字符串
unsharp例子
-
加強亮度銳化效果
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
-
加強亮度和色度的模糊
unsharp=7:7:-2:7:7:-2
uspp
應用超慢/簡單的后處理,壓縮和解壓圖像(或對應於quality
中水平為8的完全處理)變化和平均結果。
它不同於spp
,實際上uspp
編碼和解碼每個libavcodec
塊(Snow),而spp
使用一個內部簡化的8x8 DCT,其相似於MJPEG的DCT
濾鏡接受下面選項:
-
quality
設置質量水平值。它是平均水平值數字,范圍0-8,如果為0,則濾鏡沒有效果,設置為8將有最好的效果。每增加1級大約速度減慢2倍,默認為3
-
qp
強制設定質量參數,如果不設置,將采用輸入流中的QP值(如果可用)
vidstabdetect
分析視頻的靜止/不晃動,兩步過程中的第1步,下一步是vidstabtransform
。
這個濾鏡生成一個文件,指定相對平移和旋轉變換后續幀的信息,它用於vidstabtransform
濾鏡
為了編譯支持它需要設置--enable-libvidstab
濾鏡接受下面選項:
-
result
指定保存轉換信息的文件路徑。默認為 is transforms.trf.
shakiness設置攝像頭如何快速設置來滿足晃動的視頻,值范圍是1-10整數,1意味着很小的晃動,10意味着強烈晃動,默認為5
accuracy設置檢測過程的准確性,值范圍為1-15,1表示低精度,15表示高精度。默認15
stepsize設置搜索過程的間隔值(掃描尺度)。最低是1像素分辨率掃描,默認為6
mincontrast設置最低對比度。低於這個值一個本地測量領域會被丟棄。為范圍在0-1的浮點數,默認為0.3.
tripod設置參考幀數三腳架模式
如果允許,對幀運動的比較將以一個參考過濾流相比進行,從中指定一個。這樣可以補償或多或少的靜態幀中的所有動作,保持相機視圖絕對靜止
如果設為0則禁用,幀數從1開始計數
show顯示字段和轉換生成的幀,接受一個0-2間的整數,默認為0,它禁止任何可視內容。
vidstabdetect例子
-
使用默認值:
vidstabdetect
-
分析晃動視頻的強度,把結果放置在mytransforms.trf:
vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
-
把內部轉換生成的視頻顯示出來(可視化):
vidstabdetect=show=1
-
在ffmpeg中分析中等強度晃動:
ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
vidstabtransform
視頻靜止/不晃動,兩步過程的第二步,其第一步是vidstabdetect
從一個文件讀取每一幀需要應用/補償的信息,與vidstabdetect
一起使用來穩定視頻,參看http://public.hronopik.de/vid.stab來了解更多。見下,它對於使用unsharp
是很重要的。
為了使用它需要允許編譯設置--enable-libvidstab
vidstabtransform選項
-
input
設置讀取轉換信息的文件,默認為transforms.trf.
-
smoothing
設置幀數,其值以表達式 (value*2 + 1)用作低通來濾除攝像機運動,默認為10.
例如對於設置為10則意味着21幀被使用(過去10幀和接下來10幀)來平滑攝像機移動。更大的值可以得到一個更平滑視頻,但限制攝像機加速度(平底鍋搖/傾斜 移動)。0表示攝像機是靜止的
-
optalgo
設置相機路徑優化算法
接受值:
‘gauss’
鏡頭運動采用高斯低通濾波器內核(默認)
‘avg’
轉換平均值
-
maxshift
設置幀中最大轉換像素值,默認為-1,表示沒有限制
-
maxangle
設置最大幀旋轉角度(弧度值,度*PI/180),默認為-1,表示沒有限制
-
crop
指定如何處理邊界,由於運動補償可能可見
有效值:
‘keep’
從以前幀保持圖像信息 (默認)
‘black’
填充黑色邊
-
invert
為1則轉化轉換。默認值為0
-
relative
為1表示轉換是相對於前幀,0表示絕對的(不和前幀相關),默認為0
-
zoom
設置放大比例。正數則相對於推進效果,負數相當於拉遠效果,默認為0(不變)
-
optzoom
設置最佳縮放以避免邊界
可能值:
‘0’
禁止
‘1’
確定最優靜態縮放值(只有很強的運動將導致可見邊界)(默認)
‘2’
確定最優自適應縮放值(沒有邊界可見),參見`zoomspeed`
注意這里的
zoom
值被添加到一個計算中 -
zoomspeed
設置每幀放大的最大百分比限度值(當
optzoom
被設置為2時),范圍為0-5,默認為0.25 -
interpol
指定插值類型
有效值是:
‘no’
不插值
‘linear’
水平線性插值
‘bilinear’
在兩個方向上線性插值(默認)
‘bicubic’
在兩個方向上立方插值(慢)
-
tripod
如果為1啟用虛擬三腳架模式,其等效於
relative=0:smoothing=0
默認為0 Default value is 0.它要求在
vidstabdetect
中也啟用tripod
-
debug
為1增加日志記錄按冗長形式。也檢測全局運動寫入到臨時文件 global_motions.trf,默認為0
vidstabtransform例子
-
幀ffmpeg使用默認典型的穩定系數:
ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
注意一直建議使用
unsharp
-
從給定文件加載轉換數據來放大一點:
vidstabtransform=zoom=5:input="mytransforms.trf"
-
使視頻更平滑:
vidstabtransform=smoothing=30
vfilp
讓輸入垂直翻轉
例如:利用ffmpeg垂直翻轉視頻
ffmpeg -i in.avi -vf "vflip" out.avi
vignette
使或扭轉自然漸暈效應
濾鏡接受下面選項:
-
angle, a
以弧度表示的鏡頭組角度
值范圍為 [0,PI/2]
默認為: "PI/5"
-
x0
-
y0
設置中心坐標表達式,默認分別是"w/2" and "h/2"
-
mode
設置向前/向后模式
有效值為:
‘forward’
中心點的距離越大,圖像的顏色越深
‘backward’
中心點的距離越大,圖像越亮。這可以用於扭轉裝飾圖案效果,雖然沒有自動檢測提取鏡頭角度和其他設置。它也可以用來創建一個燃燒的效果。
默認為‘forward’.
-
eval
設置表達式計算模式(對於angle, x0, y0).
有效值為:
‘init’
只在初始化時計算一次
‘frame’
每幀計算,它的速度遠低於`init`模式,因為它需要每幀計算所有表達式,但這允許了先進的動態表達式(完成一些特效)
默認為‘init’.
-
dither
為1(默認)則啟用抖動減少循環條帶效應
-
aspect
設置插圖像素長寬比。此設置將允許調整插圖形狀,設置值對於輸入
SAR
(樣本長寬比)將調整矩形光損失后的尺寸默認為1/1.
vignette表達式
這里有angle
(原文誤為alpha), x0 和 y0表達式允許包含的參數
-
w
-
h
輸入的寬和高
-
n
輸入幀序數,從0開始計
-
pts
以時基單位計的PTS (作品時間戳),未定義則為
NAN
-
r
輸入視頻幀率,未知則為
NAN
-
t
以秒計的PTS (作品時間戳),未定義則為
NAN
-
tb
輸入視頻時基
vignette例子
-
應用簡單的強大的漸暈效應:
vignette=PI/4
-
做一個閃爍的光損失:
vignette='PI/4+random(1)*PI/50':eval=frame
w3fdif
反交錯的輸入視頻(“w3fdif”代表“韋斯頓3場反交錯濾波器——Weston 3 Field Deinterlacing Filter”)。
基於英國廣播公司(BBC R&D)的馬丁•韋斯頓(Martin Weston)研發,並由吉姆·伊斯特布魯克(Jim Easterbrook)實現的反交錯算法。這個濾鏡使用的濾波系數是BBC研發的
它有兩組濾波系數,被稱為"simple"(簡單)和 "complex"(復雜)。使用那個濾波系數可以通過參數設置。
-
filter
設置采用的濾波系數,允許值為:
‘simple’
簡單濾波器系數.
‘complex’
復雜濾波器系數
默認‘complex’.
-
deint
指定幀反交錯,接受值為:
‘all’
反交錯所有幀
‘interlaced’
僅反交錯設置為交錯的幀
默認‘all’.
xbr
對像素應用一個xBR高質量放大濾鏡,它遵循一套邊緣檢測規則,詳情見http://www.libretro.com/forums/viewtopic.php?f=6&t=134
接受選項:
-
n
設置放縮尺寸, 2對應於2xBR,3對應於3xBR,4對應於4xBR,默認為3
yadif
反交錯輸入視頻(yadif
意味着另外一個反交錯濾鏡)
它接受下面的參數:
-
mode
采用隔行掃描模式。它接受下列值之一:
0, send_frame
對每幀都輸出
1, send_field
對每場都輸出一幀
2, send_frame_nospatial
類似`send_frame`,但跳過交錯檢查
3, send_field_nospatial
類似`send_field`,但跳過交錯檢查
默認為
send_frame
-
parity
假定輸入隔行視頻的模式,它接受下列值:
0, tff
假定為上場優先
1, bff
假定為下場優先
-1, auto
自動偵測
默認為
auto
,如果交錯模式未知或者不能正確處理則假定為tff
-
deint
指定哪些幀需要反交錯,接受下列值:
0, all
所有幀
1, interlaced
僅標記為交錯的幀
默認為所有
zoompan
應用放大和搖鏡頭效果
濾鏡接受下面選項:
-
zoom, z
設置放大系數表達式,默認為1
-
x
-
y
設置x和y表達式,默認為0
-
d
設置持續幀數,這設置有多少數量的幀受到影響
-
s
設置輸出圖像尺寸,默認為 ’hd720’.
每個表達式接受下列參數: -
in_w, iw
輸入的寬
-
in_h, ih
輸入高
-
out_w, ow
輸出寬
-
out_h, oh
輸出高
-
in
輸入幀計數
-
on
輸出幀計數
-
x
-
y
最后計算的x和y對於當前輸入幀的x和y表達式。
-
px
-
py
之前輸入幀對應的最后輸出幀最后計算’x’ 和 ’y’,或者為0(第一個輸入幀)
-
zoom
當前輸入幀對應的最后
z
表達式計算得出的放大系數 -
pzoom
前一輸入幀前最后輸出幀計算的放大系數
-
duration
當前輸入幀對應的輸出幀數。對每個輸入幀計算
d
值 -
pduration
前一輸入幀之前創建輸出幀的數量
-
a
有理數 = iw/ih
-
sar
樣本長寬比
-
dar
顯示長寬比
zoompan例子
-
推近到1.5 並且同時在中心附近搖的效果:
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
-
推近到1.5 並且同時以中心搖的效果:
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'