美文网首页FFPlay专辑
FFplay文档解读-26-视频过滤器一

FFplay文档解读-26-视频过滤器一

作者: 张芳涛 | 来源:发表于2018-11-15 17:21 被阅读17次

    前言

    Github地址:Github
    简书地址:简书
    专辑地址:FFplay专辑

    29. 视频过滤器

    配置FFmpeg构建时,可以使用--disable-filters禁用任何现有过滤器。 配置输出将显示构建中包含的视频过滤器。

    以下是当前可用视频过滤器的说明。

    29.1 alphaextract

    从输入中提取alpha分量作为灰度视频。 这对alphamerge过滤器特别有用。

    29.2 alphamerge

    使用第二个输入的灰度值添加或替换主输入的alpha分量。 这旨在与alphaextract一起使用,以允许传输或存储具有不支持alpha通道的格式的alpha的帧序列。

    例如,要从正常的YUV编码视频和使用alphaextract创建的单独视频重建完整帧,可以使用:

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

    由于此过滤器是为重建而设计的,因此它在不考虑时间戳的情况下对帧序列进行操作,并在任一输入到达流末尾时终止。 如果您的编码管道丢帧,这将导致问题。 如果您尝试将图像应用为视频流的叠加层,请考虑使用叠加层滤镜。

    29.3 ass

    与字幕过滤器相同,只是它不需要libavcodeclibavformat工作。 另一方面,它仅限于ASSAdvanced Substation Alpha)字幕文件。

    除了字幕过滤器中的常用选项外,此过滤器还接受以下选项:

    shaping
    

    设置整形引擎

    可用值包括:

    参数 解释
    auto 默认的libass整形引擎,它是最好的
    simple 快速,与字体无关的整形器,只能进行替换
    complex 使用OpenType进行替换和定位的较慢整形器

    默认值是: auto

    29.4 atadenoise

    将自适应时间平均降噪器应用于视频输入。

    过滤器接受以下选项:

    0a
    

    为第一个平面设置阈值A。 默认值为0.02。 有效范围是00.3

    0b
    

    为第一个平面设置阈值B。 默认值为0.04。 有效范围是05

    1a
    

    为第二个平面设置阈值A。 默认值为0.02。 有效范围是00.3

    1b
    

    设置第二平面的阈值B。 默认值为0.04。 有效范围是05

    2a
    

    为第3平面设置阈值A。 默认值为0.02。 有效范围是00.3

    2b
    

    为第3平面设置阈值B。 默认值为0.04。 有效范围是05

    阈值A设计用于对输入信号的突然变化做出反应,阈值B设计用于对输入信号的连续变化作出反应。

    s
    

    设置帧滤波器将用于平均。 默认值为33。必须是范围[5,129]中的奇数。

    p
    

    设置帧滤波器的平面将用于平均。 默认是all

    29.5 avgblur

    应用平均模糊滤镜。

    过滤器接受以下选项:

    sizeX
    

    设置水平内核大小。

    planes
    

    设置要过滤的平面。 默认情况下,将过滤所有平面。

    sizeY
    

    设置垂直内核大小,如果为零则与sizeX相同。 默认值为0

    29.6 bbox

    计算输入帧亮度平面中非黑色像素的边界框。

    此过滤器计算包含亮度值大于最小允许值的所有像素的边界框。 描述边界框的参数将打印在过滤器日志中。

    过滤器接受以下选项:

    min_val
    

    设置最小亮度值。 默认值为16

    29.7 bitplanenoise

    显示和测量位平面噪声。

    过滤器接受以下选项:

    bitplane
    

    设置要分析的平面。 默认值为1

    filter
    

    从上面的bitplane滤除噪声像素。 默认为禁用。

    29.8 blackdetect

    检测(almost)完全黑色的视频间隔。可用于检测章节转换,商业广告或无效录制。输出行包含检测到的黑色间隔的开始,结束和持续时间,以秒为单位。

    要显示输出行,需要将loglevel至少设置为AV_LOG_INFO值。

    过滤器接受以下选项:

    black_min_duration,d
    

    设置以秒为单位表示的最小检测黑色持续时间它必须是非负浮点数。

    默认值为2.0

    picture_black_ratio_th,pic_th
    

    设置考虑图片"black"的阈值。表达比率的最小值:

    nb_black_pixels / nb_pixels
    

    图片被认为是黑色的。默认值为0.98

    pixel_black_th,pix_th
    

    设置考虑像素"black"的阈值。

    阈值表示像素被认为是"black"的最大像素亮度值。提供的值根据以下等式缩放:

    absolute_threshold = luminance_minimum_value + pixel_black_th * luminance_range_size
    

    luminance_range_sizeluminance_minimum_value取决于输入视频格式,YUV全范围格式的范围是[0-255]YUV非全范围格式的范围是[16-235]

    默认值为0.10

    以下示例将最大像素阈值设置为最小值,并仅检测2秒或更多秒的黑色间隔:

    blackdetect = d = 2:pix_th = 0.00
    

    29.9 blackframe

    检测(almost)完全黑色的帧。 可用于检测章节转换或商业广告。 输出行包括检测到的帧的帧编号,黑度百分比,文件中的位置(如果已知)或-1以及时间戳(以秒为单位)。

    要显示输出行,需要将loglevel至少设置为AV_LOG_INFO值。

    此过滤器导出帧元数据lavfi.blackframe.pblack。 该值表示图片中低于阈值的像素百分比。

    它接受以下参数:

    amount
    

    必须低于阈值的像素百分比; 它默认为98

    threshold, thresh
    

    像素值被认为是黑色的阈值; 它默认为32

    29.10 blend, tblend

    将两个视频帧相互混合。

    blend滤波器采用两个输入流并输出一个流,第一个输入是"top"层,第二个输入是"bottom"层。 默认情况下,输出在最长输入终止时终止。

    tblend(时间混合)滤波器从一个单独的流中获取两个连续的帧,并输出通过在旧帧的顶部混合新帧而获得的结果。

    接下来的选项的描述如下:

    c0_mode
    c1_mode
    c2_mode
    c3_mode
    all_mode
    

    all_mode的情况下,为特定像素组件或所有像素组件设置混合模式。 默认值是正常的。

    组件模式的可用值为:

    addition
    grainmerge
    and
    average
    burn
    darken
    difference
    grainextract
    divide
    dodge
    freeze
    exclusion
    extremity
    glow
    hardlight
    hardmix
    heat
    lighten
    linearlight
    multiply
    multiply128
    negation
    normal
    or
    overlay
    phoenix
    pinlight
    reflect
    screen
    softlight
    subtract
    vividlight
    xor
    c0_opacity
    c1_opacity
    c2_opacity
    c3_opacity
    all_opacity
    

    all_opacity的情况下,为特定像素组件或所有像素组件设置混合不透明度。 仅与像素组件混合模式结合使用。

    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 第一个视频帧(顶层)当前位置的像素分量值
    BOTTOM, B 第二视频帧(底层)当前位置的像素分量值

    混合滤镜还支持framesync选项。

    29.10.1 示例

    • 在前10秒内应用从底层到顶层的过渡:

        blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
      
    • 应用从顶层到底层的线性水平过渡:

        blend=all_expr='A*(X/W)+B*(1-X/W)'
      
    • 应用1x1 checkerboard效果:

        blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
      
    • 应用uncover lef效果:

        blend=all_expr='if(gte(N*SW+X,W),A,B)'
      
    • 应用uncover down效果:

        blend=all_expr='if(gte(Y-N*SH,0),A,B)'
      
    • 应用uncover up-left效果:

        blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
      
    • 对角线分割视频,并在每侧显示顶层和底层:

        blend=all_expr='if(gt(X,Y*(W/H)),A,B)'
      
    • 显示当前帧和上一帧之间的差异:

        tblend=all_mode=grainextract
      

    相关文章

      网友评论

        本文标题:FFplay文档解读-26-视频过滤器一

        本文链接:https://www.haomeiwen.com/subject/btzyfqtx.html