FFplay文档解读-41-视频过滤器十六
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
29.150 selectivecolor
将青色,品红色,黄色和黑色(CMYK)调整为特定颜色范围(例如"reds"
,"yellows"
,"greens"
,"cyans"
,......)。 调整范围由颜色的"purity"
定义(即,它已经是多么饱和)。
此过滤器类似于Adobe Photoshop Selective Color
工具。
过滤器接受以下选项:
correction_method
选择颜色校正方法。
可用的值如下:
值 | 解释 |
---|---|
absolute | 指定的调整“按原样”应用(添加/减去原始像素组件值) |
relative | 指定的调整与原始组件值相关 |
默认值是:absolute
。
reds
红色像素的调整(红色成分最大的像素)
yellows
黄色像素的调整(蓝色成分最小的像素)
greens
绿色像素的调整(绿色成分最大的像素)
cyans
青色像素的调整(红色成分最小的像素)
blues
蓝色像素的调整(蓝色分量最大的像素)
magentas
品红色像素的调整(绿色成分最小的像素)
whites
白色像素的调整(所有组件都大于128
的像素)
neutrals
除纯黑色和纯白色外的所有像素的调整
blacks
调整黑色像素(所有组件小于128
的像素)
psfile
指定Photoshop
选择性颜色文件(.asv
)以从中导入设置。
所有调整设置('reds','yellows',...)
在[-1,1]
范围内分别接受最多4
个空格分隔的浮点调整值,以调整青色,品红色,黄色和黑色的数量 对于其范围的像素。
29.150.1 示例
-
在每个绿色区域增加青色
50%
并减少黄色33%
,在蓝色区域增加品红27%
:selectivecolor=greens=.5 0 -.33 0:blues=0 .27
-
使用
Photoshop
选择性颜色预设:selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
29.151 separatefields
独立字段采用基于帧的视频输入,并将每个帧拆分为其组成字段,从而产生新的半高剪辑,帧速率为帧速率的两倍,帧数为两倍。
该过滤器在帧中使用字段优势信息来决定在输出中首先放置哪一对字段。 如果出错,请在单独的字段过滤器之前使用setfield
过滤器。
29.152 setdar, setsar
setdar
滤波器设置滤波器输出视频的显示宽高比。
这是通过根据以下等式更改指定的Sample(aka Pixel)
纵横比来完成的:
DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR
请记住,setdar
滤镜不会修改视频帧的像素尺寸。此外,由该滤波器设置的显示宽高比可以通过滤波器链中的后续滤波器来改变,例如,如果是缩放或者应用了另一个setdar
或setsar
过滤器。
设置滤波器为滤波器输出视频设置采样(aka Pixel
)纵横比。
请注意,作为应用此滤波器的结果,输出显示宽高比将根据上面的等式改变。
请记住,由过滤链中的后续过滤器可以更改由setar
过滤器设置的样本宽高比,例如,如果应用另一个setar
或setdar
过滤器。
它接受以下参数:
r,ratio,dar(仅限setdar),sar(仅限setsar)
设置过滤器使用的宽高比。
该参数可以是浮点数字符串,表达式或形式为num:den
的字符串,其中num
和den
是宽高比的分子和分母。如果未指定参数,则假定值为0
。如果使用num:den
形式,则应转义:
字符。
max
设置当将表达的宽高比减少到合理时用于表示分子和分母的最大整数值。默认值为100
。
参数sar
是一个包含以下常量的表达式:
E,PI,PHI
这些是数学常数e
(欧拉数),pi
(希腊语pi
)和phi
(黄金比例)的近似值。
w,h
输入的宽度和高度。
a
这些与w/h
相同。
sar
输入样本宽高比。
dar
输入显示宽高比。它与(w / h)* sar
相同。
hsub,vsub
水平和垂直色度子样本值。例如,对于像素格式yuv422p
,hsub
为2
,vsub
为1
。
29.152.1 示例
-
要将显示宽高比更改为
16:9
,请指定以下选项之一:setdar=dar=1.77777 setdar=dar=16/9
-
要将样本宽高比更改为
10:11
,请指定:setsar=sar=10/11
-
要将显示宽高比设置为
16:9
,并在宽高比缩减中指定最大整数值1000
,请使用以下命令:setdar=ratio=16/9:max=1000
29.153 setfield
输出视频帧的强制字段。
setfield
过滤器标记输出帧的隔行扫描类型字段。 它不会更改输入帧,而只会设置相应的属性,这会影响后续过滤器(例如fieldorder
或yadif
)处理帧的方式。
过滤器接受以下选项:
auto
可用值如下:
值 | 解释 |
---|---|
bff | 将帧标记为底场优先 |
tff | 将帧标记为顶场优先 |
prog | 将帧标记为渐进式 |
29.154 showinfo
显示包含每个输入视频帧的各种信息的行。输入视频未被修改。
显示的行包含表单键:值的一系列键/值对。
输出中显示以下值:
n
输入帧的(顺序)编号,从0
开始。
pts
输入帧的Presentation TimeStamp
,表示为多个时基单位。时基单位取决于滤波器输入焊盘。
pts_time
输入帧的Presentation TimeStamp
,表示为秒数。
pos
帧在输入流中的位置,如果此信息不可用和/
或无意义(例如在合成视频的情况下),则为-1
。
fmt
像素格式名称。
sar
输入帧的样本宽高比,以num/den
的形式表示。
s
输入框的大小。有关此选项的语法,请检查(ffmpeg-utils)视频大小语法
。
i
隔行扫描模式的类型(P
表示progressive
,t
”表示顶部字段,b
表示底部字段优先)。
iskey
如果帧是关键帧,则为1
,否则为0
。
type
输入帧的图像类型(对于I
帧为I
,对于P
帧为P
,对于B
帧为B
,对于未知类型为?
)。另请参阅AVPictureType
枚举文档和'libavutil / avutil.h'
中定义的av_get_picture_type_char
函数的文档。
checksum
输入帧所有平面的Adler-32
校验和(以十六进制打印)。
plane_checksum
输入帧每个平面的Adler-32
校验和(以十六进制打印),以[c0 c1 c2 c3]
的形式表示。
29.155 showpalette
显示每帧的256
色调色板。 此过滤器仅与pal8
像素格式帧相关。
它接受以下选项:
s
设置用于表示一个调色板颜色条目的框的大小。 默认值为30
(对于30x30
像素的盒子)。
29.156 shuffleframes
重新排序和/或复制和/或删除视频帧。
它接受以下参数:
mapping
设置输入帧的目标索引。 这是将输入帧映射到输出帧的空间或|
分隔索引列表。 索引数量还设置每个索引可能具有的最大值。 -1
索引具有特殊含义,即丢帧。
第一帧的索引为0
。默认设置是保持输入不变。
29.156.1 Examples
-
交换输入的每三帧的第二帧和第三帧:
ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
-
交换输入的每十帧的第
10
帧和第1
帧:ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
29.157 shuffleplanes
重新排序和/或复制视频平面。
它接受以下参数:
map0
要用作第一个输出平面的输入平面的索引。
map1
要用作第二个输出平面的输入平面的索引。
map2
要用作第三个输出平面的输入平面的索引。
map3
要用作第四个输出平面的输入平面的索引。
第一个平面的索引为0
。默认设置是保持输入不变。
29.157.1 示例
-
交换输入的第二和第三个平面:
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
29.158 signalstats
评估有助于确定与模拟视频媒体数字化相关的问题的各种视觉指标。
默认情况下,过滤器将记录这些元数据值:
YMIN
显示输入框中包含的最小Y
值。表达范围为[0-255]
。
YLOW
在输入框内显示10%
百分位的Y
值。表达范围为[0-255]
。
YAVG
显示输入框内的平均Y
值。表达范围为[0-255]
。
YHIGH
在输入框内的90%
百分位处显示Y值。表达范围为[0-255]
。
YMAX
显示输入框中包含的最大Y
值。表达范围为[0-255]
。
UMIN
显示输入框中包含的最小U
值。表达范围为[0-255]
。
ULOW
在输入框内显示10%
百分位的U
值。表达范围为[0-255]
。
UAVG
显示输入框内的平均U值。表达范围为[0-255]
。
UHIGH
在输入框内的90%
百分位处显示U值。表达范围为[0-255]
。
UMAX
显示输入框中包含的最大U
值。表达范围为[0-255]
。
VMIN
显示输入框中包含的最小V
值。表达范围为[0-255]
。
VLOW
在输入框内显示10%
百分位数的V值。表达范围为[0-255]
。
VAVG
显示输入框内的平均V
值。表达范围为[0-255]
。
VHIGH
在输入框内的90%
百分位处显示V值。表达范围为[0-255]
。
VMAX
显示输入框中包含的最大V
值。表达范围为[0-255]
。
SATMIN
显示输入框中包含的最小饱和度值。表示范围为[0-~181.02]
。
SATLOW
在输入框内显示10%
百分位数的饱和度值。表示范围为[0-~181.02]
。
SATAVG
显示输入框内的平均饱和度值。表示范围为[0-~181.02]
。
SATHIGH
在输入框内显示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]
。
YBITDEPTH
显示当前帧中Y
平面的位深度。表示范围为[0-16]
。
UBITDEPTH
显示当前帧中U
平面的位深度。表示范围为[0-16]
。
VBITDEPTH
显示当前帧中V
平面的位深度。表示范围为[0-16]
。
过滤器接受以下选项:
stat
out
'stat'
指定另一种形式的图像分析。
'out'
输出视频,突出显示指定类型的像素。
两个选项都接受以下值:
值 | 解释 |
---|---|
tout | 识别时间异常值像素。 时间异常值是与同一场的相邻像素不同的像素。 时间异常值的示例包括视频丢失,磁头阻塞或磁带跟踪问题的结果 |
vrep | 识别垂直线重复。 垂直线重复包括帧内相似的像素行。 在天生数字视频中,垂直线重复很常见,但这种模式在从模拟信号源数字化的视频中并不常见。 当它出现在由模拟信号源数字化产生的视频中时,它可以指示丢失补偿器的隐藏 |
brng | 识别超出合法广播范围的像素 |
color, c
设置'out'
选项的高亮颜色。 默认颜色为黄色。
29.158.1 示例
-
各种视频指标的输出数据:
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_drawtext.txt
的内容是:
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}
29.159 signature
计算MPEG-7
视频签名。 过滤器可以处理多个输入。 在这种情况下,可以另外计算输入之间的匹配。 过滤器始终通过第一个输入。 每个流的签名可以写入文件。
它接受以下选项:
detectmode
启用或禁用匹配过程。
可用值包括:
值 | 解释 |
---|---|
off | 禁用匹配的计算(默认) |
full | 计算整个视频的匹配并输出整个视频是匹配还是仅匹配 |
fast | 只计算直到找到匹配或视频结束。 在某些情况下应该更快 |
nb_inputs
设置输入数量。 选项值必须是非负整数。 默认值为1
。
filename
设置输出的写入路径。 如果有多个输入,则路径必须是原型,即必须包含%d
或%0nd
(其中n是正整数),它将被输入数字替换。 如果未指定文件名,则不会写入任何输出。 这是默认值。
format
选择输出格式。
可用值包括:
值 | 解释 |
---|---|
binary | 使用指定的二进制表示(默认) |
xml | 使用指定的xml 表示 |
th_d
设置阈值以检测一个单词是否相似。 选项值必须是大于零的整数。 默认值为9000
。
th_dc
设置阈值以检测所有单词是否相似。 选项值必须是大于零的整数。 默认值为60000
。
th_xh
设置阈值以检测帧类似。 选项值必须是大于零的整数。 默认值为116
。
th_di
在帧中设置序列的最小长度,以将其识别为匹配序列。 选项值必须是非负整数值。 默认值为0
。
th_it
设置最小关系,匹配帧到所有帧必须具有。 选项值必须是介于0
和1
之间的双精度值。默认值为0.5
。
29.159.1 示例
-
要计算输入视频的签名并将其存储在
signature.bin
中:ffmpeg -i input.mkv -vf signature=filename=signature.bin -map 0:v -f null -
-
要检测两个视频是否匹配,并将签名以
XML
格式存储在signature0.xml
和signature1.xml
中:ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[0:v][1:v] signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml" -map :v -f null -