FFplay文档解读-33-视频过滤器八
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
29.70 gblur
应用高斯模糊滤镜。
过滤器接受以下选项:
sigma
设置水平西格玛,高斯模糊的标准偏差。 默认值为0.5
。
steps
设置高斯近似的步数。 默认值是1
。
planes
设置要过滤的平面。 默认情况下,将过滤所有平面。
sigmaV
设置垂直sigma
,如果为负,它将与sigma
相同。 默认值为-1
。
29.71 geq
过滤器接受以下选项:
lum_expr,lum
设置亮度表达式。
cb_expr,cb
设置色度蓝色表达式。
cr_expr,cr
设置色度红色表达式。
alpha_expr, a
设置alpha
表达式。
red_expr,r
设置红色表达式。
green_expr,g
设置绿色表达式。
blue_expr,b
设置蓝色表达式。
根据指定的选项选择颜色空间。如果指定了'lum_expr','cb_expr'
或'cr_expr'
选项之一,则过滤器将自动选择YCbCr
颜色空间。如果指定了'red_expr','green_expr'
或'blue_expr'
选项之一,它将选择RGB颜色空间。
如果未定义其中一个色度表达式,则它会回落到另一个色度表达式上。如果未指定alpha
表达式,则将评估为不透明值。如果没有指定色度表达式,它们将评估亮度表达式。
表达式可以使用以下变量和函数:
N
过滤帧的序号,从0
开始。
X
Y
当前样本的坐标。
W
H
图像的宽度和高度。
SW
SH
宽度和高度比例取决于当前过滤的平面。它是相应的亮度平面像素数与当前平面数之间的比率。例如。对于YUV4:2:0
,亮度平面的值为1,1
,色度平面的值为0.5
,0.5
。
T
当前帧的时间,以秒为单位表示。
p(x,y)
返回当前平面的位置(x,y)
处的像素值。
lum(x,y)
返回亮度平面的位置(x,y)
处的像素值。
cb(x,y)
返回蓝色差色度平面的位置(x,y)
处的像素值。如果没有这样的plane
,则返回0
。
cr(x,y)
返回红差色度平面的位置(x,y)
处的像素值。如果没有这样的plane
,则返回0。
r(x,y)
g(x,y)
b(x,y)
返回红色/绿色/蓝色分量的位置(x,y)
处的像素值。如果没有这样的组件,则返回0
。
alpha(x,y)
返回alpha
平面的位置(x,y)
处的像素值。如果没有这样的plane
,则返回0
。
对于函数,如果x
和y
在区域之外,则该值将自动剪切到更近的边缘。
29.71.1 示例
-
水平翻转图像:
geq=p(W-X\,Y)
-
生成具有角度
PI/3
和100
像素波长的二维正弦波:geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
-
产生一种奇特的神秘移动光线:
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
-
生成快速浮雕效果:
format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
-
根据像素位置修改
RGB
分量:geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
-
创建与输入大小相同的径向渐变(另请参见
vignette过滤器
):geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
29.72 gradfun
通过截断到8
位颜色深度来修复有时引入几乎平坦区域的条带伪影。插入应该位于乐队所在位置的渐变,并将它们抖动。
它仅用于播放。在有损压缩之前不要使用它,因为压缩往往会失去抖动并带回带。
它接受以下参数:
strength
滤镜将改变任何一个像素的最大量。这也是检测几乎平坦区域的阈值。可接受的值范围从.51
到64
;默认值为1.2
。超出范围的值将被剪切到有效范围。
radius
适合渐变的邻域。半径越大,渐变越平滑,但也会阻止滤镜修改详细区域附近的像素。可接受的值为8-32
;默认值为16
。超出范围的值将被剪切到有效范围。
或者,可以将选项指定为扁平字符串:strength [:radius]
。
29.72.1 示例
-
使用强度为
3.5
,半径为8
的过滤器:gradfun=3.5:8
-
指定半径,省略强度(将回落到默认值):
gradfun=radius=8
29.73 haldclut
将Hald CLUT
应用于视频流。
第一个输入是要处理的视频流,第二个输入是Hald CLUT
。 Hald CLUT
输入可以是简单图像或完整视频流。
过滤器接受以下选项:
shortest
最短输入终止时强制终止。 默认值为0
。
repeatlast
在流结束后继续应用最后一个CLUT
。 在达到CLUT
的最后一帧后,值为0
将禁用过滤器。 默认值为1
。
haldclut
也有与lut3d
相同的插值选项(两个滤波器共享相同的内部结构)。
有关Hald CLUT
的更多信息,请访问Eskil Steenberg
的网站(Hald CLUT
作者),网址为http://www.quelsolaar.com/technology/clut.html。
29.73.1 Workflow 示例
29.73.1.1 Hald CLUT video stream
生成一个身份Hald CLUT
流改变了各种效果:
ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
注意:确保使用无损编解码器。
然后将它与haldclut
一起使用,将其应用于一些随机流:
ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
Hald CLUT
将应用于10
秒(clut.nut
的持续时间),然后该CLUT
流的最新图片将应用于mandelbrot
流的剩余帧。
29.73.1.2 Hald CLUT with preview
Hald CLUT
应该是Level * Level * Level by Level * Level * Level
像素的平方图像。 对于给定的Hald CLUT,FFmpeg
将从图片的左上角开始选择最大可能的正方形。 剩余的填充像素(底部或右侧)将被忽略。 此区域可用于添加Hald CLUT
的预览。
通常,haldclut
过滤器将支持以下生成的Hald CLUT
:
ffmpeg -f lavfi -i haldclutsrc=8 -vf "
pad=iw+320 [padded_clut];
smptebars=s=320x256, split [a][b];
[padded_clut][a] overlay=W-320:h, curves=color_negative [main];
[main][b] overlay=W-320" -frames:v 1 clut.png
它包含原始和CLUT
效果的预览:SMPTE
颜色条显示在右上方,并在颜色变化处理的相同颜色条下方。
然后,可以通过以下方式显示此Hald CLUT
的效果:
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
29.74 hflip
水平翻转输入视频。
例如,要使用ffmpeg
水平翻转输入视频:
ffmpeg -i in.avi -vf "hflip" out.avi
29.75 histeq
此滤镜在每帧的基础上应用全局颜色直方图均衡。
它可用于校正具有压缩像素强度范围的视频。滤波器重新分配像素强度以均衡它们在强度范围内的分布。它可以被视为"automatically adjusting contrast filter"
(“自动调整对比度滤波器”)。此滤镜仅用于纠正降级或捕获不良的源视频。
过滤器接受以下选项:
strength
确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是[0,1]
范围内的浮点数,默认为0.200
。
intensity
设置可生成的最大强度并适当缩放输出值。应根据需要设定强度,然后如果需要可以限制强度以避免洗掉。该值必须是[0,1]
范围内的浮点数,默认为0.210
。
antibanding
设置antibanding
水平。如果启用,则滤波器将随机地改变输出像素的亮度一小部分,以避免直方图的条带化。可能的值为none
,weak
或strong
。它默认为none
。
29.76 histogram
计算并绘制输入视频的颜色分布直方图。
计算出的直方图是图像中颜色分量分布的表示。
标准直方图显示图像中的颜色分量分布。 显示每个颜色分量的颜色图表。 根据输入格式显示当前帧中Y
,U
,V
,A
或R
,G
,B
分量的分布。 在每个图下方,显示了颜色分量比例计。
过滤器接受以下选项:
level_height
设置关卡高度。 默认值为200
。允许范围为[50,2048]
。
scale_height
设置色标高度。 默认值为12
。允许范围为[0,40]
。
display_mode
设置显示模式。 它接受以下值:
值 | 解释 |
---|---|
stack | 每个颜色组件图放在彼此下方 |
parade | 每个颜色分量图并排放置 |
overlay | 除了表示颜色分量的图形直接叠加在彼此之外时,呈现与游行中的信息相同的信息 |
默认值是:stack
。
levels_mode
设置模式。 可以是线性的,也可以是对数的。 默认是线性的。
components
设置要显示的颜色组件。 默认值为7
。
fgopacity
设置前景不透明度。 默认值为0.7
。
bgopacity
设置背景不透明度。 默认值为0.5
。
29.76.1 示例
-
计算并绘制直方图:
ffplay -i input -vf histogram
29.77 hqdn3d
这是一款高精度/高质量的3d
去噪滤波器。 它旨在减少图像噪声,产生平滑的图像并使静止图像真正静止。 它应该增强压缩性。
它接受以下可选参数:
luma_spatial
非负浮点数,指定空间亮度强度。 它默认为4.0
。
chroma_spatial
指定空间色度强度的非负浮点数。 默认为3.0 * luma_spatial / 4.0
。
luma_tmp
浮点数,指定亮度时间强度。 默认为6.0 * luma_spatial / 4.0
。
chroma_tmp
浮点数,指定色度时间强度。 它默认为luma_tmp * chroma_spatial / luma_spatial
。
29.78 hwdownload
将硬件帧下载到系统内存。
输入必须是硬件帧,输出是非硬件格式。 并非所有格式都支持输出 -
可能需要在图表后面插入一个额外的‘format’
过滤器,以便以支持的格式输出输出。
29.79 hwmap
将硬件帧映射到系统内存或其他设备。
该滤波器有几种不同的操作模式; 使用哪一个取决于输入和输出格式:
- 硬件帧输入,正常帧输出。
将输入帧映射到系统内存并将它们传递给输出。 如果稍后需要原始硬件框架(例如,在覆盖部分其他内容之后),则可以在下一个模式中再次使用hwmap
过滤器来检索它。
- 正常帧输入,硬件帧输出。
如果输入实际上是软件映射的硬件帧,则取消映射 - 即返回原始硬件帧。
否则,必须提供设备。 在该设备上为输出创建新的硬件表面,然后将它们映射回输入处的软件格式,并将这些帧提供给前面的过滤器。 这将像'hwupload'
过滤器一样,但当输入已经是兼容格式时,可能能够避免额外的副本。
- 硬件帧输入和输出。
必须直接或使用'derive_device'
选项为输出提供设备。 输入和输出设备必须是不同类型和兼容的 - 这的确切含义取决于系统,但通常意味着它们必须引用相同的底层硬件上下文(例如,参考相同的图形卡)。
如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。
否则,将帧映射到输出设备 -
在输出上创建与输入帧相对应的新硬件帧。
接受以下附加参数:
mode
设置帧映射模式。 下面是一些组合:
组合 | 解释 |
---|---|
read | 映射的帧应该是可读的 |
write | 映射的帧应该是可写的 |
overwrite | 映射将始终覆盖整个帧。 在某些情况下,这可以改善性能,因为不需要加载帧的原始内容。 |
direct | 映射不得涉及任何复制。 在某些情况下,会创建对帧副本的间接映射,在这种情况下,无法进行直接映射或者会出现意外的属性。 设置此标志可确保映射是直接的,如果不可能则会失败。 |
如果未指定,则默认为read+write
。
derive_device type
而不是使用初始化时提供的设备,而是从输入帧存在的设备派生类型类型的新设备。
reverse
在硬件到硬件映射中,反向映射 -
在接收器中创建帧并将它们映射回源。 在需要在一个方向上进行映射但在所使用的设备仅支持相反方向的某些情况下,这可能是必要的。
此选项很危险 -
如果对该过滤器的输出有任何其他约束,它可能会以未定义的方式破坏前面的过滤器。 如果不完全理解其使用的含义,请不要使用它。