FFplay文档解读-35-视频过滤器十
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
29.90 kerndeint
通过应用Donald Graft
的自适应内核解除来解交织输入视频。 处理视频的隔行扫描部分以生成渐进帧。
接下来的参数的描述如下。
thresh
在确定是否必须处理像素行时,设置影响滤波器容差的阈值。 它必须是[0,255]
范围内的整数,默认为10
。值为0
将导致对每个像素应用该过程。
map
如果设置为1
,则将超过阈值的像素绘制为白色。默认值为0
。
order
设置字段顺序。 交换字段(如果设置为1
),如果为0
则保留字段。默认值为0
。
sharp
如果设置为1
,则启用其他锐化。默认值为0
。
twoway
如果设置为1
,则启用双向锐化。默认值为0
。
29.90.1 示例
-
应用默认值:
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
-
启用其他锐化:
kerndeint=sharp=1
-
以白色绘制处理过的像素:
kerndeint=map=1
29.91 lenscorrection
正确的径向镜头失真
该滤波器可用于校正由于使用广角镜头而导致的径向失真,从而重新校正图像。 要找到正确的参数,可以使用可用的工具,例如作为opencv
的一部分或简单的反复试验。 要使用opencv
,请使用opencv
源中的校准样本(在samples/cpp
下),并从结果矩阵中提取k1
和k2
系数。
请注意,KDE
项目中的开源工具Krita
和Digikam
实际上提供了相同的过滤器。
与晕影滤镜(也可用于补偿镜头误差)相比,此滤镜可校正图像的失真,而晕影可校正亮度分布,因此可能希望在某些情况下同时使用两个滤镜,尽管将拥有 照顾顺序,即是否应在镜头校正之前或之后应用渐晕。
29.91.1 选项
过滤器接受以下选项:
cx
图像焦点的相对x坐标,从而失真的中心。 该值具有范围[0,1]
并且表示为图像宽度的分数。 默认值为0.5
。
cy
图像焦点的相对y坐标,从而是失真的中心。 该值具有范围[0,1]
并表示为图像高度的分数。 默认值为0.5
。
k1
二次校正项的系数。 该值的范围为[-1,1]
。 0
表示无更正。 默认值为0
。
k2
双二次修正项的系数。 该值的范围为[-1,1]
。 0
表示无更正。 默认值为0
。
生成更正的公式是:
r_src = r_tgt *(1 + k1 *(r_tgt / r_0)^ 2 + k2 *(r_tgt / r_0)^ 4)
其中r_0
是图像对角线的一半,r_src
和r_tgt
分别是源图像和目标图像中距焦点的距离。
29.92 libvmaf
获取两个输入视频之间的VMAF
(视频多方法评估融合)分数。
通过测井系统打印获得的VMAF
分数。
它需要Netflix
的vmaf
库(libvmaf
)作为先决条件。安装库后,可以使用以下命令启用它:./ configure --enable-libvmaf
。如果未指定模型路径,则使用默认模型:vmaf_v0.6.1.pkl
。
过滤器有以下选项:
model_path
设置要用于SVM的模型路径。默认值:vmaf_v0.6.1.pkl
log_path
设置用于存储日志的文件路径。
log_fmt
设置日志文件的格式(xml
或json
)。
enable_transform
启用计算vmaf
的转换。
PHONE_MODEL
调用手机型号会产生比常规型号更高的VMAF
分数,这更适合于笔记本电脑,电视等观看条件。
PSNR
启用计算psnr
和vmaf
。
SSIM
启用与vmaf
一起计算ssim
。
ms_ssim
允许计算ms_ssim
和vmaf
。
pool
设置用于计算vmaf
的pool
方法(平均值,最小值或调和平均值)。
此过滤器还支持framesync
选项。
在下面的例子中,正在处理的输入文件'main.mpg'
与参考文件'ref.mpg'
进行比较。
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null -
选项示例:
ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf =“psnr = 1:enable-transform = 1”-f null -
29.93 limiter
将像素组件值限制为指定范围[min,max]
。
过滤器接受以下选项:
min
下限。 默认为输入的最低允许值。
max
上限。 默认为输入的最大允许值。
planes
指定要处理的平面。 默认为全部可用。
29.94 loop
循环视频帧。
过滤器接受以下选项:
loop
设置循环次数。 将此值设置为-1
将导致无限循环。 默认值为0
。
size
设置帧数的最大大小。 默认值为0
。
start
设置第一帧循环。 默认值为0
。
29.95 lut3d
将3D LUT
应用于输入视频。
过滤器接受以下选项:
file
设置3D LUT
文件名。
目前支持的格式:
支持的格式 | 解释 |
---|---|
3dl | AfterEffects |
cube | Iridas |
dat | DaVinci |
m3d | Pandora |
interp
选择插值模式。
可用值包括:
值 | 解释 |
---|---|
nearest | 使用最近定义点的值 |
trilinear | 使用定义立方体的8个点来插值 |
tetrahedral | 使用四面体插值 |
此过滤器还支持framesync
选项。
29.96 lumakey
将某些亮度值变为透明度。
过滤器接受以下选项:
threshold
设置将用作透明度基础的亮度。 默认值为0
。
tolerance
设置要键入的亮度值范围。 默认值为0
。
softness
设定柔软度范围。 默认值为0
。使用此选项可控制从零到完全透明的逐渐过渡。
29.97 lut, lutrgb, lutyuv
计算查找表以将每个像素分量输入值绑定到输出值,并将其应用于输入视频。
lutyuv
将查找表应用于YUV
输入视频,lutrgb
应用于RGB
输入视频。
这些过滤器接受以下参数:
c0
设置第一个像素组件表达式
c1
设置第二个像素组件表达式
c2
设置第三像素组件表达式
c3
设置第四个像素组件表达式,对应于alpha
组件
r
设置红色组件表达式
g
设置绿色组件表达式
b
设置蓝色组件表达式
a
alpha
分量表达式
y
设置Y/luminance
分量表达式
u
设置U/Cb
组件表达式
v
设置V/Cr
组件表达式
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个c*
选项关联的确切组件取决于输入中的格式。
lut
滤波器在输入中需要YUV
或RGB
像素格式,lutrgb
在输入中需要RGB
像素格式,而lutyuv
需要YUV
。
表达式可以包含以下常量和函数:
w
h
输入的宽度和高度。
val
像素组件的输入值。
clipval
输入值,剪切到minval-maxval
范围。
maxval
像素组件的最大值。
minval
像素组件的最小值。
negval
像素分量值的否定值,剪切到minval-maxval
范围;它对应于表达式“maxval-clipval + minval”
。
clip(val)
val
中的计算值,剪切到minval-maxval
范围。
gammaval(gamma)
计算出的像素分量值的伽马校正值被剪切到minval-maxval
范围。它对应于表达式“pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+ minval”
所有表达式默认为val
。
29.97.1 示例
-
否定输入视频:
lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
以上内容与下面的命令效果一样:
lutrgb="r=negval:g=negval:b=negval"
lutyuv="y=negval:u=negval:v=negval"
-
负亮度:
lutyuv=y=negval
-
删除色度分量,将视频转换为灰色调图像:
lutyuv="u=128:v=128"
-
应用
luma
燃烧效果:lutyuv="y=2*val"
-
删除绿色和蓝色组件:
lutrgb="g=0:b=0"
-
在输入上设置一个恒定的
alpha
通道值:format=rgba,lutrgb=a="maxval-minval/2"
-
将亮度伽玛值校正
0.5
倍:lutyuv=y=gammaval(0.5)
-
丢弃最不重要的亮点:
lutyuv=y='bitand(val, 128+64+32)'
-
Technicolor like
效果:lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
29.98 lut2, tlut2
lut2
过滤器采用两个输入流并输出一个流。
tlut2
(时间lut2
)滤波器从一个流中获取两个连续帧。
此过滤器接受以下参数:
c0
设置第一个像素组件表达式。
c1
设置第二个像素组件表达式。
c2
设置第三像素组件表达式。
c3
设置第四个像素组件表达式,对应于alpha
组件。
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个c*
选项关联的确切组件取决于输入中的格式。
表达式可以包含以下常量:
w
h
输入的宽度和高度。
x
像素组件的第一个输入值。
y
像素组件的第二个输入值。
bdx
第一个输入视频位深度。
bdy
第二个输入视频位深度。
所有表达式默认为x
。
29.98.1 示例
-
突出显示两个
RGB
视频流之间的差异:lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
-
突出显示两个
YUV
视频流之间的差异:lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
-
显示两个视频流之间的最大差异:
lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
29.99 maskedclamp
使用第二个输入和第三个输入流夹住第一个输入流。
返回第一个流的值,使其位于第二个输入流 -
undershoot
和第三个输入流+``overshoot
之间。
此过滤器接受以下选项:
undershoot
默认值为0
。
overshoot
默认值为0
。
planes
设置将处理为位图的planes
,将从第一个流复制未处理的planes
。 默认值为0xf
,将处理所有planes
。