携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
写在前面
为方便展示在文档中,我们预先将视频截取前两秒的画面,并将其转换为
GIF
命令:
ffmpeg -i [原始视频] -ss [开始时间] -t [截取市场] -r [帧率值] [输出文件]
套用到我们的需求中为:
ffmpeg -i 原视频.mp4 -ss 0 -t 2 -r 10 原始.gif
如果想要直接看效果可以使用命令:
ffplay -i [原始视频] ......
如果想要直接生成效果文件则可以使用命令:
ffmpeg -i [原始视频] ...... [输出文件]
关于滤镜的延迟生效问题,我们只需要在滤镜参数中添加
enable
属性进行设置即可比如: 下面有个模糊处理的滤镜,其 -vf 的相关参数为
boxblur=2:1:cr=0:ar=0
如果我们想让滤镜在2s后生效,我们可以将参数添加enable
属性,即boxblur=enable='gt(t,2)':boxblur=2:1:cr=0:ar=0
完整命令
ffmpeg -i [原始视频] -vf boxblur=enable='gt(t,2)':2:1:cr=0:ar=0 [输出文件]
enable
后面为相关的时间表达式,表达式参考链接: ffmpeg.org/ffmpeg-util…
巨量创意链接: cc.oceanengine.com/creative-fa…
模糊处理
- 参数:
boxblur
- 功能:模糊处理
参数值可以使用:w,h等变量表达式
- 命令举例:
ffmpeg -i [原始视频] -vf boxblur=2:1:cr=0:ar=0 [输出文件]
- 效果:
颜色平衡
-
参数:
colorbalance
-
功能:修改输入帧的基本颜色(红、绿、蓝)的强度。
-
可接收参数
参数 | 参数说明 |
---|---|
rs | Adjust red, green and blue shadows (darkest pixels). 调整红色,绿色和蓝色的阴影(最深的像素)。 Allowed ranges for options are [-1.0, 1.0]. Defaults are 0. 选项的允许范围为[-1.0,1.0]。默认值为0。 |
gs | 同上 |
bs | 同上 |
rm | Adjust red, green and blue midtones (medium pixels). 调整红色、绿色和蓝色的中间色调(中等像素)。 |
gm | 同上 |
bm | 同上 |
rh | Adjust red, green and blue highlights (brightest pixels). 调整红色、绿色和蓝色高光(最亮的像素)。 |
gh | 同上 |
bh | 同上 |
pl | Preserve lightness when changing color balance. Default is disabled. 改变颜色平衡时保持亮度。默认设置为禁用。 |
- 命令举例:
ffmpeg -i [原始视频] -vf colorbalance=rh=-.5:pl=false [输出文件]
- 效果:
色调调节
- 参数:
colorchannelmixer
- 功能:通过重新混合颜色通道来调整视频输入帧,通过添加与相同像素的其他通道相关联的值来修改颜色通道。
参数本质就是加权求值时候的权重,每个参数接受0-1得值,滤镜本质是将每个颜色值加权求值.公式:
red=red*rr+blue*rb+green*rg+alpha*ra
。green/blue和alpha同理。参数默认值对应得是1,其他为0.如:rr,rg,rb,ra。其中rr默认为1,其他为0
-
命令举例:
- 灰色色调:
ffmpeg -i [原始视频] -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 [输出文件]
- 深褐色色调:
ffmpeg -i [原始视频] -vf colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131 [输出文件]
- 灰色色调:
-
效果:
边框效果
- 参数:
drawbox
- 功能:在输入图像上绘制一个彩色框
- 可接收参数:
参数 | 参数说明 |
---|---|
x | 指定框的左上角坐标的表达式。默认为0 |
y | 指定框的左上角坐标的表达式。默认为0 |
w | 宽度 |
h | 高度 |
c | 颜色 red@透明度 |
t | 厚度 The expression which sets the thickness of the box edge. A value of fill will create a filled box. Default value is 3 .设置盒边厚度的表达式。填充值将创建一个填充框。默认值是3。 |
-
命令举例:
ffmpeg -i [原始视频] -vf drawbox=x=10:y=10:w=100:h=100:color=green@0.5:t=fill [输出文件]
-
效果:
网格效果
- 参数:
drawgrid
- 功能:给出起始坐标 和 网格的宽高颜色就可以绘画出一个网格覆盖在视频上
- 可接收参数:
- 命令举例:
ffmpeg -i [原始视频] -vf drawgrid=width=100:height=100:thickness=2:color=black@0.9 [输出文件]
- 效果:
边缘检测
- 参数:
edgedetect
- 功能:这个最好还是当作中间操作来用,因为单纯过这个滤镜并不会有什么美感,但是边缘检测却是实现其他操作的必经之路,比如:油画效果,动画片效果等等。
- 可接收参数:
- 命令举例:
- 边缘检测:
ffmpeg -i [原始视频] -vf edgedetect=low=0.1:high=0.4 [输出文件]
- 油画/动画效果:
ffmpeg -i [原始视频] -vf edgedetect=mode=colormix:high=0 [输出文件]
- 边缘检测:
- 效果:
亮度、饱和度、对比度
-
参数:
eq
-
功能:用来调整亮度、饱和度、对比度、gama变换
-
可接收参数:
参数 | 说明 |
---|---|
contrast | 对比度 |
brightness | 亮度 |
saturation | 饱和度 |
gamma | gama变换 |
gamma_r | |
gamma_g | |
gamma_b |
高亮:ffmpeg -i [原始视频] -vf eq=brightness=0.3 [输出文件]
对比度:ffmpeg -i [原始视频] -vf eq=contrast=2 [输出文件]
高饱和:ffmpeg -i [原始视频] -vf eq=saturation=2 [输出文件]
冷暖分割
-
命令:
ffmpeg -i [原始视频] -vf geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)' [输出文件]
-
效果
浮雕
- 命令:
ffmpeg -i [原始视频] -vf format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2' [输出文件]
- 效果
光明燃烧效果
- 命令:
ffmpeg -i [原始视频] -vf lutyuv="y=2*val" [输出文件]
- 效果
多彩效果
-
命令:
ffmpeg -i [原始视频] -vf lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2' [输出文件]
-
效果
-
命令:
ffmpeg -i [原始视频] -vf swapuv [输出文件]
-
效果:
光晕效果
- 命令:
ffmpeg -i [原始视频] -vf vignette=PI/4 [输出文件]
- 效果
粒子特效
- 粒子效果
- 原始视频
- 命令:
ffmpeg -i [主视频] -itsoffset [覆盖视频延迟时间] -i [覆盖视频] -filter_complex "[1]format=rgba,colorchannelmixer=aa=[透明度][front];[0][front]overlay=repeatlast=0,format=yuv420p" -y [输出视频]
在一秒之后显示覆盖视频,覆盖视频的透明度为0.6
命令:
ffmpeg -i [主视频] -itsoffset 1 -i [覆盖视频] -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.6[front];[0][front]overlay=repeatlast=0,format=yuv420p" -y [输出视频]
- 效果