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
用于时间平滑的先前帧的数量。使用当前帧上的滚动平均值和前一帧的平滑来平滑每个通道的输入范围。默认值为0
(no 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
cols
和rows
表示结构化元素的列数和行数,anchor_x
和anchor_y
是锚点,并为结构化元素的形状定形。形状必须是rect
,cross
,ellipse
或custom
。
如果shape
的值是custom
,则必须后跟一个= filename
形式的字符串。假设具有名称filename
的文件表示二进制图像,每个可打印字符对应于亮像素。使用自定义形状时,将忽略cols
和rows
,而是假定读取文件的数量或列数和行数。
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是要应用的平滑滤镜的类型,并且必须是以下值之一:blur
,blur_no_scale
,median
,gaussian
或bilateral
。 默认值为gaussian
。
param1
,param2
,param3
和param4
的含义取决于平滑类型。 param1
和param2
接受整数正值或0
。 param3
和param4
接受浮点值。
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
设置主视频上重叠视频的x
和y
坐标的表达式。 两个表达式的默认值均为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
格式,可以是straight
或premultiplied
。默认是straight
。
'x'
和'y'
表达式可以包含以下参数。
main_w,W
main_h,H
主要输入宽度和高度。
overlay_w,w
overlay_h,h
叠加输入宽度和高度。
x
y
x
和y
的计算值。对每个新帧进行评估。
hsub
vsub
输出格式的水平和垂直色度子样本值。例如,对于像素格式yuv422p
,hsub
为2
,vsub
为1
。
n
输入帧的数量,从0
开始。
pos
输入框文件中的位置,如果未知,则为straight
。
t
时间戳,以秒为单位表示。如果输入时间戳未知,则为NAN
。
此过滤器还支持framesync
选项。
请注意:n
,pos
,t
变量仅在每帧完成评估时可用,并且当'eval'
设置为'init'
时将评估为NAN
。
请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好通过setpts = PTS-STARTPTS
过滤器传递两个输入,使它们以相同的零时间戳开始,作为电影过滤器的示例。
可以将更多叠加链接在一起,但应该测试此类方法的效率。
29.118.1 命令行
此筛选器支持以下命令:
x
y
修改叠加输入的x
和y
。 该命令接受相应选项的相同语法。
如果指定的表达式无效,则保持其当前值。
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
必须指定叠加过滤器的主输入大小:color=color=red@.3: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
。