FFplay文档解读-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

设置背景不透明度。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,510评论 18 139
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,673评论 0 3
  • 漫天的烟花 点缀着星空 繁花一瞬间 爆竹声声响 长笛阵阵脆 乡音荡风中 山歌齐齐唱 美酒飘四方
    沐雪倾城阅读 186评论 1 1
  • 一生中 我们要经历许多事情 要相识相交许多人 而心灵像一个筛子 在世事颠沛流离中 慢慢的一些人就漏掉了 不过对于智...
    一米阳光HUIWEI阅读 453评论 0 51
  • 一个人长大的时候太孤单 老友不在身边的日子 很多苦难总会一个人熬过去 我这个人阿小心眼又很倔 总是把别人的感受放在...
    恩r阅读 456评论 0 0