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

前言

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

将多个连续帧拼接在一起时,设置要重叠的帧数。该值必须介于0nb_frames -1之间。

init_padding

在显示第一个输出帧之前,将帧数设置为最初为空。这可以控制获得第一个输出帧的时间。该值必须介于0nb_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_topinterleave_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,将处理所有平面。

如果格式有12个分量,则亮度为0。如果格式有34个分量:对于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.51.5之间。

负值会使输入视频模糊,而正值会使其锐化,零值将禁用效果。

默认值为1.0

chroma_msize_x,cx

设置色度矩阵水平尺寸。它必须是3到23之间的奇数。默认值为5

chroma_msize_y,cy

设置色度矩阵垂直大小。它必须是323之间的奇数。默认值为5

chroma_amount,ca

设置色度效果强度。它必须是浮点数,合理的值介于-1.51.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
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容