淘先锋技术网

首页 1 2 3 4 5 6 7

基础

滤镜分类
ffmpeg有两种滤镜,一种是简单滤镜,另一种是复杂滤镜

  1. 简单滤镜 -vf
    一个输入,对应一个输出;可以看做复杂滤镜的特例;

  2. 复杂滤镜 -filter_complex

滤镜描述符规则

  1. “,” —— 前一个输出作为后一个输入
  2. “;” —— 表示两个滤镜为并列关系
  3. “:” —— 用于分割参数

常用滤镜介绍

Overlay
是最常使用的滤镜;会以第一个输入为背景,后续的叠加到背景上;

scale
裁剪滤镜,`scale=w:h;

fade
渐入渐出,[0:v]fade=t=out:st=10:d=2;
t表示转场,取值可为outin分别代表出场或入场;
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

在这里插入图片描述

视频画中画

使用的滤镜为overlayscale,使用复杂滤镜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

音频混音

主要有amergeamix —— 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

参考文献

  1. xfade