FFplay文档解读-37-视频过滤器十二

前言

Github地址:Github
地址:
专辑地址:FFplay专辑

29.110 nnedi

使用神经网络边缘定向插值去隔行视频。

此过滤器接受以下选项:

weights

强制选项,没有二进制文件过滤器无法正常工作。 目前的文件可以在这里找到:https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

deint

设置哪些帧去隔行,默认情况下全部。 可以是全部也可以是隔行扫描。

field

设置操作模式。

可以是以下参数:

参数 解释
af 使用帧标志,两个字段
a 使用帧标志,单个字段
t 仅使用顶部字段
b 仅使用底部字段
tf 首先使用两个字段
bf 首先使用两个字段
planes

设置要处理的平面,默认情况下过滤处理所有帧。

nsize

设置每个像素周围的局部邻域的大小,由预测神经网络使用。

可以是以下值:

s8x6
s16x6
s32x6
s48x6
s8x4
s16x4
s32x4
nns

设置预测神经网络中的神经元数量。 可以是以下值:

n16
n32
n64
n128
n256
qual

控制混合在一起的不同神经网络预测的数量,以计算最终输出值。 可以是fast,默认或slow

etype

设置要在预测变量中使用的权重集。 可以是以下数值:

数值 解释
a 训练的重量使绝对误差最小化
s 训练的权重以最小化平方误差
pscrn

控制是否使用预筛选神经网络来决定哪些像素应由预测神经网络处理,哪些像素可以通过简单的三次插值来处理。 训练预校正器以知道三次插值对于像素是否足够或者是否应该由预测器nn预测。 预筛选器nn的计算复杂度远小于预测器nn的计算复杂度。 由于大多数像素可以通过三次插值来处理,因此使用预筛选通常会导致更快的处理。prescreener非常准确,因此使用它和不使用它之间的区别几乎总是不明显。

可以是以下结果:

数值
none
original
new

默认值是:new

fapprox

设置各种调试标志。

29.111 noformat

强制libavfilter不使用任何指定的像素格式输入到下一个过滤器。

它接受以下参数:

pix_fmts

A ’|’-separated list of pixel format names, such as pix_fmts=yuv420p|monow|rgb24".

29.111.1 示例

  • 强制libavfilter使用与yuv420p不同的格式作为vflip过滤器的输入:

      noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式:

      noformat=yuv420p|yuv444p|yuv410p
    

29.112 noise

在视频输入帧上添加噪声。

过滤器接受以下选项:

all_seed
c0_seed
c1_seed
c2_seed
c3_seed

all_seed的情况下,为特定像素组件或所有像素组件设置噪声种子。 默认值为123457

all_strength, alls
c0_strength, c0s
c1_strength, c1s
c2_strength, c2s
c3_strength, c3s

all_strength的情况下,为特定像素组件或所有像素组件设置噪声强度。 默认值为0。允许的范围为[0,100]

all_flags, allf
c0_flags, c0f
c1_flags, c1f
c2_flags, c2f
c3_flags, c3f

如果all_flags,则为所有组件设置像素组件标志或设置标志。 组件标志的可用值如下:

解释
a 平均时间噪声(更平滑)
p 将随机噪声与(半)规则模式混合
t 时间噪声(帧之间的噪声模式变化)
u 均匀噪音(否则为高斯)

29.112.1 示例

为输入视频添加时间和均匀噪声:

noise=alls=20:allf=t+u

29.113 normalize

标准化RGB视频(也称直方图拉伸,对比度拉伸)。请参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每个帧的每个通道,过滤器计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑色到纯白色的完整动态范围。

可以在输入范围上使用时间平滑,以减少当小的暗物体或明亮物体进入或离开场景时引起的闪烁(亮度的快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且像摄像机一样,可能会导致视频曝光过度或曝光不足。

R,G,B通道可以独立归一化,这可能会导致一些色移,或者作为单个通道链接在一起,这可以防止色移。链接标准化保留了色调。独立规范化没有,因此它可以用于删除一些色偏。独立和链接的标准化可以以任何比率组合。

normalize过滤器接受以下选项:

blackpt
whitept

定义输出范围的颜色。最小输入值映射到blackpt。最大输入值映射到whitept。默认值分别为黑色和白色。为blackpt指定白色,为whitept指定黑色将提供颜色反转的标准化视频。灰度阴影可用于减小动态范围(对比度)。在这里指定饱和色可以产生一些有趣的效果。

smoothing

用于时间平滑的先前帧的数量。使用当前帧上的滚动平均值和前一帧的平滑来平滑每个通道的输入范围。默认值为0no temporal smoothing)。

independence

控制独立(色移)通道归一化与链接(颜色保留)归一化的比率。 0.0是完全链接的,1.0是完全独立的。默认为1.0(完全独立)。

strength

过滤器的整体强度。 1.0是全力。 0.0是一个相当消耗性能的无操作方式。默认为1.0(完整强度)。

29.113.1 示例

拉伸视频对比度以使用完整的动态范围,没有时间平滑; 可能会闪烁,具体取决于源内容:

    normalize=blackpt=black:whitept=white:smoothing=0

如上所述,但具有50帧的时间平滑; 应减少闪烁,具体取决于源内容:

normalize=blackpt=black:whitept=white:smoothing=50

如上所述,但使用了保持色调的链接信道规范化:

normalize=blackpt=black:whitept=white:smoothing=50:independence=0

如上所述,但有一半的强度:

normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5

将最暗的输入颜色映射为红色,将最亮的输入颜色映射为青色:

normalize=blackpt=red:whitept=cyan

29.114 null

将视频源不变地传递给output

29.115 ocr

光学字符识别

此滤镜使用Tesseract进行光学字符识别。

它接受以下选项:

datapath

datapath设置为tesseract数据。 默认是使用安装时设置的任何内容。

language

设置语言,默认为eng

whitelist

设置角色白名单。

blacklist

设置角色黑名单。

过滤器将识别的文本导出为帧元数据lavfi.ocr.text

29.116 ocv

使用libopencv应用视频转换。

要启用此过滤器,请安装libopencv库和标头,并使用--enable-libopencv配置FFmpeg

它接受以下参数:

filter_name

要应用的libopencv过滤器的名称。

filter_params

传递给libopencv过滤器的参数。 如果未指定,则假定为默认值。

有关更准确的信息,请参阅官方libopencv文档:http://docs.opencv.org/master/modules/imgproc/doc/filtering.html

几个libopencv支持的过滤器; 请参阅以下小节。

29.116.1 dilate

通过使用特定的结构元素扩展图像。它对应于libopencv函数cvDilate

它接受参数:struct_el | nb_iterations

struct_el表示结构元素,其语法为:colsxrows + anchor_xxanchor_y / shape

colsrows表示结构化元素的列数和行数,anchor_xanchor_y是锚点,并为结构化元素的形状定形。形状必须是rectcrossellipsecustom

如果shape的值是custom,则必须后跟一个= filename形式的字符串。假设具有名称filename的文件表示二进制图像,每个可打印字符对应于亮像素。使用自定义形状时,将忽略colsrows,而是假定读取文件的数量或列数和行数。

struct_el的默认值是3x3 + 0x0 / rect

nb_iterations指定变换应用于图像的次数,默认为1

下面是一些示例:

# Use the default values

ocv=dilate

# Dilate using a structuring element with a 5x5 cross, iterating two times

ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2

# Read the shape from the file diamond.shape, iterating two times.
# The file diamond.shape may contain a pattern of characters like this
#   *
#  ***
# *****
#  ***
#   *
# The specified columns and rows are ignored
# but the anchor point coordinates are not
ocv=dilate:0x0+2x2/custom=diamond.shape|2

29.116.2 erode

使用特定的结构元素侵蚀图像。 它对应于libopencv函数cvErode。

它接受参数:struct_el:nb_iterations,具有与扩展过滤器相同的语法和语义。

29.116.3 smooth

平滑输入视频。

过滤器采用以下参数:type | param1 | param2 | param3 | param4

type是要应用的平滑滤镜的类型,并且必须是以下值之一:blurblur_no_scalemediangaussianbilateral。 默认值为gaussian

param1param2param3param4的含义取决于平滑类型。 param1param2接受整数正值或0param3param4接受浮点值。

param1的默认值为3。其他参数的默认值为0

这些参数对应于分配给libopencv函数cvSmooth的参数。

29.117 oscilloscope

2D视频示波器。

用于测量空间脉冲,阶跃响应,色度延迟等。

它接受以下参数:

x

设置范围中心x位置。

y

设置范围中心y位置。

s

设置范围大小,相对于帧对角线。

t

设置范围倾斜/旋转。

o

设置跟踪不透明度。

tx

设置轨迹中心x位置。

ty

设置跟踪中心y位置。

tw

设置轨迹宽度,相对于框架的宽度。

th

设置迹线高度,相对于框架的高度。

c

设置要跟踪的组件。 默认情况下,它会跟踪前三个组件。

g

绘制跟踪网格。 默认值是:enabled

st

绘制一些统计数据, 默认值是:enabled

sc

绘制范围。 默认值是:enabled

29.117.1 示例

  • 检查完整的第一行视频帧。

      oscilloscope=x=0.5:y=0:s=1
    
  • 检查完整的最后一行视频帧。

      oscilloscope=x=0.5:y=1:s=1
    
  • 检查高度为1080的完整第5行视频帧。

      oscilloscope=x=0.5:y=5/1080:s=1
    
  • 检查视频帧的完整最后一列。

      oscilloscope=x=1:y=0.5:s=1:t=1
    

29.118 overlay

将一个视频叠加在另一个视频之上。

它需要两个输入并有一个输出。 第一个输入是覆盖第二个输入的"main"视频。

它接受以下参数:

接下来的选项的描述如下。

x
y

设置主视频上重叠视频的xy坐标的表达式。 两个表达式的默认值均为0。 如果表达式无效,则将其设置为一个巨大的值(意味着叠加层不会显示在输出可见区域内)。

eof_action

请参阅framesync

eval

在计算'x''y'的表达式时设置。

它接受以下值:

解释
init 仅在过滤器初始化期间或处理命令时评估表达式
frame 计算每个传入帧的表达式

默认值是:frame

shortest

请参阅framesync

format

设置输出视频的格式。

它接受以下值:

解释
yuv420 强制YUV420输出
yuv422 强制YUV422输出
yuv444 强制YUV444输出
rgb 强制打包RGB输出
gbrp 强制平面RGB输出
auto 自动选择格式

默认值是:‘yuv420’

repeatlast

请参阅framesync

alpha

设置叠加视频的alpha格式,可以是straightpremultiplied。默认是straight

'x''y'表达式可以包含以下参数。

main_w,W
main_h,H

主要输入宽度和高度。

overlay_w,w
overlay_h,h

叠加输入宽度和高度。

x
y

xy的计算值。对每个新帧进行评估。

hsub
vsub

输出格式的水平和垂直色度子样本值。例如,对于像素格式yuv422phsub2vsub1

n

输入帧的数量,从0开始。

pos

输入框文件中的位置,如果未知,则为straight

t

时间戳,以秒为单位表示。如果输入时间戳未知,则为NAN

此过滤器还支持framesync选项。

请注意:npost变量仅在每帧完成评估时可用,并且当'eval'设置为'init'时将评估为NAN

请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好通过setpts = PTS-STARTPTS过滤器传递两个输入,使它们以相同的零时间戳开始,作为电影过滤器的示例。

可以将更多叠加链接在一起,但应该测试此类方法的效率。

29.118.1 命令行

此筛选器支持以下命令:

x
y

修改叠加输入的xy。 该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

29.118.2 示例

  • 在主视频右下角10个像素处绘制叠加层:

      overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

  使用命名选项,上面的示例变为:

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
  • 使用带有-filter_complex选项的ffmpeg工具在输入的左下角插入透明的PNG徽标:

      ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用ffmpeg工具插入2个不同的透明PNG徽标(右下角的第二个徽标):

      ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加透明色层; WxH必须指定叠加过滤器的主输入大小:

      [email protected]:size=WxH [over]; [in][over] overlay [out]
    
  • 使用ffplay工具并排播放原始视频和过滤版本(此处使用deshake过滤器):

      ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
    

  以上命令与以下命令相同:

    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
  • 从时间2开始,从屏幕的左上方出现滑动叠加:

      overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
    
  • 通过将两个输入视频并排放置来组合输出:

      ffmpeg -i left.avi -i right.avi -filter_complex "
      nullsrc=size=200x100 [background];
      [0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
      [1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
      [background][left]       overlay=shortest=1       [background+left];
      [background+left][right] overlay=shortest=1:x=100 [left+right]
      "
    
  • 通过将delogo过滤器应用于某个部分,可以屏蔽10-20秒的视频:

      ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
      -vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
      masked.avi
    
  • 在级联中链接多个叠加:

      nullsrc=s=200x200 [bg];
      testsrc=s=100x100, split=4 [in0][in1][in2][in3];
      [in0] lutrgb=r=0, [bg]   overlay=0:0     [mid0];
      [in1] lutrgb=g=0, [mid0] overlay=100:0   [mid1];
      [in2] lutrgb=b=0, [mid1] overlay=0:100   [mid2];
      [in3] null,       [mid2] overlay=100:100 [out0]
    

29.119 owdenoise

应用Overcomplete Wavelet deoiser

过滤器接受以下选项:

depth

设定深度。

较大的深度值会使较低频率的分量去噪,但减慢滤波速度。

必须是8-16范围内的int,默认值为8

luma_strength,ls

设定亮度强度。

必须是0-1000范围内的双精度值,默认值为1.0

chroma_strength,cs

设定色度强度。

必须是0-1000范围内的双精度值,默认值为1.0

你可能感兴趣的:(FFplay文档解读-37-视频过滤器十二)