前言
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.470BG 或 BT.601-6 625
|
smpte170m |
SMPTE-170M 或BT.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-170M ,BT.601-6 625 或BT.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
,5x5
或7x7
滤镜。
过滤器接受以下选项:
0m
1m
2m
3m
为每个平面设置矩阵。 矩阵是9,25
或49
个有符号整数的序列。
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
上使用Apple
的CoreImage API
在GPU
上进行视频过滤。
硬件加速基于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
-
使用
nullsrc
和CIQRCodeGenerator
为FFmpeg
主页创建一个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
x
和y
的计算值。对每个新帧进行评估。
in_w
in_h
输入的宽度和高度。
IW
IH
这些与in_w
和in_h
相同。
out_w
out_h
输出(裁剪)宽度和高度。
ow
oh
这些与out_w
和out_h
相同。
a
和iw / ih
一样
sar
输入样本宽高比
dar
输入显示宽高比,与(iw / ih) * sar
相同
hsub
vsub
水平和垂直色度子样本值。例如,对于像素格式yuv422p
,hsub
为2
,vsub
为1
。
n
输入帧的编号,从0
开始。
pos
输入框文件中的位置,如果未知,则为NAN
t
以秒为单位表示的时间戳。如果输入时间戳未知,则为NAN
。
out_w
的表达式可能取决于out_h
的值,out_h
的表达式可能取决于out_w
,但它们不能依赖于x
和y
,因为x
和y
是在out_w
和out_h
之后计算的。
x
和y
参数指定输出(非裁剪)区域左上角位置的表达式。它们针对每个帧进行评估。如果评估值无效,则将其近似为最接近的有效值。
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.0
和1.0
之间的值,该值将根据像素格式的bitdepth
进行缩放。
round
width/height
应该被整除的值。默认为16
。自动调整偏移量以使视频居中。使用2
只获得均匀的尺寸(4:2:2
视频需要)。编码到大多数视频编解码器时,16
是最佳选择。
reset_count,reset
设置计数器,确定cropdetect
将重置先前检测到的最大视频区域的帧数,并重新开始检测当前的最佳裁剪区域。默认值为0
。
当频道徽标扭曲视频区域时,这可能很有用。 0
表示never reset
,并返回播放期间遇到的最大区域。
29.28 curves
使用曲线应用颜色调整。
此过滤器类似于Adobe Photoshop
和GIMP
曲线工具。每个组件(红色,绿色和蓝色)的值由N
个关键点定义,使用平滑曲线相互连接。 x
轴表示来自输入帧的像素值,y
轴表示要为输出帧设置的新像素值。
默认情况下,组件曲线由两个点(0; 0)
和(1; 1)
定义。这会创建一条直线,其中每个原始像素值都adjusted
到其自己的值,这意味着不会更改图像。
过滤器允许重新定义这两个点并添加更多。将定义新曲线(使用自然三次样条插值)以平滑地通过所有这些新坐标。新定义的点需要在x轴上严格增加,并且它们的x
和y
值必须在[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'
-
使用
ffmpeg
和gnuplot
查看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
设置背景不透明度。