FFMpeg命令行学习笔记(7)ffmpeg命令行指令blend

blend,tblend

混合两个视频帧

其中blend混合两路输出1路流,第一个输入为top层,二个路为bottom层,输出以输入短的为结束。而tblend(时间混合)需要从一个单独视频流的连续两帧,让新帧在上叠加在老帧上。

接受选项的介绍如下:

  • c0_mode
  • c1_mode
  • c2_mode
  • c3_mode
  • all_mode

设置混合模式(对指定像素或者所有像素——利用all_mode),默认值是normal

当前有效的混合模式如下:

‘addition’
‘and’
‘average’
‘burn’
‘darken’
‘difference’
‘difference128’
‘divide’
‘dodge’
‘exclusion’
‘glow’
‘hardlight’
‘hardmix’
‘lighten’
‘linearlight’
‘multiply’
‘negation’
‘normal’
‘or’
‘overlay’
‘phoenix’
‘pinlight’
‘reflect’
‘screen’
‘softlight’
‘subtract’
‘vividlight’
‘xor’

  • c0_opacity

  • c1_opacity

  • c2_opacity

  • c3_opacity

  • all_opacity

设置特定像素的透明度,或者设置整个透明度(利用all_opacity),仅用于组合像素混合模式blend滤镜.

c0_expr

c1_expr

c2_expr

c3_expr

all_expr

设置特定像素混合表达式或所有像素混合表达式(all_expr),注意如果它们被设定,则相关模式选项被忽略

表达式可以采用下面的变量:

N

进入滤镜的帧序数,从0开始计数

X
Y

样本点坐标(像素坐标)

W
H

整个帧画面的宽和高(原始的)

SW
SH

取决于当前滤镜平面的宽和高。它对应于像素亮度平面和当前平面的比值,如对于YUV4:2:0格式,则对于亮度平面
为1,1,对于色度平面则是0.5,0.5

T

当前帧的时间,单位秒

TOP, A

`top`层的视频帧上当前像素值

BOTTOM, B

`bottom`层的视频帧上当前像素值

shortest

在短输入结束时强制结束,默认为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((T40*SW+X)*W/H,W),A,B)'

显示当前和前一帧之间的差异:

tblend=all_mode=difference128

使用举例:

ffmpeg -i out31.avi -i out32.avi -filter_complex "blend=all_expr='if(gte(T*SH*200+Y,H)*gte((T*200*SW+X)*W/H,W),A,B)'" out15.avi

你可能感兴趣的:(FFMpeg命令行学习笔记(7)ffmpeg命令行指令blend)