基础
滤镜分类
ffmpeg有两种滤镜,一种是简单滤镜,另一种是复杂滤镜
-
简单滤镜 -vf
一个输入,对应一个输出;可以看做复杂滤镜的特例; -
复杂滤镜 -filter_complex
滤镜描述符规则
- “,” —— 前一个输出作为后一个输入
- “;” —— 表示两个滤镜为并列关系
- “:” —— 用于分割参数
常用滤镜介绍
Overlay
是最常使用的滤镜;会以第一个输入为背景,后续的叠加到背景上;
scale
裁剪滤镜,`scale=w:h;
fade
渐入渐出,[0:v]fade=t=out:st=10:d=2
;
t
表示转场,取值可为out
或in
分别代表出场或入场;
st
:开始时间戳;
d
:持续时长;
setpts
设置帧时间戳
atempo
音频倍速播放滤镜
应用
视频加logo
使用overlay滤镜,ffplay预览效果
-vf使用简单滤镜overlay,"movie=logo.png,scale=64:64[water]"定义logo,并将其裁剪为64x64的大小,处理后的输出记为water;
“[in][water]overlay=W-w-30:10”—— in
代表视频输入,作为背景;water
表示后续输入,叠加到背景上;W-w-30:10
定义logo位置,W
表示背景视频宽度,w
表示logo宽度;
视频去logo
原理是使用插值法将该区域的像素使用周边像素代替
使用滤镜delogo处理,接受5个参数,delogo=x:y:w:h:show
分别表示处理区域的坐标和宽高,show
为可选参数,表示是否显示绿色矩形框帮助确定选取是否合适,可以在ffplay预览时结合使用;
ffplay -i logo-with.mp4 -vf "delogo=544-64-30:10:64:64:show=1"
ffplay -i logo-with.mp4 -vf "delogo=544-64-30:10:64:64:show=1" logo-without.mp4
视频画中画
使用的滤镜为overlay
与scale
,使用复杂滤镜filter_complex
;[1:v]
表示第2个媒体文件的视频信息;
# 将第2个媒体文件的视频裁剪为180x120, 叠加在第一个媒体文件的右上角
ffmpeg -i logo.mp4 -i inner.mp4 -filter_complex "[1:v]scale=180:120[pip];[0:v][pip]overlay=W-w-30:10" pip.mp4
视频混屏
使用nullsrc
进行生成初始视频源,宽高为720x1080
;然后将输入的四个视频分别裁剪为scale=360:540
,最后依次叠加到nullsrc
滤镜生成的base
源上,得到四分屏的输出视频;
ffmpeg -i logo.mp4 -i inner.mp4 -i desktop.mp4 -i pip.mp4 -filter_complex "nullsrc=size=720x1080[base];[0:v]scale=360:540[a];[1:v]scale=360:540[b];[2:v]scale=360:540[c];[3:v]scale=360:540[d];[base][a]overlay=shortest=1[tmp1];[tmp1][b]overlay=shortest=1:x=360[tmp2];[tmp2][c]overlay=shortest=1:y=540[tmp3];[tmp3][d]overlay=shortest=1:x=360:y=540" compose.mp4
视频转场
让多段拼接视频场景转换更加自然,如下时淡入淡出的转场特效
ffmpeg -i slice-a.mp4 -i slice-b.mp4 -i slice-c.mp4 -filter_complex "[0:v]fade=t=out:st=10:d=2[v0];[1:v]fade=t=in:st=0:d=2[tmp];[tmp]fade=t=out:st=10:d=2[v1];[2:v]fade=t=in:st=0:d=2[v2];[v0][v1][v2]concat=n=3:v=1:a=0[vo];[0:a][1:a][2:a]concat=n=3:v=0:a=1[ao]" -map "[vo]" -map "[ao]" t.mp4
concat
拼接视频:v=1:a=0
表示保留视频忽略音频
-map
用于获取使用filter_complex
滤镜对应的多输出文件,这里分别获取音频和视频,然后输出t.mp4
更多滤镜转场特效可以使用xfade
视频倍速播放
使用setpts
滤镜处理;
ffmpeg -i logo.mp4 -an -vf 'setpts=0.5*PTS' output.mp4
音频倍速播放
atempo
表示照原速的,所以atempo=1.5
表示1.5倍速;
音视频倍速
ffmpeg -i logo.mp4 -filter_complex "[0:v]setpts=2*PTS[vo];[0:a]atempo=0.5[ao]" -map "[vo]" -map "[ao]" new.mp4
音频混音
主要有amerge
和amix
—— amerge
只是简单地将多个音频都输出到输出文件,amix
是进行真正的混音处理;
amix
会自动获取输入多媒体文件的两路音频;weight
设定多路音频混音时各自的比重,总和为1;
ffmpeg -i logo.mp4 -i slice-a.mp4 -filter_complex "amix=inputs=2:duration=shortest:weights='0.1 0.9'" mixin.aac