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

FFplay文档解读-28-视频过滤器三

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

    前言

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

    29.20 colormatrix

    转换颜色矩阵

    过滤器接受以下选项:

    src
    dst 
    

    指定源和目标颜色矩阵。 必须指定这两个值。

    接受的值是:

    解释
    bt709 BT.709
    fcc FCC
    bt601 BT.601
    bt470 BT.470
    bt470bg BT.470BG
    smpte170m SMPTE-170M
    smpte240m SMPTE-240M
    bt2020 BT.2020

    例如,要从BT.601转换为SMPTE-240M,请使用以下命令:

    colormatrix=bt601:smpte240m
    

    29.21 colorspace

    转换色彩空间,传输特性或颜色原色。 输入视频需要具有均匀的大小。

    过滤器接受以下选项:

    all
    

    一次指定所有颜色属性。

    接受的值如下:

    解释
    bt470m BT.470M
    bt470bg BT.470BG
    bt601-6-525 BT.601-6 525
    bt601-6-625 BT.601-6 625
    bt709 BT.709
    smpte170m SMPTE-170M
    smpte240m SMPTE-240M
    bt2020 BT.2020
    space
    

    指定输出颜色空间。

    接受的值如下:

    bt709 BT.709
    fcc FCC
    bt470bg BT.470BGBT.601-6 625
    smpte170m SMPTE-170MBT.601-6 525
    smpte240m SMPTE-240M
    ycgco YCgCo
    bt2020ncl BT.2020具有非恒定亮度
    trc
    

    指定输出传输特性。

    接受的值如下:

    解释
    bt709 BT.709
    bt470m BT.470M
    bt470bg BT.470BG
    gamma22 恒定伽马值为2.2
    gamma28 恒定伽玛为2.8
    smpte170m SMPTE-170MBT.601-6 625BT.601-6 525
    smpte240m SMPTE-240M
    srgb SRGB
    iec61966-2-1 iec61966-2-1
    iec61966-2-4 iec61966-2-4
    xvycc xvycc
    bt2020-10 BT.2020用于10位内容
    bt2020-12 BT.2020用于12位内容
    primaries
    

    指定输出颜色原色。

    接受的值如下:

    解释
    bt709 BT.709
    bt470m BT.470M
    bt470bg BT.470BG 或者 BT.601-6 625
    smpte170m SMPTE-170M或者BT.601-6 525
    smpte240m SMPTE-240M
    film film
    smpte431 SMPTE-431
    smpte432 SMPTE-432
    bt2020 BT.2020
    jedec-p22 JEDEC P22 phosphors
    range
    

    指定输出颜色范围。

    接受的值如下:

    解释
    tv TV (restricted) range
    mpeg MPEG (restricted) range
    pc PC (full) range
    jpeg JPEG (full) range
    format
    

    指定输出颜色格式。

    接受的值如下:

    解释
    yuv420p YUV 4:2:0 planar 8-bits
    yuv420p10 YUV 4:2:0 planar 10-bits
    yuv420p12 YUV 4:2:0 planar 12-bits
    yuv422p YUV 4:2:2 planar 8-bits
    yuv422p10 YUV 4:2:2 planar 10-bits
    yuv422p12 YUV 4:2:2 planar 12-bits
    yuv444p YUV 4:4:4 planar 8-bits
    yuv444p10 YUV 4:4:4 planar 10-bits
    yuv444p12 YUV 4:4:4 planar 12-bits
    fast
    

    进行快速转换,跳过伽玛/初级校正。 这将显着减少CPU,但在数学上将是不正确的。 要使输出与colormatrix过滤器生成的输出兼容,请使用fast = 1

    dither
    

    指定抖动模式。

    接受的值如下:

    解释
    none 没有抖动
    fsb Floyd-Steinberg dithering
    wpadapt
    

    白点适应模式。

    接受的值如下:

    解释
    bradford 布拉德福德白点适应
    vonkries von Kries白点适应
    identity 身份白点适应(即没有白点适应)
    iall
    

    一次覆盖所有输入属性。 与所有人接受的价值相同。

    ispace
    

    覆盖输入颜色空间。 与空间相同的可接受值。

    iprimaries
    

    覆盖输入颜色原色。 与初选相同的可接受值。

    itrc
    

    覆盖输入传输特性。 与trc相同的可接受值。

    irange
    

    覆盖输入颜色范围。 与范围相同的可接受值。

    过滤器将传输特性,颜色空间和颜色原色转换为指定的用户值。 如果未指定,则输出值将根据'all'属性设置为默认值。 如果未指定该属性,则过滤器将记录错误。 输出颜色范围和格式默认为与输入颜色范围和格式相同的值。 应在输入数据上设置输入传输特性,色彩空间,色彩原色和颜色范围。 如果缺少其中任何一个,过滤器将记录错误,不会进行任何转换。

    例如,要将输入转换为SMPTE-240M,请使用以下命令:

     colorspace=smpte240m
    

    29.22 convolution

    应用卷积3x3,5x57x7滤镜。

    过滤器接受以下选项:

    0m
    1m
    2m
    3m
    

    为每个平面设置矩阵。 矩阵是9,2549个有符号整数的序列。

    0rdiv
    1rdiv
    2rdiv
    3rdiv
    

    为每个平面设置计算值的乘数。

    0bias
    1bias
    2bias
    3bias
    

    为每个平面设置偏差。 该值将添加到乘法结果中。 有助于使整个图像更亮或更暗。 默认值为0.0

    29.22.1 示例

    • 应用锐化:

        convolution="0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0"
      
    • 应用模糊:

        convolution="1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9"
      
    • 应用边缘增强:

        convolution="0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128"
      
    • 应用边缘检测:

        convolution="0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128"
      
    • 应用laplacian边缘检测器,包括对角线:

        convolution="1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0"
      
    • Apply emboss:

        convolution="-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2"
      

    29.23 convolve

    使用第二流作为脉冲在频域中应用视频流的2D卷积。

    过滤器接受以下选项:

    planes
    

    设置要处理的平面。

    impulse
    

    设置将处理哪些脉冲视频帧可以是第一个或全部。 默认是全部。

    convolve过滤器还支持framesync选项。

    29.24 copy

    将输入视频源不变地复制到输出。 这主要用于测试目的。

    29.25 coreimage

    OSX上使用AppleCoreImage APIGPU上进行视频过滤。

    硬件加速基于OpenGL上下文。 通常,这意味着它由视频硬件处理。 但是,存在基于软件的OpenGL实现,这意味着不能保证硬件处理。 这取决于相应的OSX

    Apple提供了许多过滤器和图像生成器,它们具有多种选项。 过滤器必须由其名称及其选项引用。

    coreimage过滤器接受以下选项:

    list_filters

    列出所有可用的过滤器和发生器及其各自的选项,以及可能的最小值和最大值以及默认值。

    list_filters=true

    filter
    

    按各自的名称和选项指定所有过滤器。 使用list_filters确定所有有效的过滤器名称和选项。 数值选项由浮点值指定,并自动钳位到各自的值范围。 矢量和颜色选项必须由空格分隔的浮点值列表指定。 必须完成角色转移。 可以使用特殊选项名称default来使用筛选器的默认选项。

    需要指定默认值或至少一个过滤器选项。 所有省略的选项都使用其默认值。 过滤字符串的语法如下:

    filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]

    output_rect
    

    指定一个矩形,其中过滤器链的输出被复制到输入图像中。 它由空格分隔的浮点值列表给出:

    output_rect=x\ y\ width\ height

    output_rect
    

    指定一个矩形,其中过滤器链的输出被复制到输入图像中。 它由空格分隔的浮点值列表给出:

    output_rect=x\ y\ width\ height

    如果未给出,则输出矩形等于输入图像的尺寸。 输出矩形会自动在输入图像的边框处裁剪。 负值对每个组件都有效。

    output_rect=25\ 25\ 100\ 100

    可以链接多个滤波器以进行连续处理,而无需GPU-HOST传输,从而可以快速处理复杂的滤波器链。目前,仅支持具有零(生成器)或恰好一个(滤波器)输入图像和一个输出图像的滤波器。此外,过渡过滤器尚未按预期使用。

    某些过滤器根据相应的过滤器内核生成具有额外填充的输出图像。自动删除填充以确保过滤器输出与输入图像具有相同的大小。

    对于图像生成器,输出图像的大小分别由滤波器链的先前输出图像或整个滤波器链的输入图像确定。生成器不使用该图像的像素信息来生成它们的输出。但是,生成的输出会混合到此图像上,从而导致部分或完全覆盖输出图像。

    coreimagesrc视频源可用于生成直接馈入滤波器链的输入图像。通过使用它,不需要通过另一视频源或输入视频提供输入图像。

    29.25.1 示例

    • 列出所有可用过滤器:

        coreimage=list_filters=true
      
    • 使用带有默认选项的CIBoxBlur滤镜来模糊图像:

        coreimage=filter=CIBoxBlur@default
      
    • 使用带有CISepiaTone默认值的滤镜链和CIVignetteEffect,其中心为100x100,半径为50像素:

        coreimage=filter=CIBoxBlur@default#CIVignetteEffect@inputCenter=100\ 100@inputRadius=50
      
    • 使用nullsrcCIQRCodeGeneratorFFmpeg主页创建一个QR代码,作为Apple标准bash shell的完整和转义命令行:

         ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
      

    29.26 crop

    将输入视频裁剪为给定尺寸。

    它接受以下参数:

    w,out_w
    

    输出视频的宽度。它默认为iw。在过滤器配置期间或发送'w''out_w'命令时,此表达式仅计算一次。

    h,out_h
    

    输出视频的高度。它默认为ih。在过滤器配置期间或发送'h''out_h'命令时,此表达式仅评估一次。

    x
    

    输入视频中左侧边缘的水平位置。它默认为(in_w-out_w)/2。此表达式按帧计算。

    y
    

    输入视频中输出视频的垂直位置。它默认为(in_h-out_h)/2。此表达式按帧计算。

    keep_aspect
    

    如果设置为1将通过更改输出样本宽高比强制输出显示宽高比与输入相同。它默认为0

    exact
    

    启用精确裁剪。如果启用,则子采样视频将按指定的width/height/x/y精确裁剪,并且不会舍入到最接近的较小值。它默认为0

    out_w,out_h,x,y参数是包含以下常量的表达式:

    x
    y
    

    xy的计算值。对每个新帧进行评估。

    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
    

    水平和垂直色度子样本值。例如,对于像素格式yuv422phsub2vsub1

    n
    

    输入帧的编号,从0开始。

    pos
    

    输入框文件中的位置,如果未知,则为NAN

    t
    

    以秒为单位表示的时间戳。如果输入时间戳未知,则为NAN

    out_w的表达式可能取决于out_h的值,out_h的表达式可能取决于out_w,但它们不能依赖于xy,因为xy是在out_wout_h之后计算的。

    xy参数指定输出(非裁剪)区域左上角位置的表达式。它们针对每个帧进行评估。如果评估值无效,则将其近似为最接近的有效值。

    x的表达式可能取决于y,而y的表达式可能取决于x

    29.26.1 示例

    • 作物面积大小为100x100(12,34)

        crop=100:100:12:34
      
    • 使用命名选项,上面的示例变为

        crop=w=100:h=100:x=12:y=34
      
    • 裁剪大小为100x100的中央输入区域:

         crop=100:100
      
    • 裁剪输入视频大小为2/3的中央输入区域:

         crop=2/3*in_w:2/3*in_h
      
    • 裁剪输入视频中心方块:

        crop=out_w=in_h
        crop=in_h 
      
    • 将左上角放置在位置100:100并且右下角对应于输入图像的右下角定义矩形:

        crop=in_w-100:in_h-100:100:100
      
    • 从左右边框裁剪10像素,从顶部和底部边框裁剪20像素。

        crop=in_w-2*10:in_h-2*20
      
    • 仅保留输入图像的右下角四分之一:

        crop=in_w/2:in_h/2:in_w/2:in_h/2
      
    • 获得Greek harmony高度:

        crop=in_w:1/PHI*in_w
      
    • 应用trembling效果:

        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(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)"
      
    • 根据y的值设置x

        crop=in_w/2:in_h/2:y:10+10*sin(n/10)
      

    29.26.2 命令行

    此筛选器支持以下命令:

    w, out_w
    h, out_h
    x
    y
    

    设置输出视频的宽度/高度和输入视频中的horizontal/vertical位置。 该命令接受相应选项的相同语法。

    如果指定的表达式无效,则保持其当前值。

    29.27 cropdetect

    自动检测裁剪尺寸。

    它计算必要的裁剪参数并通过记录系统打印推荐的参数。检测到的尺寸对应于输入视频的非黑色区域。

    它接受以下参数:

    limit
    

    设置更高的黑色值阈值,可以选择从无(0)到所有内容(基于8位格式的255)。大于设定值的强度值被认为是非黑色的。它默认为24。还可以指定介于0.01.0之间的值,该值将根据像素格式的bitdepth进行缩放。

    round
    

    width/height应该被整除的值。默认为16。自动调整偏移量以使视频居中。使用2只获得均匀的尺寸(4:2:2视频需要)。编码到大多数视频编解码器时,16是最佳选择。

    reset_count,reset
    

    设置计数器,确定cropdetect将重置先前检测到的最大视频区域的帧数,并重新开始检测当前的最佳裁剪区域。默认值为0

    当频道徽标扭曲视频区域时,这可能很有用。 0表示never reset,并返回播放期间遇到的最大区域。

    29.28 curves

    使用曲线应用颜色调整。

    此过滤器类似于Adobe PhotoshopGIMP曲线工具。每个组件(红色,绿色和蓝色)的值由N个关键点定义,使用平滑曲线相互连接。 x轴表示来自输入帧的像素值,y轴表示要为输出帧设置的新像素值。

    默认情况下,组件曲线由两个点(0; 0)(1; 1)定义。这会创建一条直线,其中每个原始像素值都adjusted到其自己的值,这意味着不会更改图像。

    过滤器允许重新定义这两个点并添加更多。将定义新曲线(使用自然三次样条插值)以平滑地通过所有这些新坐标。新定义的点需要在x轴上严格增加,并且它们的xy值必须在[0; 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
    

    设置所有组件(不包括主组件)的关键点。 除了其他关键点组件选项外,还可以使用。 在这种情况下,未设置的组件将在此‘all’设置上回退。

    psfile
    

    指定Photoshop曲线文件(.acv)以从中导入设置。

    plot
    

    将曲线的Gnuplot脚本保存在指定文件中。

    为避免某些filtergraph语法冲突,需要使用以下语法定义每个关键点列表:x0/y0 x1/y1 x2/y2 ...

    29.28.1 示例

    • 略微增加蓝色的中间水平:

        curves=blue='0/0 0.5/0.58 1/1'
      
    • 复古效果:

        curves=r='0/0.11 .42/.51 1/0.95':g='0/0 0.50/0.48 1/1':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
      
    • 或者simply

        curves=vintage
      
    • 使用Photoshop预设并重新定义绿色组件的点:

        curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
      
    • 使用ffmpeggnuplot查看cross_process配置文件的曲线:

        ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
        gnuplot -p /tmp/curves.plt
      

    29.29 datascope

    视频数据分析过滤器。

    此过滤器显示部分视频的十六进制像素值。

    过滤器接受以下选项:

    size,s
    

    设置输出视频大小。

    x
    

    从拾取像素的位置设置x偏移量。

    y
    

    设置y偏移选择像素的位置。

    mode
    

    设置范围模式,可以是以下之一:

    解释
    mono 在黑色背景上绘制带有白色的十六进制像素值
    color 在黑色背景上绘制带有输入视频像素颜色的十六进制像素值
    color2 在从输入视频中选取的彩色背景上绘制十六进制像素值,以这种方式拾取文本颜色,使其始终可见。
    axis
    

    在视频的左侧和顶部绘制行和列数字。

    opacity
    

    设置背景不透明度。

    相关文章

      网友评论

        本文标题:FFplay文档解读-28-视频过滤器三

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