前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
29.170 telecine
将电视电影处理应用于视频。
此过滤器接受以下选项:
first_field
选项 | 解释 |
---|---|
top, t | top field first |
bottom, b | 底部字段优先默认值为top
|
pattern
一串数字,表示希望应用的下拉模式。 默认值为23
。
Some typical patterns:
NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444
PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334
29.171 threshold
将阈值效果应用于视频流。
此过滤器需要四个视频流才能执行阈值处理。 第一个流是我们正在过滤的流。 第二流保持阈值,第三流保持最小值,最后,第四流保持最大值。
过滤器接受以下选项:
planes
设置要处理的平面,将复制未处理的平面。 默认值为0xf
,将处理所有平面。
例如,如果第一流像素的分量值小于来自第二阈值流的像素分量的阈值,则将拾取第三流值,否则将拾取第四流像素分量值。
使用颜色源过滤器可以执行各种类型的阈值处理:
29.171.1 示例
-
二进制阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
-
反转二进制阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
-
截断二进制阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
-
阈值为零,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
-
使用灰色作为阈值将反转阈值设置为零:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
29.172 thumbnail
在给定的连续帧序列中选择最具代表性的帧。
过滤器接受以下选项:
n
设置帧批量大小进行分析; 在一组n
帧中,过滤器将选择其中一个,然后处理下一批n
帧直到结束。 默认值为100
。
由于过滤器会跟踪整个帧序列,因此较大的n
值将导致较高的内存使用量,因此不建议使用较高的值。
29.172.1 示例
-
每
50
帧提取一张图片:thumbnail=50
-
使用
ffmpeg
创建缩略图的完整示例:ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
29.173 tile
将几个连续的帧拼接在一起。
过滤器接受以下选项:
layout
设置网格大小(即行数和列数)。有关此选项的语法,请检查(ffmpeg-utils)视频大小
语法。
nb_frames
设置给定区域中要渲染的最大帧数。它必须小于或等于wxh
。默认值为0
,表示将使用所有区域。
margin
设置外边框边距(以像素为单位)。
padding
设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如边缘的值不同),请参阅填充视频滤镜。
color
指定未使用区域的颜色。有关此选项的语法,请检查(ffmpeg-utils)颜色语法
。颜色的默认值为"black"
。
overlap
将多个连续帧拼接在一起时,设置要重叠的帧数。该值必须介于0
和nb_frames -1
之间。
init_padding
在显示第一个输出帧之前,将帧数设置为最初为空。这可以控制获得第一个输出帧的时间。该值必须介于0
和nb_frames -1
之间。
29.173.1 示例
-
在电影中制作所有关键帧
('-skip_frame nokey')
的8x8 PNG
图块:ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
'-vsync 0'
是必要的,以防止ffmpeg
复制每个输出帧以适应最初检测到的帧速率。
-
使用混合平面和命名选项在
3x2
帧的区域中显示5
张图片,其间有7
个像素,初始边距为2
像素:tile=3x2:nb_frames=5:padding=7:margin=2
29.174 tinterlace
执行各种类型的时域隔行扫描。
帧从1
开始计数,因此第一个输入帧被视为奇数。
过滤器接受以下选项:
mode
指定隔行扫描的模式。 此选项也可以单独指定为值。 请参阅下文,了解此选项的值列表。
可用值包括:
merge, 0
将奇数帧移动到上部字段,甚至移动到下部字段,以半帧速率生成双倍高度帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
11111 33333
22222 44444
11111 33333
22222 44444
11111 33333
22222 44444
11111 33333
22222 44444
drop_even, 1
仅输出奇数帧,偶数帧被丢弃,生成半帧速率不变的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
11111 33333
11111 33333
11111 33333
11111 33333
drop_odd, 2
仅输出偶数帧,丢弃奇数帧,生成半帧速率不变的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
22222 44444
22222 44444
22222 44444
22222 44444
pad, 3
将每个帧扩展到全高,但用黑色填充交替行,以相同的输入帧速率生成具有双倍高度的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
11111 ..... 33333 .....
..... 22222 ..... 44444
11111 ..... 33333 .....
..... 22222 ..... 44444
11111 ..... 33333 .....
..... 22222 ..... 44444
11111 ..... 33333 .....
..... 22222 ..... 44444
interleave_top, 4
将奇数帧的上场与偶数帧的下场交错,生成半帧率不变的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111<- 22222 33333<- 44444
11111 22222<- 33333 44444<-
11111<- 22222 33333<- 44444
11111 22222<- 33333 44444<-
Output:
11111 33333
22222 44444
11111 33333
22222 44444
interleave_bottom, 5
将奇数帧的下部场与偶数帧的上部场交织,生成半帧速率不变的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222<- 33333 44444<-
11111<- 22222 33333<- 44444
11111 22222<- 33333 44444<-
11111<- 22222 33333<- 44444
Output:
22222 44444
11111 33333
22222 44444
11111 33333
interlacex2, 6
双帧速率,高度不变。 插入帧,每个帧包含来自前一输入帧的第二时间字段和来自下一输入帧的第一时间字段。 此模式依赖于top_field_first
标志。 对于没有字段同步的隔行扫描视频显示很有用。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
11111 22222 22222 33333 33333 44444 44444
11111 11111 22222 22222 33333 33333 44444
11111 22222 22222 33333 33333 44444 44444
11111 11111 22222 22222 33333 33333 44444
mergex2, 7
将奇数帧移动到上部字段,甚至移动到下部字段,以相同的帧速率生成双倍高度的帧。
------> time
Input:
Frame 1 Frame 2 Frame 3 Frame 4
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
11111 22222 33333 44444
Output:
11111 33333 33333 55555
22222 22222 44444 44444
11111 33333 33333 55555
22222 22222 44444 44444
11111 33333 33333 55555
22222 22222 44444 44444
11111 33333 33333 55555
22222 22222 44444 44444
不推荐使用数字值,但出于向后兼容性原因,将接受这些值。
合并默认模式。
flags
指定影响过滤器进程的标志。
标志的可用值是:
low_pass_filter,vlfp
在滤波器中启用线性垂直低通滤波。 从包含高频垂直细节的渐进源创建隔行目标时,需要垂直低通滤波。 过滤将减少交错'twitter'
和莫尔图案。
complex_filter,cvlfp
启用复杂的垂直低通滤波。 这将略微减少交织’twitter’
和莫尔图案,但更好地保留细节和主观锐度印象。
垂直低通滤波只能用于'mode'interleave_top
和interleave_bottom
。
29.175 tonemap
来自不同动态范围的色调图颜色。
此过滤器需要单精度浮点数据,因为它需要对(并且可以输出)超出范围的值进行操作。 需要另一个过滤器(如zscale
)将结果帧转换为可用格式。
实现的色调映射算法仅适用于线性光,因此输入数据应预先线性化(并且可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT
29.175.1 选项
过滤器接受以下选项。
tonemap
设置要使用的色调映射算法。
可能的值如下:
值 | 解释 |
---|---|
none | 不要应用任何色调映射,只能去饱和过亮像素 |
clip | 硬剪辑任何超出范围的值。 使用它可以获得范围内值的完美颜色精度,同时扭曲超出范围的值 |
linear | 将整个参考色域拉伸到显示器的线性倍数 |
gamma | 在色调曲线之间进行对数转换 |
reinhard | 使用非线性对比度,通过简单的曲线保持整体图像亮度,从而使细节变平并降低色彩精度 |
hable | 比reinhard 更好地保留黑暗和明亮的细节,代价是略微变暗一切。 当细节保存比颜色和亮度准确性更重要时使用它 |
mobius | 平滑地绘制超出范围的值,同时尽可能保留范围内材料的对比度和颜色。 当颜色准确性比细节保存更重要时使用它 |
默认值是:none
。
param
调整色调映射算法。
这会影响以下算法:
算法 | 解释 |
---|---|
none | 忽视 |
linear | 指定拉伸时使用的比例因子。 默认为1.0
|
gamma | 指定函数的指数。 默认为1.8
|
clip | 指定一个额外的线性系数,在剪切前乘以信号。 默认为1.0
|
reinhard | 在显示峰值处指定局部对比度系数。 默认为0.5 ,这意味着色域内值约为剪切时的一半 |
hable | 忽视 |
mobius | 指定从线性到mobius 变换的过渡点。 低于此点的每个值都保证以1:1 映射。 值越高,结果越准确,代价是丢失明亮的细节。 默认为0.3 ,由于陡峭的初始斜率仍然相当准确地保留了范围内的颜色 |
desat
对超过此亮度级别的高光应用去饱和度。 参数越高,保留的颜色信息就越多。 此设置有助于防止超高光的不自然地被吹掉的颜色,通过(平滑地)变成白色。 这使得图像感觉更自然,但代价是减少了关于超出范围颜色的信息。
默认值2.0
有点保守,主要适用于天空或直接阳光照射的表面。 设置为0.0
将禁用此选项。
仅当输入框架具有受支持的颜色标记时,此选项才有效。
peak
使用此值覆盖signal/nominal/reference
峰值。 当显示元数据中的嵌入峰值信息不可靠或者从较低范围到较高范围的色调映射时有用。
29.176 transpose
在输入视频中转置包含列的行,并可选择将其翻转。
它接受以下参数:
dir
指定转置方向。
可以假设以下值:
0, 4, cclock_flip
逆时针旋转90
度并垂直翻转(默认),即:
L.R L.l
. . -> . .
l.r R.r
1, 5, clock
顺时针旋转90
度,即:
L.R l.L
. . -> . .
l.r r.R
2, 6, cclock
逆时针旋转90
度,即:
L.R R.r
. . -> . .
l.r L.l
3, 7, clock_flip
顺时针和垂直翻转旋转90
度,即:
L.R r.R
. . -> . .
l.r l.L
对于介于4-7
之间的值,仅在输入视频几何体为纵向而非横向时才进行换位。 不推荐使用这些值,而应使用passthrough选
项。
不推荐使用数值,应该删除它们以支持符号常量。
passthrough
如果输入几何与指定值指定的几何匹配,则不应用转置。 它接受以下值:
none
始终应用换位。
portrait
保留纵向几何体(当高度>=
宽度时)。
landscape
保留横向几何体(当宽度>=
高度时)。
默认值为none
。
例如,顺时针旋转90
度并保留纵向布局:
transpose=dir=1:passthrough=portrait
上面的命令也可以指定为:
transpose=1:portrait
29.177 trim
修剪输入,使输出包含输入的一个连续子部分。
它接受以下参数:
start
指定保留部分的开始时间,即具有时间戳开始的帧将是输出中的第一帧。
end
指定将被丢弃的第一帧的时间,即紧接在具有时间戳结束的帧之前的帧将是输出中的最后一帧。
start_pts
这与start
相同,但此选项以时基单位而不是秒为单位设置开始时间戳。
end_pts
这与end
相同,但此选项以时基单位而不是秒为单位设置结束时间戳。
duration
输出的最大持续时间(以秒为单位)。
start_frame
应传递给输出的第一帧的编号。
end_frame
应删除的第一帧的编号。
'start'
,'end'
和'duration'
表示为持续时间规范;请参阅(ffmpeg-utils)接受语法的持续时间语法
。
请注意,前两组开始/结束选项和'duration'
选项查看帧时间戳,而_frame
变体只计算通过过滤器的帧。另请注意,此过滤器不会修改时间戳。如果希望输出时间戳从零开始,请在修剪滤波器后插入一个setpts
过滤器。
如果设置了多个开始或结束选项,则此过滤器会尝试贪婪并保留与至少一个指定约束匹配的所有帧。要仅保留一次匹配所有约束的零件,请链接多个修剪过滤器。
默认值是保留所有输入。所以可以设置例如只是最终值,以保持指定时间之前的一切。
例子:
-
删除除输入的第二分钟以外的所有内容:
ffmpeg -i INPUT -vf trim=60:120
-
只保留第一秒:
ffmpeg -i INPUT -vf trim=duration=1
29.178 unpremultiply
使用第二个流的第一个平面作为alpha
,将alpha
不成倍增效应应用于输入视频流。
两个流必须具有相同的尺寸和相同的像素格式。
过滤器接受以下选项:
planes
设置要处理的平面,将复制未处理的平面。 默认值为0xf
,将处理所有平面。
如果格式有1
或2
个分量,则亮度为0
。如果格式有3
或4
个分量:对于RGB
格式,位0
为绿色,位1
为蓝色,位2
为红色; 对于YUV
格式,位0
是亮度,位1
是色度-U
,位2
是色度-V
。 如果存在,alpha
通道始终是最后一位。
inplace
不需要第二个输入进行处理,而是使用输入流中的alpha
平面。
29.179 unsharp
锐化或模糊输入视频。
它接受以下参数:
luma_msize_x,lx
设置亮度矩阵水平尺寸。它必须是3到23之间的奇数。默认值为5
。
luma_msize_y,ly
设置亮度矩阵垂直大小。它必须是3到23之间的奇数。默认值为5
。
luma_amount,la
设置亮度效果强度。它必须是浮点数,合理的值介于-1.5
和1.5
之间。
负值会使输入视频模糊,而正值会使其锐化,零值将禁用效果。
默认值为1.0
。
chroma_msize_x,cx
设置色度矩阵水平尺寸。它必须是3到23之间的奇数。默认值为5
。
chroma_msize_y,cy
设置色度矩阵垂直大小。它必须是3
到23
之间的奇数。默认值为5
。
chroma_amount,ca
设置色度效果强度。它必须是浮点数,合理的值介于-1.5
和1.5
之间。
负值会使输入视频模糊,而正值会使其锐化,零值将禁用效果。
默认值为0.0
。
所有参数都是可选的,默认为字符串'5:5:1.0:5:5:0.0'
的等效值。
29.179.1 示例
-
应用强烈的亮度锐化效果:
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
-
应用亮度和色度参数的强烈模糊:
unsharp=7:7:-2:7:7:-2