ffmpeg文檔37-視頻濾鏡


37 視頻濾鏡

在配置編譯FFmpeg時可以通過--disable-filters來禁止所有濾鏡的編譯。也可以配置編譯腳本來輸出所有包含進編譯的濾鏡信息。

下面是當前可用的視頻濾鏡介紹。

alphaextract

把輸入視頻作為灰度視頻來提取透明通道,它通常和alphamerge濾鏡聯用。

alphamerge

通過添加或者替換透明通道,讓主要視頻與另外一路視頻混合。這里主要是使用alphaextract來讓不支持透明通道的視頻成為允許傳輸或存儲幀透明的幀序列

例如:為了重建完整的幀,讓一個普通的YUV編碼視頻和利用了alphaextract的一個單獨的視頻混合:

movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]

因為這個濾鏡專為重建幀設計,所以它的運行過程中沒有考慮時間戳,而是在輸入達到流結束時終止。這可能將導致編碼管道丟幀,如果你僅想實現一個圖像疊加到視頻,建議采用overlay濾鏡。

ass

類似subtitles,除了它不需要libavcodeclibavformat。另一方面,它受限於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_sizeluminance_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_radiusalpha_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_poweralpha_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_win_h

  • out_w

  • out_h

    輸出的(裁剪后的)寬和高

  • ow

  • oh

    同於out_wout_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’.

通過一個簡單的插值周圍像素來抑制台標。僅需要在台標周圍設置一個矩形遮蓋就可以消除台標(有時會出現莫名的東西)

它接受下面的參數:

  • 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選項,則必須設定。

    如果同時設定了texttextfile將引發一個錯誤

  • 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坐標。

    所有參數都允許xy被引用,例如y=x/dar

文本擴展

如果expansion設置為strftime,則濾鏡會接受strftime()序列提供的文本並進行相應擴展。檢查strftime()的文檔。這個特性現在是棄用的。

如果expansion設置為none,則文本都是直接打印文本(即直接以文本內容不擴展進行輸出)

如果expansion設置為normal(它是默認值),將應用下面的擴展規則。

序列形式${...}的內容將被擴展。大括號之間的文本是一個函數的名字,可能緊隨其后是一些用隔開的參數。如果包含特殊字符或分隔符(這里是:或者}),它們應該被轉義。

注意對於在作為濾鏡參數的text選項值,或者濾鏡鏈圖中的參數(多個濾鏡連接時)以及是在shell環境中使用,則可能需要4層轉義。使用文本文件可以避免這些問題(減少轉義的使用)。

下面是有效的函數(功能):

  • expr, e

    計算結果的表達式

    它必須有一個參數來計算,接受計算x和y相同的常數和函數。注意並不是所有的常數都適合,例如text_wtext_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閥值,從而標注出邊緣

    lowhigh的值范圍為[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例子

  • 提取亮度和uv顏色分量到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_framestart_time都被設置,則效果會在更后的時間開始,默認為0

  • duration, d

    按秒的效果持續時間。對於淡入,在此時后將以本身的視頻輸出,對於淡出此時后將以設定的顏色輸出。如果durationnb_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濾鏡僅工作在固定幀率視頻。在輸入視頻是混合了電視電影和逐場內容且是變幀率時不能使用fieldmatchdecimate

濾鏡接受下面的選項:

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

在這些例子里,我們可以看出pcn的意義。基本上,它們指出參考幀的位置(關系)

  • p,匹配於前一幀

  • c,匹配於當前幀

  • n,匹配於下一幀

u/b

這里的ub是在匹配幀基礎上的位級描述。在下面的例子中,我們假定當前匹配了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

包兩個不同的視頻流到立體視頻,設置適當的元數據支持的編解碼器。兩個視角視頻需要有相同的尺寸與幀頻以及以短的視頻為停止時間。注意你可能需要預先通過scalefps調整。

接受下面的參數:

  • 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, weakstrong,默認為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

    設置waveformlevels的顯示模式,它接受:

    ‘parade’

      依次排列各種顏色圖,`waveform`的`row`是從左到右,`column`是從上到下。`levels`中是從上到下。
    
      `waveform`中應用這種模式可以容易的通過比較頂部與底部輪廓波形來區分高光和陰暗的顏色圖像,因為白、灰和黑的特點是完全相等的紅、綠和藍的混合。中性的圖片區域應該是這三種波形的大致相等的寬/高度。如果不是,則可以通過水平調整這三個波形來很容易的實現校正。
    

    ‘overlay’

      除了表示顏色的圖形組件直接疊加在一起外,與`parade`模式展示的信息相同
    
      在`waveform`中這樣的顯示模式更易於發現顏色的相對差異或相似。因為重疊區域的分量應該是相同的,如中性的白色、灰和黑
    

    默認為parade

  • levels_mode

    levels設置模式,可以是linearlogarithmic,默認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".

hH互斥,不能同時設定

其中b, h, Hs表達式允許下面內容:

  • 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_modealpha_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)並且從結果矩陣中提取k1k2系數。

注意相同效果濾鏡在開源KDE項目工具KritaDigikam中同樣是有效的。

這個濾鏡還可以同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_srcr_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或者RGBlutrgb只允許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個輸入分量)。此后的BbCcDd以此類推,分別指定第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

  • 轉換rgb24yuv444p

    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

    設置刪除閥值。

    其中hilo是對於一個8x8像素塊和代表實際像素值差異,所以閥值64對應與每個像素都有1個單位的差異,或者被完全不同的塊覆蓋

    一個幀作為候選(被丟棄)則它沒有超過hi個不同的8x8塊和沒有超過frac量的(1意味着整個圖像)超過lo個不同的8x8

    默認值為hi64*12,lo64*5,frac0.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,其中colsrows是結構元素的行和列數,anchor_xanchor_y是錨點的坐標值,shape是結構化元素的圖形,shape可能值是"rect"、 "cross"、 "ellipse"和 "custom"。如果custom被設置,它還必須跟一個格式為=filename來指定一個位圖,其每個可打印字符對應於一個亮的像素。當定制的圖形被使用,colsrows被忽略,行和列的數有讀取的文件決定。

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, param3param4依賴於所選的平滑類型,其中param1, param2接受正整數或0,param3param4接受浮點數。其中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

xy的表達式中接受下面的參數:.

  • main_w, W

  • main_h, H

    主要輸入流的寬和高

  • overlay_w, w

  • overlay_h, h

    被覆蓋流的寬和高

  • x

  • y

    對於xy的計算值,它在每幀中都計算

  • hsub

  • vsub

    輸出格式中的水平和垂直色度通道分量值,例如對於yuv422p像素格式,hsub是2 ,vsub是1

  • n

    幀序數,從0開始計數

  • pos

    輸入幀在文件當中的偏移,如果未知則為NAN

  • t

    時間碼,以秒計。如果時間碼未知則為NAN

overlay命令

濾鏡支持下面的命令:

  • x

  • y

    修改覆蓋輸出的xy坐標。它接受的語法同於前面對應的選項

    如果指定的表達式無效,則保持當前值

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

在原始輸入的xy坐標上填充輸入圖像(多處部分用顏色填充)

它接受下面參數:

width, w
height, h

指定輸出尺寸的表達式。如果值為0,則輸入圖像尺寸作為輸出尺寸

在`width`表達式中可以引用`height`值,反之亦然

默認都是0

x
y

指定輸入圖像在輸出中放置的坐標據上邊和左邊的值

其中`x`可以引用`y`值計算,反之亦然

默認為0.

color

指定添加區域的顏色。語法參考[顏色/color](ffmpeg-doc-cn-07.md#顏色Color)章節的介紹

默認為"black". 

對於width, height, xy選項的表達式,可以包含下面的常量:

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產生)編碼輸出GIF

    ffmpeg -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)。

水平和垂直解封過濾器共享differenceflatness,因此不能設置平面度值不同的水平和垂直的閾值。

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)

抑制台標,使用一個圖像文件來確定哪些像素組成台標。它通過采用台標相近像素來填充台標位置。

率接受下面選項:

  • 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

    水平和垂直色度分量。例如對像素格式yuv422phsub為2,vsub為1

  • in_w, iw

  • in_h, ih

    輸入的視頻寬和高

  • out_w, ow

  • out_h, oh

    輸出的寬和高,它指定了要填補的寬和高表達式

  • rotw(a)

  • roth(a)

    計算要完整包含旋轉a弧度圖像的最小的寬和高

    它只能用於計算out_wout_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_win_h.

  • out_w

  • out_h

    輸出 (放縮后)寬和高

  • ow

  • oh

    同於out_wout_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=ih
    PHI: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把交錯場提供給輸出幀,它不改變輸入幀,只是設置相應的屬性,影響到后續的濾鏡(如果 fieldorderyadif

濾鏡接受下面選項:

  • 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。濾鏡還需要編譯包含libavcodeclibavformat以支持把字幕文件轉換成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

    結束的幀序數,該幀開始被丟棄(不被輸出)

其中startendduration采用持續時間表示格式,其語法見持續時間

注意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)'


免責聲明!

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



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