首页 > 编程学习 > FFplay文档解读-33-视频过滤器八

FFplay文档解读-33-视频过滤器八

发布时间:2022/11/13 19:19:58

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颜色空间。

学习地址:音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
【文章福利】免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~    

  

如果未定义其中一个色度表达式,则它会回落到另一个色度表达式上。如果未指定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

对于函数,如果xy在区域之外,则该值将自动剪切到更近的边缘。

29.71.1 示例

  • 水平翻转图像:

      geq=p(W-X\,Y)
    
  • 生成具有角度PI/3100像素波长的二维正弦波:

      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

滤镜将改变任何一个像素的最大量。这也是检测几乎平坦区域的阈值。可接受的值范围从.5164;默认值为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 CLUTHald CLUT输入可以是简单图像或完整视频流。

过滤器接受以下选项:

shortest

最短输入终止时强制终止。 默认值为0

repeatlast

在流结束后继续应用最后一个CLUT。 在达到CLUT的最后一帧后,值为0将禁用过滤器。 默认值为1

haldclut也有与lut3d相同的插值选项(两个滤波器共享相同的内部结构)。

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水平。如果启用,则滤波器将随机地改变输出像素的亮度一小部分,以避免直方图的条带化。可能的值为noneweakstrong。它默认为none

29.76 histogram

计算并绘制输入视频的颜色分布直方图。

计算出的直方图是图像中颜色分量分布的表示。

标准直方图显示图像中的颜色分量分布。 显示每个颜色分量的颜色图表。 根据输入格式显示当前帧中YUVARGB分量的分布。 在每个图下方,显示了颜色分量比例计。

过滤器接受以下选项:

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

在硬件到硬件映射中,反向映射 - 在接收器中创建帧并将它们映射回源。 在需要在一个方向上进行映射但在所使用的设备仅支持相反方向的某些情况下,这可能是必要的。

此选项很危险 - 如果对该过滤器的输出有任何其他约束,它可能会以未定义的方式破坏前面的过滤器。 如果不完全理解其使用的含义,请不要使用它。

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式