yadif反交错用mode=1(双倍帧速率怎么调 bob)之后的问题

反交错滤镜的选用问题【dwing吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:4,427贴子:
反交错滤镜的选用问题
我目前使用的编码软件是XMedia Recode,它内置三种反交错滤镜:第一种是:libav Deinterlace,有四种模式可供选择:  Linear blending(线性混合)  Linear interpolation(线性插值)  Cubic interpolation(三次插值)  Median(中等)第二种是:Yadif第三种是:KernelDeint,其选项如下图:上面三种貌似就Yadif比较常见,其他两种都没有搜索到相关资料,不知道有没有了解的朋友?另外如果我选择第一种滤镜的话,从理论上来说,这四种模式中哪种效果最好?
kerneldeint效果很渣
如果目标是实时处理 首选是硬件反交错 如果非要在这几个里面选一个 我个人会选linear blending 虽然出来的画面模糊但是不像其他几个有明显artifacts
懒人直接qtgmc或者AAD
编码的话,质量差选yadif,质量好选qtgmc
贴吧热议榜
使用签名档&&
保存至快速回贴ffmpeg命令行指令2 - 简书
ffmpeg命令行指令2
字数 40781
37 视频滤镜
在配置编译FFmpeg时可以通过--disable-filters来禁止所有滤镜的编译。也可以配置编译脚本来输出所有包含进编译的滤镜信息。
下面是当前可用的视频滤镜介绍。
alphaextract
把输入视频作为灰度视频来提取透明通道,它通常和alphamerge滤镜联用。
alphamerge
通过添加或者替换透明通道,让主要视频与另外一路视频混合。这里主要是使用alphaextract来让不支持透明通道的视频成为允许传输或存储帧透明的帧序列
例如:为了重建完整的帧,让一个普通的YUV编码视频和利用了alphaextract的一个单独的视频混合:
movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
因为这个滤镜专为重建帧设计,所以它的运行过程中没有考虑时间戳,而是在输入达到流结束时终止。这可能将导致编码管道丢帧,如果你仅想实现一个图像叠加到视频,建议采用overlay滤镜。
类似subtitles,除了它不需要libavcodec和libavformat。另一方面,它受限于ASS(Advanced Substation Alpha-高级子透明)字幕格式文件
这个滤镜除了subtitles滤镜选项外还接受下面选项:
设置图像引擎,有效的值有:
默认的libass图像引擎,它是最合适的值
‘simple’
快, 仅采用font-agnostic图像
‘complex’
慢,采用OpenType。
默认为auto.
在输入的亮度平面上计算非黑边缘。
这个滤镜按设定的最小亮度值计算平面上所有像素图像的编译(按亮度——即按阀值连接起来构成多个区块,阀值连线即边缘)。描述边缘的参数会记录到滤镜日志中。
滤镜接受下面的选项:
设置最小的亮度值(其下认为是黑的,其上为非黑),默认16
blackdetect
检测视频(几乎)完全是黑色的时间间隔(段)。它可以用于检测章间的过渡、广告或者无效的录制。输出是以秒为单位的检测出黑场时间段的开始、结束和持续时间线信息。
为了显示(输出)时间线信息,你需要设置日志层次为AV_LOG_INFO。
滤镜接受下面的选项:
black_min_duration, d
以秒为单位设置最小黑场持续时间(小于这个的不被检出),它必须是非负浮点数,默认为2.0
picture_black_ratio_th, pic_th
设置画面黑场检验标准,即图像中黑色像素占画面所有像素比的最小值:
nb_black_pixels / nb_pixels
如果画面中黑色像素占比大于这个值则判断当前画面是黑场画面,默认值为0.98
pixel_black_th, pix_th
设置判断像素是黑色像素的标准
采用像素亮度值来判断,只有像素亮度不大于一个设定的值(所确定的标准,见后)即为黑色像素。其依据下面的方程计算亮度:
absolute_threshold = luminance_minimum_value + pixel_black_th * luminance_range_size
luminance_range_size 和 luminance_minimum_value依赖于输入视频格式,范围为 对YUV全范围格式视频[0-255],非全范围格式[16-235]
默认值0.10(对于YUV全范围格式,则计算值为 0+0.,对于非YUV全范围则为 16+0.1(235-16)=37.9)
下面的例子设置黑像素标准为最小值,黑场时长大于等于2秒:
blackdetect=d=2:pix_th=0.00
blackframe
判断(几乎)黑帧。它可以用于检测章间的过渡、广告等。输出内容包括检测到的黑帧数、占比和文件中的偏移(对文件格式支持检测,如果不支持检测为-1)和以秒为单位的时间戳。
为了显示这些输出信息,需要设置日志层次为AV_LOG_INFO
它接受下面的参数:
像素为黑在帧中的占比百分比数,默认98
threshold, thresh
像素为黑的判断标准,默认为32
blend,tblend
混合两个视频帧
其中blend混合两路输出1路流,第一个输入为top层,二个路为bottom层,输出以输入短的为结束。而tblend(时间混合)需要从一个单独视频流的连续两帧,让新帧在上叠加在老帧上。
接受选项的介绍如下:
设置混合模式(对指定像素或者所有像素——利用all_mode),默认值是normal
当前有效的混合模式如下:
‘addition’
‘average’
‘darken’
‘difference’
‘difference128’
‘divide’
‘exclusion’
‘hardlight’
‘hardmix’
‘lighten’
‘linearlight’
‘multiply’
‘negation’
‘normal’
‘overlay’
‘phoenix’
‘pinlight’
‘reflect’
‘screen’
‘softlight’
‘subtract’
‘vividlight’
c0_opacity
c1_opacity
c2_opacity
c3_opacity
all_opacity
设置特定像素的透明度,或者设置整个透明度(利用all_opacity),仅用于组合像素混合模式blend滤镜.
设置特定像素混合表达式或所有像素混合表达式(all_expr),注意如果它们被设定,则相关模式选项被忽略
表达式可以采用下面的变量:
进入滤镜的帧序数,从0开始计数
样本点坐标(像素坐标)
整个帧画面的宽和高(原始的)
取决于当前滤镜平面的宽和高。它对应于像素亮度平面和当前平面的比值,如对于YUV4:2:0格式,则对于亮度平面为1,1,对于色度平面则是0.5,0.5
当前帧的时间,单位秒
top层的视频帧上当前像素值
bottom层的视频帧上当前像素值
在短输入结束时强制结束,默认为0,只用于blend滤镜
repeatlast
在结束流后继续应用底帧。值为0表明不继续应用底帧,默认为1.选项只用于blend滤镜
blend,tblend例子
在前10秒应显示底帧:
blend=all_expr='A(if(gte(T,10),1,T/10))+B(1-(if(gte(T,10),1,T/10)))'
显示1x1棋盘效应效果(有的显示A,有的显示B):
blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
从左到右揭开的效果:
blend=all_expr='if(gte(N*SW+X,W),A,B)'
从上到下揭开效果:
blend=all_expr='if(gte(Y-N*SH,0),A,B)'
从右下向左上揭开效果:
blend=all_expr='if(gte(TSH40+Y,H)gte((T40SW+X)W/H,W),A,B)'
显示当前和前一帧之间的差异:
tblend=all_mode=difference128
对输入视频应用边缘虚化
接受下面的参数:
luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap
接受选项的介绍见下:
luma_radius, lr
chroma_radius, cr
alpha_radius, ar
在输入平面,设置用于边缘模糊的像素半径表达式
这个半径必须是非负数,且必须在亮度和透明度(平面/通道上)大于min(w,h)/2,在色度平面上大于 min(cw,ch)/2
luma_radius默认为2,如果没有指定 is "2". chroma_radius和alpha_radius默认是根据luma_radius值的默认集
表达式中允许下面内容:
输入视频宽和高
输入色度图像的高和宽
水平和垂直采样的色彩浓度值,例如对于 "yuv422p"像素格式,hsub为2,vsub为1
luma_power, lp
chroma_power, cp
alpha_power, ap
指定应用于相应平面的边缘虚化滤镜次数。
默认luma_power为2,chroma_power和alpha_power的默认值是根据luma_power的对于默认值集
如果有1个值为0则禁止了效果
boxblur例子
对亮度、色度和透明都以2的半径进行边缘虚化(模糊):
boxblur=luma_radius=2:luma_power=1
boxblur=2:1
设置亮度编译模糊半径为2,而透明和色度模糊半径为0:
boxblur=2:1:cr=0:ar=0
设置亮度和色度模糊半径是视频维度的小部分(这里是1/10):
boxblur=luma_radius=min(h,w)/10:luma_power=1:chroma_radius=min(cw,ch)/10:chroma_power=1
可视化展示一些编码的信息
一些编码可以在图像的一端或者其他地方输出信息。例如一些MPEG编码器就可以通过设置flags2标志为export_mvs来输出运动矢量检测信息
滤镜接受下面选项:
设置运动矢量检测来可视化,
对mv选项有效的标志有:
基于P帧的前向预测
基于B帧的前向预测
基于B帧的后向预测
codecview例子
基于P帧和B帧,可视化多径向运动矢量检测
ffplay -flags2 +export_mvs input.mpg -vf codecview=mv=pf+bf+bb
colorbalance
对输入帧编辑主要的颜色(红、绿和蓝)强度
滤镜用于对输入帧调整阴影、中间调或高亮区域实现 red-cyan(红和蓝绿), green-magenta(绿和品红) 或blue-yellow(蓝和黄)的平衡。
一个正向的调整值对应于平衡主要颜色,一个负数值则对应于补色。
滤镜接受下面的选项:
调整red, green和blue的阴影(黑暗像素).
调整red, green和blue的中间调 (中亮度像素).
调整red, green和blue的高亮 (亮的像素).
所有值的取值范围为[-1.0, 1.0],默认为0(不调整)
colorbalance例子
添加影子的红色
colorbalance=rs=.3
RGB颜色键控
滤镜接受下面的选项:
设置被作为透明的颜色
similarity
设置对色键的相似性百分比(表示也作为色键的颜色范围)
0.01匹配表示只有色键,而1表示所有颜色(相当于直接是透明了)
混合百分比
0.0 表示像素完全透明或者完全不透明
更高的值导致半透明像素,对于更高的透明度相当于像素的颜色更接近于色键
colorkey例子
让所有的绿色像素透明
ffmpeg -i input.png -vf colorkey=green out.png
在绿屏上显示背景图片
ffmpeg -i background.png -i video.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.flv
colorlevels
使用层来调整输入视频
滤镜接受下面的选项:
调整输入红、绿、蓝和透明的黑(标准),允许范围为[-1.0,1.0],默认为0
调整输入红、绿、蓝和透明的白(标准),允许范围为[-1.0,1.0],默认为1.
输入水平被用来减轻突出(明亮的色调),变暗阴影(暗色调),改变亮和暗的平衡
调整输出红、绿、蓝和透明的黑(标准),允许范围为[-1.0,1.0],默认为0
调整输出红、绿、蓝和透明的白(标准),允许范围为[-1.0,1.0],默认为1.
用来手动调整输出电平范围
colorlevels例子
让视频输出暗色调
colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
增加对比度
colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
让视频更亮
colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
colorlevels=romin=0.5:gomin=0.5:bomin=0.5
colorchannelmixer
通过重新混合颜色通道调整视频输入帧
这个滤镜通过在不同颜色通道对同一个像素添加与其他通道相关的值进行颜色调整,例如为了修改红色,输出会是:
red=redrr + bluerb + greenrg + alphara
滤镜接受下面选项:
为调整输出的红色通道而进行参数设置(分别对应于根据红、绿、蓝和透明通道的权值),rr默认为1,其他默认为0
为调整输出的绿色通道而进行参数设置(分别对应于根据红、绿、蓝和透明通道的权值),gg默认为1,其他默认为0
为调整输出的蓝色通道而进行参数设置(分别对应于根据红、绿、蓝和透明通道的权值),bb默认为1,其他默认为0
为调整输出的透明通道而进行参数设置(分别对应于根据红、绿、蓝和透明通道的权值),aa默认为1,其他默认为0
各个值的运行范围为[-2.0, 2.0].
colorchannelmixer例子
转换源到灰度模式
colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
模拟墨色应用
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
colormatrix
颜色转换矩阵(常用于颜色标准转换)
滤镜接受下面的选项:
分别指定源和目标的颜色矩阵模式。两个值都必须要设置。
接受的值为:
‘smpte240m’
SMPTE-240M
例如要转换BT.601 到 SMPTE-240M需要:
colormatrix=bt601:smpte240m
复制输入源,而不改变的输出,常用于测试。
接受下面的参数:
输出视频的宽,默认为iw。这个表达式只有过滤器配置是进行一次求值
输出视频的高,默认为iw。这个表达式只有过滤器配置是进行一次求值
输入的水平坐标,默认为(in_w-out_w)/2,每帧都计算
输入的垂直坐标,默认为(in_h-out_h)/2,每帧都计算
keep_aspect
如果设置为1,则强制输出采样输入一样的长宽比例,默认为0
这里 out_w, out_h, x, y参数都可以是表达式,包含下述意义:
计算x和y,通常每帧计算
输入的宽和高
同于in_w和in_h
输出的(裁剪后的)宽和高
同于out_w和out_h
同于iw / ih
输入的样本点(像素)长宽比
输入显示样本点长宽比它同于 (iw / ih) * sar
水平和垂直颜色分量值。例如对于"yuv422p"的像素,hsub为2,vsub为1
输入帧的序数,从0计数
输入帧在文件中的偏移,如果未知则为NAN
秒为单位的输入帧时间戳,如果时间戳未知则为NAN
从(12,34)开始裁剪出一个100x100的图像
crop=100:100:12:34
使用命名选项,同上例一样:
crop=w=100:h=100:x=12:y=34
在输入中心裁剪出100x100:
crop=100:100
裁剪输入的2/3区域:
crop=2/3in_w:2/3in_h
裁剪输入中心区域:
crop=out_w=in_h
据边缘100裁剪出中间部分.
crop=in_w-100:in_h-100:100:100
据左右10像素,上下20像素的中间部分
crop=in_w-210:in_h-220
保留右下角(四分后的右下部分)
crop=in_w/2:in_h/2:in_w/2:in_h/2
按黄金分割裁剪
crop=in_w:1/PHI*in_w
应用抖动效果
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)sin(n/7)
取决于时间戳的不定照相效果:
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)sin(t10):(in_h-out_h)/2 +((in_h-out_h)/2)sin(t13)"
让x依赖于y
crop=in_w/2:in_h/2:y:10+10*sin(n/10)
cropdetect
自动检测裁剪尺寸(自动去除边缘的黑部)
它计算必要的剪切参数并通过日志系统输出推荐的参数。检测尺寸对应于输入视频的黑色区域
它接受下面的参数:
设置更高的黑色阀值。可以选择从0到所有(255,基于8位格式)。一组强度值更大的价值被认为是黑色。它默认为24。你也可以指定一个值在0.0和1.0之间,将按比例根据像素格式的位深计算
设置可行(分割出)的宽/高分割基数,默认为16。偏移量自动调整到视频的中心,对于平面维度采用2的倍数(4:2:2视频需要的),16已经可以满足大多数编码要求了
reset_count, reset
设置在处理多少帧后计数器重置以重新检测最佳裁剪区域。 默认为0.
它被用于通道标志混乱的视频。0表示不复位,并返回已播放视频的最大区域
利用curves(曲线)实现颜色调整
这个滤镜模拟Adobe Photoshop 和GIMP的curves工具。每个分量(红、绿和蓝)都由定义的N个节点相互作用成为光滑的曲线来调整输入到输出的关系。其中x轴是像素从输入帧获取的值,而y轴则是对应作为输出帧的值(从而实现输入到输出的映射)。
默认原始的曲线实为(0,0)和(1,1)连接的直线。这种“变化”关系就是输出=输入,意味着没有变化。
滤镜允许根据设置的两点或者更多点产生一个新的分量关系曲线(采用自然三次样条插值法依次连接各个点形成的平滑曲线)。所有的点坐标中x和y值范围在[0,1],超出定义域的点都被抛弃。
如果定义中没有关键点定义在x=0,则自动添加点(0,0),类似,如果没有关键点定义在x=1,则自动添加一个(1,1)点。
下面是滤镜允许的选项:
选定一个颜色预置(配置)。这个选项用在除了r,g,b选项的设置。在这种情况下,在后的选择作为实际预置。可用的预置有:
‘color_negative’
‘cross_process’
‘darker’
‘increase_contrast’
‘lighter’
‘linear_contrast’
‘medium_contrast’
‘negative’
‘strong_contrast’
‘vintage’
默认为none.
设置主要的关键点。这些关键点用于定义第二个通过映射。它们有时调用"luminance" 或者 "value"映射。它们可以被用于r, g, b 或者 all,因为它们更像一个后处理LUT。
对红色分量指定关键点
对绿色分量指定关键点
对蓝色分量指定关键点
设置针对所有分量的关键点(对复合信号,但不包括主要的——即对单独设置了的分量外的其他分量的处理), 在这种情况下,没有单独设置的分量都采用这里的设置
指定一个Photoshop曲线文件(.asv)来导入设置
curves例子
略有增加中间层次的蓝色:
curves=blue='0.5/0.58'
复古的效果:
curves=r='0/0.11 .42/.51 1/0.95':g='0.50/0.48':b='0/0.22 .49/.44 1/0.8'
在这里,我们为每个分量设置以下坐标:
(0;0.11) (0.42;0.51) (1;0.95)
(0;0) (0.50;0.48) (1;1)
(0;0.22) (0.49;0.44) (1;0.80)
前面的例子也可以通过预置实现:
curves=preset=vintage
或者更简单的:
curves=vintage
采用Photoshop预置并应用于绿色分量:
curves=psfile='MyCurvesPresets/purple.asv':green='0.45/0.53'
采用2D DCT来降噪(频域滤波)
滤镜不能实时应用。
滤镜接受下面的选项:
设置固定的噪声标准差(西格玛——sigma)
这里的sigma用于确定一个固定的阀值 3*sigma,每个DCT系数(绝对值)如果低于这个阀值则被丢弃(认为是噪声)
如果你需要更多高级的过滤特性,则需要expr
为每个块重叠的像素数。如果滤镜非常慢,你可以降低这个值,从而在较少的成本下有效过滤各种纹理
如果重叠值不允许处理整个输入宽度或高度,将显示一个警告,且在边界不会运用
默认为blocksize-1,它通常是一个最佳设置
设置系数表达式
对于每个DCT块的系数,表达式会计算得出一个乘数系数值
如果这里被设置,则sigma选项被忽略
系数的绝对值可以通过c变量访问到
按位宽设置块尺寸。1远远小于n(1&&n),这决定于处理块的宽度和高度
默认值是3(对应于8x8)和 4(对应于16x16),注意改变这个值将极大影响处理速度,同时一个更大的块大小并不一定有好的降噪效果
dctdnoiz例子
以sigma为4.5降噪
dctdnoiz=4.5
同上效果,但是采用了expr
dctdnoiz=e='gte(c, 4.5*3)'
块大小设置为16x16
dctdnoiz=15:n=4
定期重复的帧数丢弃
接受下面的选项:
指示要被丢弃的帧。设置为N表示如果一帧已经被重复N次就被丢弃,默认为5
设置检验重复的阀值。如果帧间变化量小于等于阀值则被认为是重复的。默认为1.1.
设置场景变化阀值,默认为15
设置x或y轴大小,其用于度量计算内存。更大的内存块可以更好的实现噪声抑制,但小的运动检测效果也越差。 必须是2的幂。,默认为32
标记一个输入是有预处理的,还有一个是原始源。它允许通过输入(经各种滤镜)预处理的源和原始源来更好的无损保持内容。设置为1时,第一个输入是经过预处理的输入流,第二个流是清洁源,其保留了原始的帧(信息)。 默认为0.
设置颜色通道是否也用这个矩阵计算。默认为1
删除部分隔行电视电影的内容产生的颤动
颤动可被引发,例如通过pullup滤镜,如果原始内容经pullup产生向上的爬动效应,dejudder可以引入动态帧频来消除。它可能会改变容器的帧频记录,除了这个改变,滤镜不会影响固定帧频视频的其他地方。
下面的选项被允许:
指定颤抖的重复窗口的长度
接受一个大于1的整数,常用值有:
常用于把24帧电影转换为30帧的NTSC信号
用于把25帧的PAL转换为30帧的NTSC
前俩个的混合
默认为‘4’.
通过一个简单的插值周围像素来抑制台标。仅需要在台标周围设置一个矩形遮盖就可以消除台标(有时会出现莫名的东西)
它接受下面的参数:
指定台标覆盖的x和y坐标,必须被设置
指定覆盖的宽和高,必须被设置(联合前面的x和y就定义了一个矩形覆盖区)
指定矩形的边缘模糊厚度(添加到w和h),默认为4
但设置为1时,一个绿色的矩形被简单填充到覆盖区。默认为0,这时采用的区域内像素填充计算方法为:矩形内,画在最外层的像素将(部分)内插替换值。下一个像素的值在每个方向用于计算矩形内的内插像素值。
delogo例子
采用默认方法,在坐标(0,0)采用100x77,模糊10的台标覆盖:
delogo=x=0:y=0:w=100:h=77:band=10
尝试在小的范围内去除/修复 水平/垂直变化。用于去除手持、或者旋转三脚架以及在移动车辆上拍摄的抖动(防抖效果)
接受下面的选项
定义一个处理区域,它限定了动态监测搜索范围。它定义了有限运动矢量的左上角位置以及宽度和高度。这些参数随着drawbox滤镜一样有相同的意义,可以用来界定想象的边界位置
对于同时运动(比如在车上拍摄),它十分有用,因为主题框架内混淆了本身有益的运动和无意的抖动,通过限定可以有效的区分,减少搜索难度。
如果这些参数中的一个或者所用被设置为-1则意味着在全帧应用。这使得后来选项设置不指定的边界框运动矢量搜索
默认为搜索整个帧
指定最大程度x和y方向运动范围,值范围为0-64像素,默认为16.
指定如何生成像素来填补空白的边缘。可用值:
‘blank, 0’
在空白的地方填零
‘original, 1’
填充原始图像(背景部分) locations
‘clamp, 2’
在空白地方挤压边缘值
‘mirror, 3’
在空白位置反映边缘
默认为 ‘mirror’.
指导用于运动检测的块尺寸,范围4-128像素,默认8.
指定块的对比度阈值。只有块超过指定的对比(黑暗和轻的像素)将被考虑。范围1-255,默认125 。
指定的搜索策略。可用值:
‘exhaustive, 0’
‘less, 1’
不详尽的搜索
默认‘exhaustive’.
如果设置,那么运动搜索的详细日志写入指定的文件
如果设置为1时,指定使用OpenCL功能,只在编译FFmpeg时配置了——enable-opencl可用。默认值是0。
detelecine
使用电视电影的逆操作。它需要一个预定的模板指定使用过的模式(必须同原始操作一样的参数)
滤镜接受下面的选项:
first_field
‘top, t’
‘bottom, b’
默认为top.
一串数字表示您想要应用的下拉模式。默认值是23。
start_frame
许多代表第一帧的位置对电视电影模式,这用于流被剪辑过。默认值是0。
在输入图像上画一个颜色区块。
它接受下面的参数:
指定区块的x和y坐标,可以是表达式,默认为0
指定表示区块宽和高的表达式,如果为0表示整个输入的宽和高,默认为0
指定填充颜色。语法详见颜色/color中的介绍。如果指定的值是invert,则区块边缘颜色采用视频该处颜色的反亮(这样可以衬托出区域)。
thickness, t
设置边缘宽度的表达式,默认为3.
各个表达式接受的值见下面的介绍。
对于 x, y, w 和 h 以及t是表达式时,可以包括下面的内容:
输入的显示长宽比,它即为 (w / h) * sar.
水平和垂直色度量化分量值,例如对于"yuv422p"像素格式,hsub为2,vsub为1
输入的宽和高
输入样本点的长宽比
区块的x和y坐标偏移
区块的宽和高
区块边缘厚度
这些x, y, w, h 和 t常(变)量都允许相互在表达式中引用,例如可以设置 y=x/dar 或 h=w/dar.
drawbox例子
在输入图像上画一个黑块
采用50%透明的红色画一个区块
drawbox=10:20:200:60:red@0.5
也可以写为
drawbox=x=10:y=20:w=200:h=60:color=red@0.5
采用pink填充一个区块
drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=max
画一个2像素红,有2.40:1的遮盖区域
drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t2:h=iw/2.4+t2:t=2:c=red
在输入图像上画上网格线(外框)
接受下面的参数:
指定区块的x和y坐标,可以是表达式,默认为0
指定表示区块宽和高的表达式,如果为0表示整个输入的宽和高采用最小的thickness划线,默认为0.
指定填充颜色。语法详见颜色/color中的介绍。如果指定的值为invert,则网格线采用视频该处的反亮颜色绘制。
thickness, t
设置边缘宽度的表达式,默认为1.
各个表达式接受的值见下面的介绍。
对于 x, y, w 和 h 以及t是表达式时,可以包括下面的内容:
输入的显示长宽比,它即为 (w / h) * sar.
水平和垂直色度量化分量值,例如对于"yuv422p"像素格式,hsub为2,vsub为1
输入的宽和高
输入样本点的长宽比
区块的x和y坐标偏移
区块的宽和高
区块边缘厚度
这些x, y, w, h 和 t常(变)量都允许相互在表达式中引用,例如可以设置 y=x/dar 或 h=w/dar.
drawgrid例子
以2像素宽度绘制一个100x100的网格,颜色是红色,透明度50%
drawgrid=width=100:height=100:thickness=2:color=red@0.5
在图像上绘制3x3网格,透明度50%
drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
在视频的上绘制文本或者描述于文件的文本块,使用了libfreetype库。
为了允许这个滤镜,在编译时需要配置--enable-libfreetype,为了允许默认的字体回调和font选项,还需要配置--enable-libfontconfig。为了允许text_shaping选项,还需要配置--enable-libfribidi
drawtext语法
它接受如下参数:
设置是否在文本下衬一个背景颜色,1为要,0为不要,默认为0
boxborderw
设置背景块边缘厚度(用于在背景块边缘用boxcolor再围绕画一圈),默认为0
设置用于绘制文本底衬的颜色。语法详见颜色/color中的介绍。
默认为"white".
使用bordercolor颜色绘制的文字边缘厚度,默认为0
bordercolor
绘制文本衬底的颜色。语法详见颜色/color中的介绍。
默认为"black".
设置文本扩展模式。可以为none, strftime (已弃用了) 或 normal (默认). 见后面文本扩展中的详细介绍
fix_bounds
如果为true,检查和修复文本坐标来避免剪切
设置文本颜色。语法详见颜色/color中的介绍。
默认为"black".
fontcolor_expr
用于计算获得动态fontcolor值的字符串表达式。默认为控,即不处理。当被设置时将把计算结果覆盖fontcolor选项
设置选用的字体,默认为Sans.
指定字体文件。信息中包括路径。这个参数在fontconfig被禁用时必须设置
这个选项已不存在,参考timeline系统(时间线)
设置绘制的文本透明度,值范围为0.0-1.0。而且还可以接受x和y的变量。请参阅fontcolor_expr
设置字体大小,默认为16 drawing text. The default value of fontsize is 16.
text_shaping
如果设置为1,则试图整理文本排列顺序(例如阿拉伯语是按从右到左排序),否则按给定的顺序从左到右排,默认为1
ft_load_flags
这些标志用于加载字体
这些标志对应于libfreetype支持的标志,并结合下面的值:
no_hinting
vertical_layout
force_autohint
crop_bitmap
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint
默认值为 "default".
要了解更多信息,请参考文档中libfreetype标志的FT_LOAD_* 部分。
shadowcolor
阴影颜色。语法详见颜色/color中的介绍。
默认为"black".
这里的x和y是字阴影对于字本体的偏移。可以是正数或者负数(决定了偏移方向),默认为0
start_number
起始帧数,对于n/frame_num变量。 默认为0
用于呈现的区域数量空间大小,默认为4
设置初始的时间码,以"hh:mm:ss[:;.]ff"格式。它被用于有或者没有text参数,此时timecode_rate必须被指定
timecode_rate, rate, r
设置时间码timecode的帧率(在timecode指定时)
要被绘制的文本。文本必须采用UTF-8编码字符。如果没有指定textfile则这个选项必须指定
一个文本文件,其内容将被绘制。文本必须是一个UTF-8文本序列
如果没有指定text选项,则必须设定。
如果同时设定了text和textfile将引发一个错误
如果设置为1,textfile将在每帧前加载。一定要自动更新它,或者它可能是会被读取的或者失败
指定文本绘制区域的坐标偏移。是相对于图像顶/左边的值
默认均为"0".
下面是接受的常量和函数
对于x和y是表达式时,它们接受下面的常量和函数:
输入显示接受的长宽比,它等于 (w / h) * sar
水平和垂直色度分量值。例如对于"yuv422p"格式像素,hsub为2,vsub为1
line_h, lh
main_h, h, H
main_w, w, W
max_glyph_a, ascent
从基线到最高/上字形轮廓高点(所有内容的最高点)的最大距离。必须是一个正值,因为网格与Y轴方向关系使然
max_glyph_d, descent
从基线到最低/下字形轮廓高点(所有内容的最高点)的最大距离。必须是一个负值,因为网格与Y轴方向关系使然
max_glyph_h
最大字形高度,限定了所有单个字的高度,如果设置值小于实际值,则输出可能覆盖到其他行上
max_glyph_w
最大字形宽度,限定了所单个字显示的宽度,如果设置值小于实际值,则发生字重叠
输入帧序数,从0计数
rand(min, max)
返回一个min和max间的随机数
输入样本点的长宽比
以秒计的时间戳。如果无效则为NAN
text_h, th
渲染文本的高
text_w, tw
渲染文本的宽
文本的x和y坐标。
所有参数都允许x和y被引用,例如y=x/dar
如果expansion设置为strftime,则滤镜会接受strftime()序列提供的文本并进行相应扩展。检查strftime()的文档。这个特性现在是弃用的。
如果expansion设置为none,则文本都是直接打印文本(即直接以文本内容不扩展进行输出)
如果expansion设置为normal(它是默认值),将应用下面的扩展规则。
序列形式${...}的内容将被扩展。大括号之间的文本是一个函数的名字,可能紧随其后是一些用:隔开的参数。如果包含特殊字符或分隔符(这里是:或者}),它们应该被转义。
注意对于在作为滤镜参数的text选项值,或者滤镜链图中的参数(多个滤镜连接时)以及是在shell环境中使用,则可能需要4层转义。使用文本文件可以避免这些问题(减少转义的使用)。
下面是有效的函数(功能):
计算结果的表达式
它必须有一个参数来计算,接受计算x和y相同的常数和函数。注意并不是所有的常数都适合,例如text_w和text_h在此时还是一个未定义值(因为这两个值依赖于这里计算结果)
expr_int_format, eif
把表达式求值和输出格式化为整数
第一个参数是用于计算的表达式,就像是expr函数(包括了变量/常量等),第二个参数指定输出格式,允许‘x’, ‘X’, ‘d’ 和 ‘u’,其意义同于printf函数(C语言)中的意义。第三个参数是可选的,用来设置格式化为固定位数,左边可以用0来填补。
设置滤镜运行时间,是UTC时间。它接受一个strftime()格式字符串参数
滤镜运行的本地时间,它以本地时区表示的时间。它接受一个strftime()格式字符串参数
帧的元数据。它必须有一个指定元数据键的参数
n, frame_num
帧序数,从0开始计数
一个字符描述当前图片类型
当前帧的时间戳。它可以有2个参数
第一个参数是时间戳格式,默认为flt是秒格式,其有微秒级精度;hms则代表[-]HH:MM:SS.mmm格式时间戳表示,其也有毫秒精度。
第二个参数是添加到时间戳的偏移量
drawtext例子
以FreeSerif字体绘制 "Test Text" ,其他可选参数均为默认值
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
以FreeSerif字体,24大小在x=100 和y=50位置 绘制 ’Test Text’ ,字体采用黄色且还有红色边缘,字体和衬底军为20%透明度
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':
x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
注意如果不是参数列表则不一定采用双引号来标识范围
把字显示在视频中间(计算位置)
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h-line_h)/2"
在视频帧的最后一排从右向左滑动显示一个文本行。假设文件LONG_LINE仅包含一行且没有换行。
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
从下向上显示文本行内容
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
在视频中间以绿色绘制单独的字符"g"。文本基线放置在视频半高位置
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
每3秒显示文本1秒
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t,3),1):text='blink'"
采用fontconfig来设置字体。注意冒号需要转义
drawtext='fontfile=Linux Libertine O-40:style=Semibold:text=FFmpeg'
输出实时编码日期(参考strftime(3)):
drawtext='fontfile=FreeSans.ttf:text=%{localtime:%a %b %d %Y}'
以淡入淡出显示文本 (显示/消失)
DS=1.0 # display start
DE=10.0 # display end
FID=1.5 # fade in duration
FOD=5 # fade out duration
ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\: clip(255(1between(t, $DS + $FID, $DE - $FOD) + ((t - $DS)/$FID)between(t, $DS, $DS + $FID) + (-(t - $DE)/$FOD)between(t, $DE - $FOD, $DE) ), 0, 255) \: x\: 2 }"
关于libfreetype, 参考
对于fontconfig,参考.
对于libfribidi, 参考.
edgedetect
检测边缘。滤镜采用精明边缘检测(Canny Edge Detection)算法
接受下面的选项:
设置检测算法边缘探测的低和高的阀值。
high阀值选择强有力的边缘像素,然后通过8向邻接检测软弱到low阀值,从而标注出边缘
low和high的值范围为[0,1],且low&=higt
默认low为20/255, high为50/255.
定义绘制(边缘)模式
绘制一个 white/gray间隔线在黑背景上
‘colormix’
混合颜色创建一个油漆/卡通效果
默认为 wires.
edgedetect例子
采用了自定义滞后阀值的标准边缘检测
edgedetect=low=0.1:high=0.4
绘画效果没有阈值(因为high设置为0,low必须小于等于high则只能为0了)
edgedetect=mode=colormix:high=0
设置亮度、对比度、饱和度和近似伽马(gamma)调整
滤镜支持下面选项:
设置contrast表达式,值必须是一个-2.0-2.0间的浮点数,默认为0
brightness
设置brightness表达式.值必须是一个-1.0-1.0间的浮点数,默认为0
saturation
设置saturation表达式. 值必须是一个0-3.0间的浮点数,默认为1
设置gamma表达式 ,值必须是一个0.1-10.0间的浮点数,默认为1
设置gamma表达式,对红色. 值必须是一个0.1-10.0间的浮点数,默认为1
设置gamma表达式,对绿色. 值必须是一个0.1-10.0间的浮点数,默认为1
设置gamma表达式,对蓝色. 值必须是一个0.1-10.0间的浮点数,默认为1
gamma_weight
设置gamma权重表达式.它可以用来减少高伽马值在明亮的图像区域影响,例如只是普通的白色放大,而其它保持不变。值必须是一个在0.0到1.0范围的浮点数。值为0.0时把伽马校正效果最强,为1.0没有效果。默认设置是“1”。
设置brightness, contrast, saturation 和 gamma是表达式时的计算模式S
它接受下面值:
仅在滤镜初始化或者命令被处理时计算
默认为‘init’.
下面是表达式中接受的参数:
帧序数,从0计数
当前包在文件中的偏移,如果没有定义则为NAN
输入视频帧率,如果无效则为NAN
以秒计的时间戳,如果输入时间戳无效则为NAN
滤镜也接受下面的命令:
设置contrast表达式
brightness
设置brightness表达式
saturation
设置saturation表达式
设置gamma表达式
设置gamma_r表达式
设置gamma_g表达式
设置gamma_b表达式
gamma_weight
设置gamma_weight表达式
命令接受对应选项中相同的语法
如果指定的表达式是无效的,则保持当前值
extractplanes
从输入流分离单独的颜色通道成为灰度视频流
滤镜接受下面选项:
设置要提取的通道
接受下面的值(标识通道):
选择无效的值会产生错误。这也意味着同时你只能选择r, g, b和y,或者y, u, v
extractplanes例子
提取亮度和u和v颜色分量到3个灰度输出。
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
应用多色调分色印效果,使用了ELBG(增强型LBG)算法。(构建颜色模板)
对每个输入图像,滤镜会对于给定编码长度计算最优的从输入到输出的的映射,它们对应于不同的输出颜色的数量
滤镜接受下面的选项:
codebook_length, l
设置编码长度,值必须是正整数,代表不同的输出颜色数量,默认为256
nb_steps, n
设置计算最优映射的最大迭代数。值越高,结果越好,但越耗时。默认为1
设置一个随机种子,必须是0-UINT32_MAX间的整数,如果不指定,或者设置为-1 ,则会自动选择一个好的随机值
应用淡入/淡出
它接受下面参数:
指定类型是in代表淡入,out代表淡出,默认为in
start_frame, s
指定应用效果的开始时间,默认为0.
nb_frames, n
应用效果的最后一帧序数。对于淡入,在此帧后将以本身的视频输出,对于淡出此帧后将以设定的颜色输出,默认25.
如果设置为1,则只在透明通道实施效果(如果只存在一个输入),默认为0
start_time, st
指定按秒的开始时间戳来应用效果。如果start_frame和start_time都被设置,则效果会在更后的时间开始,默认为0
duration, d
按秒的效果持续时间。对于淡入,在此时后将以本身的视频输出,对于淡出此时后将以设定的颜色输出。如果duration和nb_frames同时被设置,将采用duration值。默认为0(此时采用nb_frames作为默认)
设置淡化后(淡入前)的颜色,默认为"black".
30帧开始淡入
fade=in:0:30
fade=t=in:s=0:n=30
在200帧视频中从最后45帧淡出
fade=out:155:45
fade=type=out:start_frame=155:nb_frames=45
对1000帧的视频25帧淡入,最后25帧淡出:
fade=in:0:25, fade=out:975:25
让前5帧为黄色,然后在5-24淡入:
fade=in:5:20:color=yellow
仅在透明通道的第25开始淡入
fade=in:0:25:alpha=1
设置5.5秒的黑场,然后开始0.5秒的淡入:
fade=t=in:st=5.5:d=0.5
在频域内应用任意表达式于样品
调整亮度dc值(增益),范围0-1000,默认为0
调整色度第1分量dc值(增益),范围0-1000,默认为0
调整色度第2分量dc值(增益),范围0-1000,默认为0
设置对于亮度的频域权重表达式
设置对于色度第1分量的频域权重表达式
设置对于色度第2分量的频域权重表达式
滤镜接受下面的变量:
对应当前样本点的坐标
当前图像的宽和高
fftfilt例子
fftfilt=dc_Y=128:weight_Y='squish(1-(Y+X)/100)'
fftfilt=dc_Y=0:weight_Y='squish((Y+X)/100-1)'
fftfilt=dc_Y=0:weight_Y='1+squish(1-(Y+X)/100)'
使用步算法从隔行图像中提取单个场来避免浪费CPU时间。标记为逐行输出帧。
滤镜接受下面选项:
指定是top(或者0)还是bottom(或者1)类型的场
fieldmatch
场匹配用于反转电视(隔行)电影。它为了从电视流中建立起逐帧电影,需要过滤保留部分重复帧,为了更好的对压缩转换电视fieldmatch滤镜需要跟随一个decimate滤镜之类的抽取滤镜。
为了更好的分离和抽取,需要在两个滤镜间插入一个反交错滤镜。如果源是混合了电视电影和现实的内容,则单独的fieldmatch滤镜不足以分离出交错内容,所以需要一个诸如yadif之类的反交错滤镜来进一步标记剩余的交错内容,以便于后面的抽取。
除了各种配置选项,fieldmatch可以通过ppsrc可选项启用第二个流。如果被允许,将基于第二个流进行帧的重建。它允许第一个流作为预处理来帮助各种滤镜算法实现无损输出(减少能正确匹配)。通常一个field-aware降噪,或者亮度/对比度调整可以实现这一的帮助。
注意滤镜使用如TIVTC/TFM (AviSynth项目)和 VIVTC/VFM(VapourSynth项目)的相同算法。fieldmatch有一点克隆TFM的意味,除了一些行为和选项不同外,语义和用法很接近。
当前decimate滤镜仅工作在固定帧率视频。在输入视频是混合了电视电影和逐场内容且是变帧率时不能使用fieldmatch和decimate
滤镜接受下面的选项:
指定输入流的场序。可用值:
自动探测 (采用FFmpeg内部校验值).
设置为下场优先
设置为上场优先
注意不要太信任流的宣称值(即需要尝试探测)
默认为auto.
设置匹配模式或采用的策略. pc模式是最安全的,不会产生抖动,但其对于错误编辑或者混合会被输出,而实际有更好的匹配结果(即检测不出最好匹配结果)。在其他处理中pcn_ub模式最有可能出现创建抖动的危险,但如果存在最好匹配则一定可以检测出。其他模式介于二者之间。
更多关于p/c/n/u/b 的有效性见 p/c/n/u/b 意义部分。
2路匹配 (p/c)
2路匹配,并尝试第3路 (p/c + n)
2路匹配,并尝试第3路 (同`order`)对应 (p/c + u)
‘pc_n_ub’
2路匹配,并尝试第3路, 并可尝试第4/第5匹配(p/c + n + u/b)
3路匹配 (p/c/n)
‘pcn_ub’
3路匹配,并尝试第4/第5匹配 (p/c/n + u/b)
括号中的模式匹配是假设order=tff (场序是自动或者上场优先).
pc模式最快,而pcn_ub则最慢
默认为pc_n.
标记主要输入作为预处理输入,而且允许第二个输入流作为干净源。参考滤镜介绍以了解更多详细信息。它类似于VFM/TFM 的clip2特性.
默认为0 (表示禁止).
设置场序,它建议设置为同order,除非你尝试的结果是失败。在某些情况下改变设置可以产生很大的匹配性能影响,可用值有:
自动 (同于`order`中的介绍).
‘bottom’
默认为auto.
设置色度信号是否包含在比较判断中。大多数情况下建议不专门设置。仅当影片中包含坏的色度问题如有大片的彩虹或者其他工件时才该设置为0。设置为0也可以加快处理但会造成精度的降低
这些定义用来明确一个范围,以除去(忽略)字幕、台标或者其他可能干扰匹配的东西。其中y0设置扫描的开始行,y1设置扫描的结束行(包括y0和y1,之外的部分被忽略),如果y0和y1设置为相同的值将禁用这个特性。y0和y1都默认为0
设置在亮度上场景变化最大百分比数, 好的值范围为[8.0, 14.0],场景变化检测只是在combmatch=sc有效. 可用值范围[0.0, 100.0].
默认为12.0.
当设置为非none, fieldmatch会在更多的情况中梳理出合适的结果。有效值:
梳理多种可能但没有最优结果
在采用了场景改变检测基础上梳理结果
全时梳理结果
强制fieldmatch对某些指标匹配并输出。这个设置在TFM/VFM中被称为micout,有效值有:
强制p/c/n/u/b.
用于控制梳理检测的阀值。它实质上控制“强烈”或“可见”的交错必须被检测到。大的值意味着必须有更多差异才能被检验到,小的值则允许很少的交错(量)就会被检测到。有效值为-1(像素级的检测)到255(没有像素会被作为交错检验出来),这基本上是一个像素值的差异,好的范围是[8, 12].
决定是否把色度检测包含在匹配模式中。如果源中存在色度问题(彩虹)则必需要禁用。实际上设置chroma=0通常就足够可靠了,除非你确实在源中包含了色度需要被检测
设置检测窗的x和y轴尺寸。它协同combpel领域像素一起来声明梳理框架。参考combpel介绍了解更多信息。可能值是2的幂数,从4到512。
在梳理检测窗中梳理像素的数量。虽然cthresh控制了必须是“可见”的才被梳理(即精度),而这个参数控制了在局部(检测窗)中有“多少”则被检出,最小为0,最大为blocky x blockx(它们定义了整个检测窗)。它类似于TFM/VFM中的MI
p/c/n/u/b的意义
我们假定有下如下的电视电影流:
Top fields:
Bottom fields:
对应的数字对应需处理的场。在这里前2帧是需要的,3和4则被梳理,等等
当fieldmatch被配置运行在field=bottom时,输入流被如下传输:
&-- 匹配参考
作为一个场匹配的结果,我们可以看到一些帧被复制了。为了完整实现电视电影的逆转换,你需要依靠后续的滤镜去除掉重复的帧。参考decimate滤镜。
如果相同的处理但配置为field=top,结果会:
&-- 匹配参考
在这些例子里,我们可以看出p、c和n的意义。基本上,它们指出参考帧的位置(关系)
p,匹配于前一帧
c,匹配于当前帧
n,匹配于下一帧
这里的u和b是在匹配帧基础上的位级描述。在下面的例子中,我们假定当前匹配了2个帧(Top:2 ,bottom:2),根据匹配,一个x是在每个匹配场景的上方和下方:
对于field=bottom的匹配
对于field=top的匹配
fieldmatch例子
简单的IVTC 有上场优先的视频电影流:
fieldmatch=order=tff:combmatch=none, decimate
高级IVTC,由后续yadif继续处理:
fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
fieldorder
改变输入的场序
接受下面的参数:
输出场序。有效值有ttf对应的上场优先和bff对应的下场优先
转换是将图像内容向上或者向下一行,并填充其余部分以符合图像内容。该方法适合大多数广播电视的场序转换
如果输入视频没有标记为交错,或者已经标记为所需场序,则滤镜不会改变输入视频
它常用于转换到PAL DV格式,它是下场优先的。
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
缓冲输入并在需要时送出
它常用于libavfilter的自动插入(保证一些连接有效)
它没有参数
找到一个矩形对象
它接受下面的选项:
对象图像的文件路径,需要是gray8.
探测阀,默认0.5.
最小的贴图, 默认为3.
xmin, ymin, xmax, ymax
指定矩形对象检测的范围(xmin,ymin)(xmax,ymax)定义的一个矩形中
find_rect例子
对视频生产一个调色板视频
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
cover_rect
覆盖一个矩形对象
它接受下面的选项:
用作覆盖的图像路径,需要是yuv420.
设置覆盖模式
接受下面的值:
同周边插值来覆盖
cover_rect例子
对视频生产一个调色板视频
ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
转换输入视频为指定的像素格式。libavfilter尝试为下一个滤镜输入选择一个合适的输出(而自动采用)。
它接受下面的参数:
一个用|分隔的像素格式名列表,例如"pix_fmts=yuv420p|monow|rgb24".
format例子
转换输出为yuv420p格式
format=pix_fmts=yuv420p
转换输入到列表的任何格式之一
format=pix_fmts=yuv420p|yuv444p|yuv410p
通过复制或者丢弃帧来把帧率调整为一个近似固定值
它接受下面的参数:
目标帧率,默认25
对0舍入(去小数),绝对值最小
从0开始的园
向负无穷舍入(去除小数)
向正无穷舍入(见小数加1)
舍入到近似值(命名的频率)
默认为near.
start_time
假设第一个PTS是一个按秒的给定值。它允许填补/去除流的开始。默认没有需要填补/去除。例如设置为0,将会在视频流后于音频流时在前面添加黑帧,否则去除早于音频流的负帧。
另外,选项可以指定为一个平面字符串形式:fps[:round]
参考setpts滤镜
输出25帧频
fps=fps=25
输出24帧频,使用了帧频缩写名和舍入方法为最接近
fps=fps=film:round=near
包两个不同的视频流到立体视频,设置适当的元数据支持的编解码器。两个视角视频需要有相同的尺寸与帧频以及以短的视频为停止时间。注意你可能需要预先通过scale和fps调整。
接受下面的参数:
设置包装格式,支持:
一个视图左另一个在右(默认).
一个视图在上,一个视图在下
视图按线交错(按行)
视图按列交错
视图都暂时交错
一些例子:
把左/右视图以 frameseq模式打包成立体视频
ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT
把视图以 sbs模式交错,还进行了放缩预处理
ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
每N帧选择1帧
它接受下面选项:
设置间隔的N值。必须大于0,默认为1(这样相当于不处理,完全输出)
对视频采用frei0r效果
编译配置参数--enable-frei0r
接受下面的参数:
filter_name
设置加载的frei0r效果名。如果环境变量FREI0R_PATH被定义,则将在其所指目录搜索。FREI0R_PATH是有,分隔的多个路径。通常frei0r的搜索路径是: HOME/.frei0r-1/lib/, /usr/local/lib/frei0r-1/, /usr/lib/frei0r-1/.
filter_params
一个由’|’分隔的参数列表来传递给frei0r效果
一个frei0r效果的参数是布尔值(为y或者n)、双精度数、颜色值(以R/G/B形式描述,其中R、G和B是0.0-1.0间的浮点数)或者在颜色/color中定义的颜色名、位置量(以X/Y形式描述,X和Y均是浮点数)和/或 字符串
参数的数量和类型要根据加载的效果,如果一个效果参数没有指定则选用默认设置
frei0r例子
采用distort0r效果,参数有2个值。
frei0r=filter_name=distort0r:filter_params=0.5|0.01
应用colordistance效果,有一个颜色值作为参数(下面3个形式等效)
frei0r=colordistance:0.2/0.3/0.4
frei0r=colordistance:violet
frei0r=colordistance:0x112233
应用perspective效果,指定了图像的左上和右上位置
frei0r=perspective:0.2/0.2|0.8/0.2
关于frei0r的更多信息参考
应用快速简单的后处理,这是spp滤镜的快速版本
它分离 (I)DCT为水平/垂直 来传递,不同于简单的 post滤镜,其中每个块执行一次,而不是每个像素,则允许更快的速度。
滤镜接受下面的选项:
设置品质水平,它定义了平均水平数,接受4-5的整数,默认为4
强制包含一个不断量化参数,它接受0-63间的整数,如果不设定,滤镜会使用视频流的QP(如果有效)
设置滤镜强度。它接受-15-30间的整数。越低表示更多细节但需要更多工作,高的值则图像平滑(模糊)也更快,默认值为0——PSNR最佳
use_bframe_qp
为1则允许从B帧使用QP。使用它在大的QP时可能导致B帧闪烁。默认为0(不允许)
滤镜接受下面的选项:
lum_expr, lum
设置亮度表达式
cb_expr, cb
设置色度分量中蓝色表达式
cr_expr, cr
设置色度分量中红色表达式
alpha_expr, a
设置透明通道表达式Set the alpha expression.
red_expr, r
设置红色表达式
green_expr, g
设置绿色表达式
blue_expr, b
设置蓝色表达式
根据指定的选项来确定颜色空间。如果lum_expr, cb_expr, 或者cr_expr中的一个被定义,则滤镜自动选择YCbCr颜色空间,如果red_expr, green_expr,或 blue_expr中有一个被定义则选择RGB颜色空间
如果其中一个颜色分量选项没有被定义,则它等于前一个谷底值。如果alpha_expr没有被定义则认为是不透明的。如果没有任何颜色分量被定义,它将只计算亮度表达式
表达式接受下面变量和函数:
帧序数,从0开始计数 from 0.
当前样本坐标
图像宽和高
依赖当前滤镜的放缩宽和高。它根据当前像素亮度数和当前平面的比例。例如对于YUV4:2:0给我饿死,这个值是1,1对应于亮度还有0.5,0.5 的颜色分量
按秒当前帧时间
返回当前帧平面(x,y)点的像素值
返回当前帧平面(x,y)点的像素亮度值
返回当前帧平面(x,y)点的像素色度分量差蓝色值,0表示没有该分量
返回当前帧平面(x,y)点的像素色度分量差红色值,0表示没有该分量
返回当前帧平面(x,y)点的像素红/绿/蓝值,为0表示没有该颜色
alpha(x, y)
返回当前帧平面(x,y)点的像素透明通道值,为0表示没有该值
对于函数,如果x和y超出了范围,则值自动由影片边缘值代替
水平翻转图像
geq=p(W-X,Y)
生成一个二维的正弦波,角π/ 3和100像素的波长:
geq=128 + 100sin(2(PI/100)(cos(PI/3)(X-50T) + sin(PI/3)Y)):128:128
生成一个花哨的神秘的光:
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N0.07)W/2-W/2,Y-sin(N0.09)H/2-H/2)^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)/Hb(X,Y)'
创建一个径向渐变,是相同的大小作为输入(也见vignette滤镜):
geq=lum=255gauss((X/W-0.5)3)gauss((Y/H-0.5)3)/gauss(0)/gauss(0),format=gray
创建一个线性渐变使用作为另一个滤镜的蒙版,然后用叠加组成。在本例中,视频会从底部到顶部的y轴定义的线性梯度逐渐变得更加模糊:
ffmpeg -i input.mp4 -filter_complex "geq=lum=255*(Y/H),format=gray[grad];[0:v]boxblur=4[blur];[blur][grad]alphamerge[alpha];[0:v][alpha]overlay" output.mp4
解决条带效果,这是由于对于8位颜色深度有时会被就近截断成平面(化),通过插入渐变来柔化它们
这个滤镜仅用于回放。在有损压缩前也不要使用它,因为压缩本身就会损伤细节(渐变)而成为条带
它接受下面的参数:
滤镜对任何像素最大的改变值。这也是检测(颜色)平坦区域的阀值。取值范围是.51 至64,默认为1.2.超出范围的值会被被裁减为有效值
指定合适的修正梯度。一个大的radius值会产生更平滑的过渡,也防止滤镜修改处理区域附近的像素。接受的范围为8-32,默认为16,超出范围的值会被裁减以符合
另外,选项可以采用平面字符串的形式指定: strength[:radius]
gradfun例子
以3.5的strength和8的radius值应用滤镜:
gradfun=3.5:8
指定radius,省略strength (会采用默认值为1.2):
gradfun=radius=8
对视频流采用Hald CLUT
第一个输入是要处理的视频,第二个则是Hald CLUT,这个Hald CLUT输入可以是一张简单的图片或者复合视频信号
滤镜接受下述选项:
强制以最短输入来总作为整个数出。默认为0
repeatlast
在结束后继续以CLUT处理。值为0则禁止。默认为1.
haldclut也有类似lut3d相同的选项(两个滤镜共享相同的内部结构)。
关于Hald CLUT可以通过Eskil Steenberg(Hald CLUT的作者)的网站,在
haldclut工作流例子
Hald CLUT视频流
生成一个Hald CLUT的流 ,流改变各种效果。
ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2PIt:s=sin(2PIt)+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流上
带预览的Hald CLUT
一个Hald CLUT支持作为有多层(LevelLevelLevel)像素的多层(LevelLevelLevel)图像。 对于一个给定的Hald CLUT,FFmpeg尽可能在图像的左上开始选择最大可能, 将选择尽可能最大的广场在图片的左上角开始。剩下的填充像素(底部或右)将被忽略。这个区域可以用来添加一个预览Hald CLUT。.
通常,下面会利用haldclutsrc生成一个支持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"
水平翻转输入视频
例如利用fmpeg水平翻转输入视频:
ffmpeg -i in.avi -vf "hflip" out.avi
这个过滤器适用于每帧的基础上的全局颜色直方图均衡化
它被用于产生压缩了像素强度的正确视频。滤镜在强度范围内重新分配像素强度分布。它可被视为“自动调整对比度滤镜"。滤镜只适用于纠正退化或者较差质量的视频采集
接受下面的选项:
确定的数量均衡。随着参数的降低,像素强度的分布在输入帧中越来越多。值为浮点数,范围为[0,1],默认0.200.
设置在生成的输出中最大可能强度。strength设置表面了期望,而intensity的设置强调了限制,从而避免了出现错误。值为浮点数,范围为[0,1],默认0.210.
antibanding
设置antibanding级别。如果启用,滤镜将通过随机小批量改变输出像素的亮度直方图避免产生条带。允许的值有none, weak 或strong,默认为none 。
对输入视频计算并绘制一个颜色分布直方图
它计算的直方图代表了各种颜色分量在图像中的分布情况。
滤镜接受下面的选项:
设置直方图模式.
有下面的可能值:
‘levels’
显示图像颜色分量的标准直方图。它显示每个颜色分量图形。依据输入视频可以显示当前帧的Y, U, V, A或者R, G, B分量图形。其下是每个图像颜色分量的规模计
在二维图(这被称为矢量监视器)中显示色度通道值 (U / V颜色位置) 。像素矢量表示亮度,每个点对应代表输入中的各个像素(都有其色度分量值)。V分量为水平(X)坐标,最左表示V=0,最右为V=255,U分量为垂直(Y)坐标,最上标识U=0,最下U=255.
图中白色像素的位置对应一个像素的色度值输入。因此该图可以用来了解色相(颜色味道)和饱和度(颜色)的情况其反映了原始图像的主导色调。颜色的色调变化围绕着一个区域(监视器面),在区域的中心饱和度是0,则意味着对应的像素没有颜色(白色,只有亮度值)。如果图像中一个特定的颜色的数量增加(而其他颜色不变),即饱和度的增加,则在矢量监视器中显示为整体偏向边缘。
‘color2’
类似color以矢量监视器显示,不过增加了实际色度值的显示。
‘waveform’
每行(row)/列(colum)颜色分量图形。在row模式,图形左边表示颜色分量为0,右边为255,在column默认,顶部表示颜色分量值为0,底部为255
默认为levels模式
level_height
在levels模式中设置图形高,默认200,允许[50, 2048].
scale_height
在levels设置颜色放缩高,默认12,允许[0, 40].
对waveform模式设置步长。小的值用于更多了解在相同亮度下颜色分布情况,默认10,允许 [1, 255] 。
waveform_mode
对waveform设置row或者column,默认row
waveform_mirror
对waveform设置镜像模式,0表示不镜像(默认),1表示镜像。在镜像模式中,对row高值在左边,对column高值在上面
display_mode
设置waveform和levels的显示模式,它接受:
‘parade’
依次排列各种颜色图,waveform的row是从左到右,column是从上到下。levels中是从上到下。
waveform中应用这种模式可以容易的通过比较顶部与底部轮廓波形来区分高光和阴暗的颜色图像,因为白、灰和黑的特点是完全相等的红、绿和蓝的混合。中性的图片区域应该是这三种波形的大致相等的宽/高度。如果不是,则可以通过水平调整这三个波形来很容易的实现校正。
‘overlay’
除了表示颜色的图形组件直接叠加在一起外,与parade模式展示的信息相同
在waveform中这样的显示模式更易于发现颜色的相对差异或相似。因为重叠区域的分量应该是相同的,如中性的白色、灰和黑
默认为parade
levels_mode
对levels设置模式,可以是linear或logarithmic,默认linear
histogram例子
计算并绘制柱状图:
ffplay -i input -vf histogram
这是一个高精度/质量的3D降噪滤镜。它的目的是减少图像噪声,产生平滑的图像和让静止图像保存原样。它可以提高压缩率。
接受下面可选参数:
luma_spatial
非负浮点数来指明亮度强度。默认为4.0
chroma_spatial
非负浮点数来指明亮色强度,默认为3.0*luma_spatial/4.0.
一个浮点数指明亮度临时强度。默认为6.0*luma_spatial/4.0
chroma_tmp
一个浮点数指明色度临时强度。默认为luma_tmp*chroma_spatial/luma_spatial
应用一个高质量的像素放大滤镜。这个滤镜最初由 Maxim Stepin创建。
它接受下面的选项:
设置缩放尺度。2 对应hq2x, 3 对应hq3x,4对应hq4x,默认为3。
编辑或者设定颜色的饱和度
接受下面的参数:
指定色度角的度数,接受表达式,默认为0
指定饱和度,范围[-10,10],接受表达式,默认为"1".
指定色调角的弧度,接受表达式,默认为"0".
指定亮度,范围[-10,10]。接受表达式,默认为"0".
h和H互斥,不能同时设定
其中b, h, H和s表达式允许下面内容:
从0开始的帧序数
按时间基单位的输入帧时间戳
输入视频帧率,如果无效则为NAN
按秒的时间码,如果无效则为NAN
输入视频时基
设置色度角90度,饱和度为1:
hue=h=90:s=1
同上,但以色度角弧度值进行设置:
hue=H=PI/2:s=1
旋转色相,以及让饱和度在0-2间变化:
hue="H=2PIt: s=sin(2PIt)+1"
从0开始应用一个3秒饱和度淡入效果:
hue="s=min(t/3,1)"
一般淡入表达式可以为:
hue="s=min(0, max((t-START)/DURATION, 1))"
从5秒开始的饱和度淡出:
hue="s=max(0, min(1, (8-t)/3))"
一般淡出表达式为:
hue="s=max(0, min(1, (START+DURATION-t)/DURATION))"
滤镜还支持下面的命令:
它们分别编辑色度 和/或 饱和度 和/或 亮度。命令接受对应选项一样的语法。
如果指定的表达式是无效的,则采用当前值(不变化)
检测视频交错类型。
这个滤镜试图检测如果输入帧交错,逐行,顶部或底部优先(对交错视频)。它还将尝试检测相邻帧之间的字段重复(电视电影的标志)。
单帧检测时只考虑当前与相邻帧每一帧类型。多帧检测结合的之前的帧类型历史。
滤镜输出日志有下面的元数据值:
single.current_frame
对当前帧单帧检测结果,有如下值:“tff” (上场优先), “bff” (下场优先), “progressive”(逐行), 和“undetermined”(不能检测出)
single.tff
累积的以单帧检测检测出的上场优先数
multiple.tff
累积的以多帧检测检测出的上场优先数
single.bff
累积的以单帧检测检测出的下场优先数
multiple.current_frame
对当前帧多帧检测结果,有如下值:“tff” (上场优先), “bff” (下场优先), “progressive”(逐行), 和“undetermined”(不能检测出,不定)
multiple.bff
累积的以多帧检测检测出的下场优先数
single.progressive
累积的以单帧检测检测出的逐行帧数
multiple.progressive
累积的以多帧检测检测出的逐行帧数
single.undetermined
累积的以单帧检测检测出的不定帧数
multiple.undetermined
累积的以多帧检测检测出的不定帧数
repeated.current_frame
指示当前帧是从最近帧的重复情况,为“neither”(表示不是重复), “top”,或者 “bottom”.
repeated.neither
累积的neither重复情况.
repeated.top
累积的top重复情况
repeated.bottom
累积的bottom重复情况
滤镜接受下面选项:
intl_thres
设置交错阀值
prog_thres
设置逐行阀值
repeat_thres
重复检测阀值
设定指定的帧数之后,一个给定的数据帧的贡献是减半(即只占0.5的类型)。默认为0意味着所有的帧永远是有1.0的权重
analyze_interlaced_flag
当设置为非0数时,idet将使用指定的帧数来确定交错标记是准确的,它不会对不能检测帧计数。如果发现标记是正确的使用它没有进一步的计算,即使发现标记不正确,也只是将它(标记)清除而没有进一步的计算。它插入idet滤镜作为低计算方法来清除交错标记。
反转非交错或者交错
这个滤镜可以把让非交错图像变成交错的,把交错图像变成非交错的。非交错的图像被分裂为2部分(称作半图),其中奇数行移到输出图像的上部,偶数行移到下半部分。你可以利用滤镜连续处理2次(相当于没有效果)。
滤镜接受下面的选项:
luma_mode, l
chroma_mode, c
alpha_mode, a
对luma_mode, chroma_mode和alpha_mode的可能值有:
什么都不做
‘deinterleave, d’
非交错部分,放置在其它上
‘interleave, i’
交错部分,反向非交错效果
默认值为none
luma_swap, ls
chroma_swap, cs
alpha_swap, as
交换 luma/chroma/alpha 部分。交换奇数和偶数行。 默认0.
简单的从逐行转交错滤镜。它把奇数帧交错上(或下)行,同时把偶数帧作为下(或上)行。同时减半帧率和保持图像高度。
Frame 'j+1'
==========
===========
==================
--------------------&
Frame 'j' Line 0
Frame 'j+1' Line 1
Line 2 ---------------------&
Frame 'j' Line 2
Frame 'j+1' Line 3
新的帧 + 1 会以帧'j+2'和帧'j+3'这样依次生成
它接受下面的选项参数:
它决定了交错帧模式是even(tff - 默认) 还是odd (bff)
允许(默认)或禁止垂直低通滤波器来避免twitter交错和减少波纹。
通过Donald Graft的自适应内核deinterling反交错视频。其使交错视频转换成逐行视频
下面是接受参数的介绍.
设置一个滤镜阀值用于确定哪些像素会被处理。值为[0,255]间整数,默认为10.如果为0则处理所有像素
设置如果超过阀值的处理模式,为1则为白色,默认为0
设置字段顺序。如果为1则交换字段,否则为0,默认为0.
为1则附加锐化,默认为0.
为1则尽量锐化,默认为0
kerndeint例子
以默认值应用:
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
允许附加锐化:
kerndeint=sharp=1
超阀值后刷成白色
kerndeint=map=1
lenscorrection
径向透镜畸变修正
这个滤镜可以用来修正广角镜头产生的径向畸变,从而修正图像。要找到合适的参数,可以使用工具,例如opencv或者简单的多次试错尝试。利用opencv源码中的校准样例(在 samples/cpp)并且从结果矩阵中提取k1和k2系数。
注意相同效果滤镜在开源KDE项目工具Krita和Digikam中同样是有效的。
这个滤镜还可以同vignette滤镜联合使用,来补偿透镜错误,它修正滤镜处理图像的失真,而vignette滤镜纠正亮度分布,所以你有时可能需要同时使用两个滤镜,不过你还要注意点二者的顺序,即到底是哪个滤镜先使用
lenscorrection选项
滤镜接受下面选项:
图像的焦点相对x坐标,从而扭曲的中心。这个值区间[0,1],用分数表示图像的宽度比
图像的焦点相对y坐标,从而扭曲的中心。这个值区间[0,1],用分数表示图像的高度比
二次修正系数。0.5意味着没有修正
双二次修正系数。0.5意味着没有修正。
生成修正的公式:
r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)
这里r_0是减半的图像对角,r_src和r_tgt分别是源和目标图像中相对于焦点的距离。
对视频应用3D LUT滤镜。
滤镜接受下面的选项:
设置3D LUT文件名,该文件支持的类型有:
AfterEffects 的类型
Iridas 的类型
DaVinci 的类型
Pandora 的类型
选择插值模式,有效值有:
‘nearest’
选用离定义点最近的
‘trilinear’
采用8点多维设置来定义插入值
‘tetrahedral’
使用一个四面体插入值
lut, lutrgb, lutyuv
根据每个像素的分量数据查表选择输出值的滤镜。
其中lutyuv应用于YUV输入视频,而lutrgb应用于RGB输入视频
滤镜接受下面的参数:
设置第一个像素分量表达式
设置第二个像素分量表达式set second pixel component expression
设置第三个像素分量表达式
设置第四个像素分量表达式
设置红色分量表达式
设置绿色分量表达式
设置蓝色分量表达式
设置透明分量表达式
设置亮度(Y)分量表达式
设置色度U/Cb分量表达式
设置色度V/Cr分量表达式
它们每个人都指定使用的表达式计算像素对应分量(查找表方法)。
具体的分量关联到每个c*选项的输入格式。
其中lut滤镜允许输入像素格式是YUV或者RGB,lutrgb只允许RGB格式,lutyuv只允许YUV格式
表达式支持下列常量和函数:
输入的宽和高
输入像素分量值
输入值,并且裁剪到minval-maxval范围内
输入像素分量的最大值
输入像素分量的最小值 component.
“负片”表示的分量值,它被裁剪到minval-maxval范围内,对应于maxval-clipval+minval.
对于val的计算值,裁剪到 minval-maxval范围内
gammaval(gamma)
伽马校正计算值像素分量的值,裁剪到 minval-maxval范围内,其对应于pow((clipval-minval)/(maxval-minval),gamma)*(maxval-minval)+minval
所有表达式默认为"val"
lut, lutrgb, lutyuv例子
输入图像的负片效果
lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
lutrgb="r=negval:g=negval:b=negval"
lutyuv="y=negval:u=negval:v=negval"
亮度负片效果
lutyuv=y=negval
移除色度分量,转换成灰度图像:
lutyuv="u=128:v=128"
应用一个亮度燃烧效果:
lutyuv="y=2*val"
移除绿色和蓝色分量(红色灰度图):
lutrgb="g=0:b=0"
设定固定的透明通道效果:
format=rgba,lutrgb=a="maxval-minval/2"
以系数0.5进行伽玛亮度矫正:
lutyuv=y=gammaval(0.5)
丢弃的亮度低有效位(减少细节,亮块化):
lutyuv=y='bitand(val, 128+64+32)'
mergeplanes
从一些视频流中混合颜色通道
滤镜最多接受4路输入流,然后混合选用的(颜色)平面来输出。
滤镜接受下面的选项:
设置输入到输出颜色映射,默认为0 mapping. Default is 0.
这个映射由一个位映射指定,它被描述为一个格式为0xAa[Bb[Cc[Dd]]]的十六进制数。其中Aa描述第一个用作输出的(颜色)平面,A设置采用那个输入流(0-3),a指定是输入流的那个分量(0-3,因为一个输入视频流最多有4个输入分量)。此后的Bb、Cc和Dd以此类推,分别指定第2到第4个输出映射关系。
设置输出像素格式,默认为yuva444p
mergeplanes例子
从三个灰度视频流混合为单个视频流(有相同的图像尺寸):
[a0][a1][a2]mergeplanes=0x001020:yuv444p
混合第一路的yuv444p和第二路的灰度视频到一个yuva444p:
[a0][a1]mergeplanes=0x:yuva444p
在yuva444p交换Y和A通道:
format=yuva444p,mergeplanes=0x:yuva444p
在yuv420p交换U和V输出到yuv420p:
format=yuv420p,mergeplanes=0x000201:yuv420p
转换rgb24到yuv444p
format=rgb24,mergeplanes=0x000102:yuv444p
应用反交错运动补偿
它每帧需要一个输入字段,所以必须同yadif=1/3或者等效 一同使用。
率接受下面的选项:
设置反交错模式,有下列有效值:
‘medium’
使用迭代的运动估计
‘extra_slow’
类似‘slow’,但使用多个参考帧
默认‘fast’.
设置输入视频图片字段校验。它必须以下值之一:
‘0, tff’
对应上场优先
‘1, bff’
对应下场优先
默认 ‘bff’.
设置内部使用的编码器按块量化参数设置(QP)
更高的值会导致一个更平滑的运动向量场但不最优个体向量。默认值是1。
mpdecimate
减少对前帧变化不大的帧,以减少帧速率
这个滤镜的主要作用是对非常低码率的编码进行预处理(例如面向拨号调整解调器应用的),不过理论上还可以用于修复发转的电视电影影片(影片转换成电视又转换回来)
下面是选项介绍:
设置连续帧的最大数量,可以删除(如果正),或删除帧之间的最小间隔帧(如果负的) ,如果为0,则删除帧和前面删除帧没有关联(关系)
设置删除阀值。
其中hi和lo是对于一个8x8像素块和代表实际像素值差异,所以阀值64对应与每个像素都有1个单位的差异,或者被完全不同的块覆盖
一个帧作为候选(被丢弃)则它没有超过hi个不同的8x8块和没有超过frac量的(1意味着整个图像)超过lo个不同的8x8块
默认值为hi是6412,lo为645,frac为0.33
否定输入视频
它接受一个整数(参数),如果非零它否定透明分量(如果可用)。默认值是0
强制libavfilter不采用指定的像素格式来输入到下一个滤镜
接受的参数为:
是一个由 ’|’分隔的像素格式名列表,例如pix_fmts=yuv420p|monow|rgb24"
noformat例子
强制不采用yuv420p的像素格式来输出到vfilp滤镜
noformat=pix_fmts=yuv420p,vflip
转换输入到不是指定的像素格式
noformat=yuv420p|yuv444p|yuv410p
给视频添加噪点
滤镜接受下面的选项:
对指定像素分量或者整个像素设置噪点种子,默认为123457.
all_strength, alls
c0_strength, c0s
c1_strength, c1s
c2_strength, c2s
c3_strength, c3s
对指定像素分量或者整个像素设置噪点强度,默认为0,值范围[0, 100].
all_flags, allf
c0_flags, c0f
c1_flags, c1f
c2_flags, c2f
c3_flags, c3f
设置分量或者所有的标志,可能的标志有:
平均时间的噪点(平滑)
混合随机噪点(半)规律
时间噪点(噪点模式在帧间变化)
统一噪点 (gaussian外的)
添加时间和统一的噪点给图像
noise=alls=20:allf=t+u
不改变输入进行输出
申请使用libopencv进行视频转换。
要启用需要处理编译参数--enable-libopencv,且系统中要有libopencv的头和库。
接受下面的参数:
filter_name
指定要使用的libopencv滤镜名
filter_params
对滤镜指定参数,如果不指定则采用具体滤镜默认参数
在libopencv官方文档了解更多libopencv精确信息
在libopencv中下面的滤镜被支持。
这个滤镜使用特定结构化的元素来扩张图像,其对应于libopencv中的函数cvDilate
它接受的参数形式为:struct_el|nb_iterations
其中struct_el代表了一个结构化元素,语法为:colsxrows+anchor_xxanchor_y/shape,其中cols和rows是结构元素的行和列数,anchor_x和anchor_y是锚点的坐标值,shape是结构化元素的图形,shape可能值是"rect"、 "cross"、 "ellipse"和 "custom"。如果custom被设置,它还必须跟一个格式为=filename来指定一个位图,其每个可打印字符对应于一个亮的像素。当定制的图形被使用,cols和rows被忽略,行和列的数有读取的文件决定。
struct_el的默认值为3x3+0x0/rect
nb_iterations指定迭代的次数,默认为1
一些例子:
采用默认值
ocv=dilate
Dilate采用了一个5x5的结构元素,且迭代2次
ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2
从文件diamond.shape读取图像,迭代2次
其中diamond.shape文件的内容为:
因为描述为定制,所以原来指定的行和列值被忽略:
ocv=dilate:0x0+2x2/custom=diamond.shape|2
通过使用特定的结构化元素侵蚀一个图像。它对应于libopencv中的cvErode函数。
它接受参数为:struct_el:nb_iterations,解释同dilate
平滑输入视频
滤镜接受的参数为: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函数。
把一个视频覆盖在另外一个上面
它有两个输入,其中第一个输入是主要的输入会覆盖到第二个输入上
它接受下面的参数(介绍见下):
设置主要视频(在被覆盖视频上)的x和y坐标表达式,默认为0,如果表达式无效则会设置为一个巨大的值(在这种情况下相当于没有覆盖,即覆盖出现在非可视区域)
eof_action
在操作时遇到第二路输入的EOF信号时的处理,它接受下面的值之一::
重复最后一帧(默认)
同时结束两个流
把第一路输入作为输出
它设置何时计算x和y坐标值
它接受下面的值:
仅在滤镜初始化或命令处理时计算一次
默认‘frame’.
如果设置为1,强制以最短的输入时间终止输出,默认为0
设置输出格式,允许:
‘yuv420’
强制为YUV420
‘yuv422’
强制为YUV422
‘yuv444’
强制为YUV444
默认 ‘yuv420’.
rgb (弃用的)
如果设置为1,强制滤镜接受输出是RGB颜色空间。默认为0,它已经被弃用,而是使用格式来代替。
repeatlast
如果设置为1,强制滤镜绘制最后一个覆盖帧直到结束流。如果设置为0则禁止这样的行为,默认为1
值x和y的表达式中接受下面的参数:.
主要输入流的宽和高
overlay_w, w
overlay_h, h
被覆盖流的宽和高
对于x和y的计算值,它在每帧中都计算
输出格式中的水平和垂直色度通道分量值,例如对于yuv422p像素格式,hsub是2 ,vsub是1
帧序数,从0开始计数
输入帧在文件当中的偏移,如果未知则为NAN
时间码,以秒计。如果时间码未知则为NAN
overlay命令
滤镜支持下面的命令:
修改覆盖输出的x和y坐标。它接受的语法同于前面对应的选项
如果指定的表达式无效,则保持当前值
overlay例子
在据右下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
插入一个透明的PNG标记到右下。协同ffmpeg工具集利用-filter_complex选项来实现:
ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
插入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]
同时播放原始和过滤版(协同了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
组合2个输入,一个放置在一边:
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]
在10-20秒应用一个delogo滤镜
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
串联多个overlays滤镜:
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]
应用超完备小波降噪
滤镜接受下面的选项:
大的值将在低频部分降噪明显,但速度很慢
值范围8-16,默认为8
luma_strength, ls
设置亮度强度
为0-1000的双精度值,默认为1.0
chroma_strength, cs
设置色度强度
为0-1000的双精度值,默认为1.0
在原始输入的x和y坐标上填充输入图像(多处部分用颜色填充)
它接受下面参数:
指定输出尺寸的表达式。如果值为0,则输入图像尺寸作为输出尺寸
在width表达式中可以引用height值,反之亦然
指定输入图像在输出中放置的坐标据上边和左边的值
其中x可以引用y值计算,反之亦然
指定添加区域的颜色。语法参考章节的介绍
默认为"black".
对于width, height, x和y选项的表达式,可以包含下面的常量:
输入宽和高
同于in_w和in_h
输出的宽和高(输出添加的区域),它由width和height表达式指定
同于out_w和out_h
指定的x和y的偏移(在另外一个表达式中),如果不指定则为NAN
同于iw / ih
输入样本点长宽比
输入视频长宽比,它等于(iw / ih) * sar
水平和垂直色度分量值,例如对yuv422p像素格式,hsub为2,vsub为1
在(0,40)填充violet颜色到输入视频,输出视频为640x480
pad=640:480:0:40:violet
其等效于:
pad=width=640:height=480:x=0:y=40:color=violet
把图像放置在原始输入扩大3/2倍的衬底中间位置:
pad="3/2iw:3/2ih:(ow-iw)/2:(oh-ih)/2"
输出到一个正方形衬底上,衬底的变长是输入图像宽和高中的大的一个值,放置在正中:
pad="max(iw,ih):ow:(ow-iw)/2:(oh-ih)/2"
输出成为有16:9的长宽比的衬底上,水平中置图像(其他比例视频转16:9视频,但不拉伸放缩的效果):
pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
在合成视频的情况下,为了正确设置显示,有必要利用sar设置表达式:
(ih * X / ih) * sar = output_dar
X = output_dar / sar
因此需要修正前例为:
pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
双倍输入视频尺寸,把输入放置在右下区域(占输出区域的右下1/4):
pad="2iw:2ih:ow-iw:oh-ih"
palettegen
对整个视频产生一个调色板
它接受下面的选项:
max_colors
设置调色板最大数量。注意调色板仍包含256个色彩,只是没有用到的色彩都被设置为黑色了
reserve_transparent
创建一个255色调色板,最后一个存储颜色。GIF优化保留透明的颜色是非常有用的。如果没有设置,那么最大的颜色调色板将达到256。你可能对于某个独立的图像想要禁用该选项。默认设置是default
stats_mode
设置统计模式
接受下面值:
计算全帧直方图
只计算与前一帧的差异部分。这将更关注输入中变化的部分(运动的部分),如果背景是静态的。
默认为full.
palettegen例子
生成一个调色板
ffmpeg -i input.mkv -vf palettegen palette.png
paletteuse
使用一个调色板来处理输入视频流中的样本点转换
滤镜接受2个输入,一个视频输入流和一个调色板。调色板必须是256个像素的图像(即有256个颜色)
它接受下面选项:
选择抖动模式,可用算法有:
顺序8x8 bayer抖动(确定的)
‘heckbert’
由Paul Heckbert定义与1982年的抖动算法(简单的错误扩散)注意这个抖动有时被认为是“错误”的,而仅作为参考
‘floyd_steinberg’
Floyd 和Steingberg抖动(错误扩散)
‘sierra2’
Frankie Sierra抖动第二版(错误扩散)
‘sierra2_4a’
Frankie Sierra抖动第二版的"简化" (错误扩散)
默认为sierra2_4a.
bayer_scale
当bayer抖动算法被选取,这个选项将定义用作调色板规模(多少交叉——混合是可见的)。一个小的值意味着更多可见的且更少的条纹,高的值意味更少可见可能更多的条纹。
值范围为[0,5],默认为2
如果设置,定义区域过程
‘rectangle’
只有改变的矩形区域会进行再加工. 这类似于GIF裁剪/抵消压缩机制。它用来加快速度,对于只要部分改变时,如用例,只有一个矩形移动(边界)区域,且限制误差范围抖动(它会导致更多的确定性产出,如果现场没有太大的改变,它可以减少噪音且更好的GIF压缩移动)
默认为none.
paletteuse例子
利用palette(调色板可由palettegen产生)编码输出GIF
ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
perspective
采用正确的视角记录视频,而不是垂直于平面
接受参数的介绍如下:
对左上、右上、左下和右下各点设置表达式。默认为0:0:W:0:0:H:W:H表示不改变视角。如果场景选项是对源设置(sense=0),那么将发送指定点给目标。如果是对目标设置的(sense=1),则对应的源将被送到指定坐标
表达式接受下面的变量:
视频帧的宽和高
interpolation
为透视校正设置插值
允许下面的值:
‘linear’
默认为‘linear’.
设置协调选项的解释.
它接受值为:
‘0, source’
表明前面x0y0x1y1x2y2x3y3是对源设置的
‘1, destination’
表明前面x0y0x1y1x2y2x3y3是对目标设置的
默认为‘source’.
延迟隔行视频一段时间以便现场秩序变化
用于解决PAL制下电影到视频转换中的场序问题
接受参数介绍见下:
设置相位方法,它允许的值为:
捕获是上场优先,要转换为下场优先3,滤镜会延迟下场
捕获是下场优先,要转为上场优先,滤镜会延迟上场。
捕获和输出相同场序。这个模式存在文档中引用的其他选项,如果你真的选择它,滤镜将什么也不做。
捕获字段自动确定场序标志,转换则相反。滤镜根据相应标识在逐帧的基础上自动选择' t '和' b '。如果没有包含有效的指示字段,则同于u
捕获模式未知或者不定,转换时则相反。滤镜通过分析自动选择 ‘t’ 和 ‘b’实现最佳匹配
捕获是上场优先,转换未知或者不定。滤镜通过图像分析选择t和p
捕获是下场优先,转换未知或者不定。滤镜通过图像分析选择b和p
捕获根据标志确定,滤镜由此选择t、b和p,如果没有有效的标志信息,则同于U,这是默认模式
捕获和转换都未知,

我要回帖

更多关于 帧速率 的文章

 

随机推荐