翻译ffmpeg-all文档(37),视频滤镜

6450阅读 0评论2015-07-28 xdsnet
分类:其他平台

视频滤镜

在配置编译FFmpeg时可以通过--disable-filters来禁止所有滤镜的编译。也可以配置编译脚本来输出所有包含进编译的滤镜信息。

下面是当前可用的视频滤镜介绍。

alphaextract

把输入视频作为灰度视频来提取透明通道,它通常和alphamerge滤镜联用。

alphamerge

通过添加或者替换透明通道,让主要视频与另外一路视频混合。这里主要是使用alphaextract来让不支持透明通道的视频成为允许传输或存储帧透明的帧序列

例如:为了重建完整的帧,让一个普通的YUV编码视频和利用了alphaextract的一个单独的视频混合:

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

因为这个滤镜专为重建帧设计,所以它的运行过程中没有考虑时间戳,而是在输入达到流结束时终止。这可能将导致编码管道丢帧,如果你仅想实现一个图像叠加到视频,建议采用overlay滤镜。

ass

类似

bbox

在输入的亮度平面上计算非黑边缘。

这个滤镜按设定的最小亮度值计算平面上所有像素图像的编译(按亮度——即按阀值连接起来构成多个区块,阀值连线即边缘)。描述边缘的参数会记录到滤镜日志中。

滤镜接受下面的选项:

blackdetect

检测视频(几乎)完全是黑色的时间间隔(段)。它可以用于检测章间的过渡、广告或者无效的录制。输出是以秒为单位的检测出黑场时间段的开始、结束和持续时间线信息。

为了显示(输出)时间线信息,你需要设置日志层次为AV_LOG_INFO

滤镜接受下面的选项:

下面的例子设置黑像素标准为最小值,黑场时长大于等于2秒:

blackdetect=d=2:pix_th=0.00 

blackframe

判断(几乎)黑帧。它可以用于检测章间的过渡、广告等。输出内容包括检测到的黑帧数、占比和文件中的偏移(对文件格式支持检测,如果不支持检测为-1)和以秒为单位的时间戳。

为了显示这些输出信息,需要设置日志层次为AV_LOG_INFO

它接受下面的参数:

blend,tblend

混合两个视频帧

其中blend混合两路输出1路流,第一个输入为top层,二个路为bottom层,输出以输入短的为结束。而tblend(时间混合)需要从一个单独视频流的连续两帧,让新帧在上叠加在老帧上。

接受选项的介绍如下:

blend,tblend例子

boxblur

对输入视频应用边缘虚化

接受下面的参数:

接受选项的介绍见下:

codecview

可视化展示一些编码的信息

一些编码可以在图像的一端或者其他地方输出信息。例如一些MPEG编码器就可以通过设置flags2标志为export_mvs来输出运动矢量检测信息

滤镜接受下面选项:

codecview例子

colorbalance

对输入帧编辑主要的颜色(红、绿和蓝)强度

滤镜用于对输入帧调整阴影、中间调或高亮区域实现 red-cyan(红和蓝绿), green-magenta(绿和品红) 或blue-yellow(蓝和黄)的平衡。

一个正向的调整值对应于平衡主要颜色,一个负数值则对应于补色。

滤镜接受下面的选项:

colorbalance例子

colorkey

RGB颜色键控

滤镜接受下面的选项:

colorkey例子

colorlevels

使用层来调整输入视频

滤镜接受下面的选项:

colorlevels例子

colorchannelmixer

通过重新混合颜色通道调整视频输入帧

这个滤镜通过在不同颜色通道对同一个像素添加与其他通道相关的值进行颜色调整,例如为了修改红色,输出会是:

red=red*rr + blue*rb + green*rg + alpha*ra 

滤镜接受下面选项:

colorchannelmixer例子

colormatrix

颜色转换矩阵(常用于颜色标准转换)

滤镜接受下面的选项:

例如要转换BT.601 到 SMPTE-240M需要:

colormatrix=bt601:smpte240m 

copy

复制输入源,而不改变的输出,常用于测试。

crop

裁剪输入

接受下面的参数:

这里 out_w, out_h, x, y参数都可以是表达式,包含下述意义:

crop例子

cropdetect

自动检测裁剪尺寸(自动去除边缘的黑部)

它计算必要的剪切参数并通过日志系统输出推荐的参数。检测尺寸对应于输入视频的黑色区域

它接受下面的参数:

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

下面是滤镜允许的选项:

curves例子

dctdnoiz

采用2D DCT来降噪(频域滤波)

滤镜不能实时应用。

滤镜接受下面的选项:

dctdnoiz例子

decimate

定期重复的帧数丢弃

接受下面的选项:

dejudder

删除部分隔行电视电影的内容产生的颤动

颤动可被引发,例如通过

对于同时运动(比如在车上拍摄),它十分有用,因为主题框架内混淆了本身有益的运动和无意的抖动,通过限定可以有效的区分,减少搜索难度。

如果这些参数中的一个或者所用被设置为-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

    使用电视电影的逆操作。它需要一个预定的模板指定使用过的模式(必须同原始操作一样的参数)

    滤镜接受下面的选项:

    drawbox

    在输入图像上画一个颜色区块。

    它接受下面的参数:

    对于 x, y, w 和 h 以及t是表达式时,可以包括下面的内容:

    drawbox例子

    drawgrid

    在输入图像上画上网格线(外框)

    接受下面的参数:

    对于 x, y, w 和 h 以及t是表达式时,可以包括下面的内容:

    drawgrid例子

    drawtext

    在视频的上绘制文本或者描述于文件的文本块,使用了libfreetype库。

    为了允许这个滤镜,在编译时需要配置--enable-libfreetype,为了允许默认的字体回调和font选项,还需要配置--enable-libfontconfig。为了允许text_shaping选项,还需要配置--enable-libfribidi

    drawtext语法

    它接受如下参数:

    对于x和y是表达式时,它们接受下面的常量和函数:

    文本扩展

    如果expansion设置为strftime,则滤镜会接受strftime()序列提供的文本并进行相应扩展。检查strftime()的文档。这个特性现在是弃用的。

    如果expansion设置为none,则文本都是直接打印文本(即直接以文本内容不扩展进行输出)

    如果expansion设置为normal(它是默认值),将应用下面的扩展规则。

    序列形式${...}的内容将被扩展。大括号之间的文本是一个函数的名字,可能紧随其后是一些用隔开的参数。如果包含特殊字符或分隔符(这里是:或者}),它们应该被转义。

    注意对于在作为滤镜参数的text选项值,或者滤镜链图中的参数(多个滤镜连接时)以及是在shell环境中使用,则可能需要4层转义。使用文本文件可以避免这些问题(减少转义的使用)。

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

    drawtext例子

    关于libfreetype, 参考

    对于libfribidi, 参考

    fade例子

    fftfilt

    在频域内应用任意表达式于样品

    fftfilt例子

    field

    使用步算法从隔行图像中提取单个场来避免浪费CPU时间。标记为逐行输出帧。

    滤镜接受下面选项:

    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的意义。基本上,它们指出参考帧的位置(关系)

    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例子

    fieldorder

    改变输入的场序

    接受下面的参数:

    默认是tff

    转换是将图像内容向上或者向下一行,并填充其余部分以符合图像内容。该方法适合大多数广播电视的场序转换

    如果输入视频没有标记为交错,或者已经标记为所需场序,则滤镜不会改变输入视频

    它常用于转换到PAL DV格式,它是下场优先的。

    例如:

    ffmpeg -i in.vob -vf "fieldorder=bff" out.dv 

    fifo

    缓冲输入并在需要时送出

    它常用于libavfilter的自动插入(保证一些连接有效)

    它没有参数

    find_rect

    找到一个矩形对象

    它接受下面的选项:

    find_rect例子

    cover_rect

    覆盖一个矩形对象

    它接受下面的选项:

    cover_rect例子

    format

    转换输入视频为指定的像素格式。libavfilter尝试为下一个滤镜输入选择一个合适的输出(而自动采用)。

    它接受下面的参数:

    format例子

    fps

    通过复制或者丢弃帧来把帧率调整为一个近似固定值

    它接受下面的参数:

    另外,选项可以指定为一个平面字符串形式:fps[:round]

    参考setpts滤镜

    fps例子

    framepack

    包两个不同的视频流到立体视频,设置适当的元数据支持的编解码器。两个视角视频需要有相同的尺寸与帧频以及以短的视频为停止时间。注意你可能需要预先通过scalefps调整。

    接受下面的参数:

    一些例子:

    framestep

    N帧选择1帧

    它接受下面选项:

    frei0r

    对视频采用frei0r效果

    编译配置参数--enable-frei0r

    接受下面的参数:

    frei0r例子

    关于frei0r的更多信息参考spp滤镜的快速版本

    它分离 (I)DCT为水平/垂直 来传递,不同于简单的 post滤镜,其中每个块执行一次,而不是每个像素,则允许更快的速度。

    滤镜接受下面的选项:

    geq

    滤镜接受下面的选项:

    根据指定的选项来确定颜色空间。如果lum_expr, cb_expr, 或者cr_expr中的一个被定义,则滤镜自动选择YCbCr颜色空间,如果red_expr, green_expr,或 blue_expr中有一个被定义则选择RGB颜色空间

    如果其中一个颜色分量选项没有被定义,则它等于前一个谷底值。如果alpha_expr没有被定义则认为是不透明的。如果没有任何颜色分量被定义,它将只计算亮度表达式

    表达式接受下面变量和函数:

    对于函数,如果x和y超出了范围,则值自动由影片边缘值代替

    geq例子

    gradfun

    解决条带效果,这是由于对于8位颜色深度有时会被就近截断成平面(化),通过插入渐变来柔化它们

    这个滤镜仅用于回放。在有损压缩前也不要使用它,因为压缩本身就会损伤细节(渐变)而成为条带

    它接受下面的参数:

    另外,选项可以采用平面字符串的形式指定: strength[:radius]

    gradfun例子

    haldclut

    对视频流采用Hald CLUT

    第一个输入是要处理的视频,第二个则是Hald CLUT,这个Hald CLUT输入可以是一张简单的图片或者复合视频信号

    滤镜接受下述选项:

    haldclut也有类似lut3d相同的选项(两个滤镜共享相同的内部结构)。

    关于Hald CLUT可以通过Eskil Steenberg(Hald CLUT的作者)的网站,在PIt: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。.

    通常,下面会利用

    它包含原始和CLUT的预览效果:SMPTE颜色条被显示在右上,其下显示相同的颜色处理的颜色变化

    然后,这Hald CLUT效果可以可视化:

    ffplay input.mkv -vf "movie=clut.png, [in] haldclut" 

    hflip

    水平翻转输入视频

    例如利用fmpeg水平翻转输入视频:

    ffmpeg -i in.avi -vf "hflip" out.avi 

    histeq

    这个过滤器适用于每帧的基础上的全局颜色直方图均衡化

    它被用于产生压缩了像素强度的正确视频。滤镜在强度范围内重新分配像素强度分布。它可被视为“自动调整对比度滤镜"。滤镜只适用于纠正退化或者较差质量的视频采集

    接受下面的选项:

    histogram

    对输入视频计算并绘制一个颜色分布直方图

    它计算的直方图代表了各种颜色分量在图像中的分布情况。

    滤镜接受下面的选项:

    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创建。

    它接受下面的选项:

    hue

    编辑或者设定颜色的饱和度

    接受下面的参数:

    hH互斥,不能同时设定

    其中b, h, Hs表达式允许下面内容:

    hue例子

    hue命令

    滤镜还支持下面的命令:

    idet

    检测视频交错类型。

    这个滤镜试图检测如果输入帧交错,逐行,顶部或底部优先(对交错视频)。它还将尝试检测相邻帧之间的字段重复(电视电影的标志)。

    单帧检测时只考虑当前与相邻帧每一帧类型。多帧检测结合的之前的帧类型历史。

    滤镜输出日志有下面的元数据值:

    滤镜接受下面选项:

    il

    反转非交错或者交错

    这个滤镜可以把让非交错图像变成交错的,把交错图像变成非交错的。非交错的图像被分裂为2部分(称作半图),其中奇数行移到输出图像的上部,偶数行移到下半部分。你可以利用滤镜连续处理2次(相当于没有效果)。

    滤镜接受下面的选项:

    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'这样依次生成

    它接受下面的选项参数:

    kerndeint

    通过Donald Graft的自适应内核deinterling反交错视频。其使交错视频转换成逐行视频

    下面是接受参数的介绍.

    kerndeint例子

    lenscorrection

    径向透镜畸变修正

    这个滤镜可以用来修正广角镜头产生的径向畸变,从而修正图像。要找到合适的参数,可以使用工具,例如opencv或者简单的多次试错尝试。利用opencv源码中的校准样例(在 samples/cpp)并且从结果矩阵中提取k1k2系数。

    注意相同效果滤镜在开源KDE项目工具KritaDigikam中同样是有效的。

    这个滤镜还可以同vignette滤镜联合使用,来补偿透镜错误,它修正滤镜处理图像的失真,而vignette滤镜纠正亮度分布,所以你有时可能需要同时使用两个滤镜,不过你还要注意点二者的顺序,即到底是哪个滤镜先使用

    lenscorrection选项

    滤镜接受下面选项:

    生成修正的公式:

    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滤镜。

    滤镜接受下面的选项:

    lut, lutrgb, lutyuv

    根据每个像素的分量数据查表选择输出值的滤镜。

    其中lutyuv应用于YUV输入视频,而lutrgb应用于RGB输入视频

    滤镜接受下面的参数:

    它们每个人都指定使用的表达式计算像素对应分量(查找表方法)。

    具体的分量关联到每个c*选项的输入格式。

    其中lut滤镜允许输入像素格式是YUV或者RGBlutrgb只允许RGB格式,lutyuv只允许YUV格式

    表达式支持下列常量和函数:

    所有表达式默认为"val"

    lut, lutrgb, lutyuv例子

    mergeplanes

    从一些视频流中混合颜色通道

    滤镜最多接受4路输入流,然后混合选用的(颜色)平面来输出。

    滤镜接受下面的选项:

    mergeplanes例子

    mcdeint

    应用反交错运动补偿

    它每帧需要一个输入字段,所以必须同yadif=1/3或者等效 一同使用。

    率接受下面的选项:

    mpdecimate

    减少对前帧变化不大的帧,以减少帧速率

    这个滤镜的主要作用是对非常低码率的编码进行预处理(例如面向拨号调整解调器应用的),不过理论上还可以用于修复发转的电视电影影片(影片转换成电视又转换回来)

    下面是选项介绍:

    negate

    否定输入视频

    它接受一个整数(参数),如果非零它否定透明分量(如果可用)。默认值是0

    noformat

    强制libavfilter不采用指定的像素格式来输入到下一个滤镜

    接受的参数为:

    noformat例子

    noise

    给视频添加噪点

    滤镜接受下面的选项:

    noise例子

    null

    不改变输入进行输出

    ocv

    申请使用libopencv进行视频转换。

    要启用需要处理编译参数--enable-libopencv,且系统中要有libopencv的头和库。

    接受下面的参数:

    custom被设置,它还必须跟一个格式为=filename来指定一个位图,其每个可打印字符对应于一个亮的像素。当定制的图形被使用,colsrows被忽略,行和列的数有读取的文件决定。

    struct_el的默认值为3x3+0x0/rect

    nb_iterations指定迭代的次数,默认为1

    一些例子:

     *
     ***
    *****
     ***
      * 
    因为描述为定制,所以原来指定的行和列值被忽略:
    
    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

    把一个视频覆盖在另外一个上面

    它有两个输入,其中第一个输入是主要的输入会覆盖到第二个输入上

    它接受下面的参数(介绍见下):

    xy的表达式中接受下面的参数:.

    overlay命令

    滤镜支持下面的命令:

    overlay例子

    owdenoise

    应用超完备小波降噪

    滤镜接受下面的选项:

    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例子

    palettegen

    对整个视频产生一个调色板

    它接受下面的选项:

    palettegen例子

    paletteuse

    使用一个调色板来处理输入视频流中的样本点转换

    滤镜接受2个输入,一个视频输入流和一个调色板。调色板必须是256个像素的图像(即有256个颜色)

    它接受下面选项:

    paletteuse例子

    perspective

    采用正确的视角记录视频,而不是垂直于平面

    接受参数的介绍如下:

    phase

    延迟隔行视频一段时间以便现场秩序变化

    用于解决PAL制下电影到视频转换中的场序问题

    接受参数介绍见下:

    pixdesctest

    像素格式检测测试滤镜,主要用于内部测试。输出视频等于输入视频

    例如:

    format=monow,pixdesctest 

    可以用来测试monowhite像素格式描述是否符合定义

    pp

    使用指定的libpostproc后处理subfilters链。这个库会自动选择一个GPL编译(--enable-gpl)。subfilters必须是由/分隔,可以利用-来禁用。每个subfilter有长或短的选项名,例如dr/dering

    滤镜接受下面的选项:

    所有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例子

    pp7

    应用Postprocessing滤镜7.它是spp滤镜的变通,类似于 spp =6 或者7的点DCT。是有中心样本使用者IDCT后

    滤镜接受下面的选项:

    psnr

    两个输入视频之间的平均,最大和最小峰值信噪比(PSNR-Peak Signal to Noise Ratio)表示。

    滤镜接受2路输入视频,其中第一个输入被认为是“主要”的源,将不改变的进行输出,第二输入作为“参考”视频进行PSNR计算

    两个视频必须有相同的分辨率和像素格式才能正常工作。而且假定了有相同的输入帧来进行比较。

    获得的平均PSNR会被输出到日志系统

    滤镜存储每帧积累MSE(均方误差),并在处理末尾记录帧平均值,其公示为:

    PSNR = 10*log10(MAX^2/MSE) 

    这里MAX是图像中每个分量最大值的平均值。

    滤镜接受参数的介绍见下:

    stats_file指定的文件中将包含一个key/value序列,其是每两个比较帧的相应值

    stats_file指定的文件中各个key的介绍如下::

    例如:

    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

    滤镜接受下面的选项:

    为了最好的效果(而不在输出中复制帧)且尽量让输出帧率接近,例如要反转一个NTSC输入:

    ffmpeg -i input -vf pullup -r 24000/1001 ... 

    qp

    改变视频的量化参数(QP)

    滤镜接受下面选项:

    这个表达式通过eval API计算,可以包含以下常量:

    qp例子

    removelogo

    抑制台标,使用一个图像文件来确定哪些像素组成台标。它通过采用台标相近像素来填充台标位置。

    率接受下面选项:

    像素依据这样的规则指示台标:为0的位置不属于台标部分,非0的值则是台标的部分。如果使用白色(255)黑色(0)来标志是最安全的。过滤位图建议是带黑底的台标截屏,然后使用一个阀值标志台标周围的虚化。

    若必要,可以手动固定小斑点。记住如果台标像素没有被标注到,则滤镜质量会大大降低。标记过多的像素不会有太多伤害,但会增加需要模糊处理信息,对于一个大的图标过多额外像素会减慢处理。

    repeatfields

    这个滤镜根据其价值使用视频ES头中和重复字段中的repeat_field标志

    rotate

    任意旋转视频角度(以弧度值表示)

    可选参数介绍如下:

    角度和输出大小的表达式可以包含以下常量和函数:

    rotate例子

    rotate命令

    滤镜接受下面的命令:

    sab

    应用形状自适应模糊

    滤镜接受下面选项:

    每个色度选项值,如果没有明确指定,则选用对应亮度选项值

    scale

    对输入视频放缩(修改尺寸),利用了libswscale库。

    这个scale滤镜强制输出与输入有相同的长宽比,但改变输出样本点长宽比。

    如果输入图像格式不同于下一个滤镜要求的格式,这个scale滤镜可以转换以符合要求。

    scale选项

    滤镜接受下面介绍的选项或任何libswscale放缩支持的选项。

    参考 (ffmpeg-scaler)ffmpeg-scaler手册中以了解完整的放缩选项。

    在上述表达式中允许下面的内容::

    scale例子

    separatefields

    这个separatefields滤镜以视频帧为基础,将每个帧分成多个分量,产生一个半高而两有两倍帧率和帧数。

    这个滤镜默认使用在帧中的场序标志信息来决定那些先输出。如果结果不对,在之前使用setfield

    setdar, setsar

    其中setdar滤镜设置输出的宽高比

    是按下式通过改变指定的样本(即像素)宽高比来实现的:

    DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR 

    记住,setdar滤镜不修改视频帧的像素尺寸(画面尺寸,即还是WxH)。设定的显示长宽比也可能改变其后的滤镜链中的滤镜,例如在放缩滤镜或者另一个“setdar”或“setsar”滤镜。

    setsar滤镜设置输出视频的像素宽高比

    注意有用setsar滤镜的应用,输出显示的宽高比将根据前面的方程变化。

    记住这里改变了样本(像素)宽高比将影响到后续滤镜,如另外一个“setdar”或“setsar”滤镜。

    它接受下面参数:

    参数表达式接受下面的内容:

    setdar, setsar例子

    setfield

    强制输出帧的场序

    这里setfield把交错场提供给输出帧,它不改变输入帧,只是设置相应的属性,影响到后续的滤镜(如果 fieldorderyadif

    滤镜接受下面选项:

    showinfo

    不改变输入而在行中显示每帧信息。

    显示的信息以key/value的序列形式给出

    下面是将显示在输出中的值:

    showpalette

    显示每个帧的256色模板。滤镜是关于pal8像素格式帧的。

    它接受下面选项:

    -s

    设置调色板中颜色数量宽,默认为30(对应于30x30`pixel`) 

    shuffleplanes

    重排和/或复制视频通道

    它接受下面参数:

    第一个通道序数为0,默认是保持输入不变。

    交换第二和第三通道:

    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT 

    signalstats

    评估各种视觉指标,协助确定问题与模拟视频媒体的数字化。

    默认滤镜会以日志记录这些元数据值:

    滤镜接受下面的选项:

    signalstats例子

    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

    在不影响轮廓的基础上模糊视频

    它接受下面的选项:

    如果色度(差)选项没有显式设置,将采用对应的亮度值来设定

    stereo3d

    在不同的立体图像格式之间进行转换

    滤镜接受下面选项:

    stereo3d例子

    spp

    应用一个简单的后处理滤镜,压缩或者解压缩图像(或-quality为6)变化提升平均结果。

    滤镜接受下面选项:

    subtitles

    利用libass库在输入视频上添加字幕

    编译配置选项--enable-libass。滤镜还需要编译包含libavcodeclibavformat以支持把字幕文件转换成ASS(Advanced Substation Alpha) 字幕格式

    滤镜接受下面选项:

    如果第一个键没有指定,则假定第一个值是描述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处理

    滤镜接受下面选项:

    一些典型的模式是

    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将占用更多的内存,所有不推荐设置太高的值

    thumbnail例子

    tile

    让连续几帧磁贴拼接

    滤镜接受下面选项:

    tile例子

    tinterlace

    执行各种类型的时间交错

    帧计数从1开始,所以第一帧为奇数帧。

    滤镜接受下面选项:

    transpose

    对输入转置行和列来可选的翻转(图像)

    它接受下面的参数:

    例如,要顺时针旋转90度且保护肖像布局:

    transpose=dir=1:passthrough=portrait 

    以命令的形式实现同样效果:

    transpose=1:portrait 

    trim

    减少输入,输出包含一个连续输入的组成部分

    它接受下面参数:

    其中startendduration采用持续时间表示格式,其语法见持续时间

    注意start/end开头的选项和duration都仅关注帧的时间戳,而带_frame后缀的版本则仅仅通过帧简单计数。还要注意滤镜并不改变时间戳,如果你想输出是以0开始的时间戳,则需要在滤镜后接一个setpts滤镜来处理。

    如果有多个开始或者结束时间,滤镜将采取贪婪算法,视图在匹配至少一个约束(开始/结束)的情况下尽量多的输出。想保留多个约束部分组成,需要链式采用多个裁剪过滤器(可能还需要结合其他滤镜来拼接)

    默认是保留所有输入。所以它可以仅设置一个结束值来保留之前的一切。

    例如:

    unsharp

    锐化或者模糊输入视频

    它接受下面的参数:

    所有参数都是可选的默认值等效于’5:5:1.0:5:5:0.0’字符串

    unsharp例子

    uspp

    应用超慢/简单的后处理,压缩和解压图像(或对应于quality中水平为8的完全处理)变化和平均结果。

    它不同于spp,实际上uspp编码和解码每个libavcodec块(Snow),而spp使用一个内部简化的8x8 DCT,其相似于MJPEG的DCT

    滤镜接受下面选项:

    vidstabdetect

    分析视频的静止/不晃动,两步过程中的第1步,下一步是vidstabtransform

    这个滤镜生成一个文件,指定相对平移和旋转变换后续帧的信息,它用于vidstabtransform滤镜

    为了编译支持它需要设置--enable-libvidstab

    滤镜接受下面选项:

    vidstabdetect例子

    vidstabtransform

    视频静止/不晃动,两步过程的第二步,其第一步是vidstabdetect

    从一个文件读取每一帧需要应用/补偿的信息,与vidstabdetect一起使用来稳定视频,参看unsharp是很重要的。

    为了使用它需要允许编译设置--enable-libvidstab

    vidstabtransform选项

    vidstabtransform例子

    vfilp

    让输入垂直翻转

    例如:利用ffmpeg垂直翻转视频

    ffmpeg -i in.avi -vf "vflip" out.avi 

    vignette

    使或扭转自然渐晕效应

    滤镜接受下面选项:

    vignette表达式

    这里有angle(原文误为alpha), x0 和 y0表达式允许包含的参数

    vignette例子

    w3fdif

    反交错的输入视频(“w3fdif”代表“韦斯顿3场反交错滤波器——Weston 3 Field Deinterlacing Filter”)。

    基于英国广播公司(BBC R&D)的马丁?韦斯顿(Martin Weston)研发,并由吉姆·伊斯特布鲁克(Jim Easterbrook)实现的反交错算法。这个滤镜使用的滤波系数是BBC研发的

    它有两组滤波系数,被称为"simple"(简单)和 "complex"(复杂)。使用那个滤波系数可以通过参数设置。

    xbr

    对像素应用一个xBR高质量放大滤镜,它遵循一套边缘检测规则,详情见上一篇:翻译ffmpeg-all文档(36),音频槽
    下一篇:翻译ffmpeg-all文档(38),视频源