目录
基本用法
ffmpeg [全局选项] {[输入选项] -i 输入路径}... {[输出选项] 输出路径}...
注
:
- 选项使用
-
标识 - 每个处理至少一个输入和一个输出
- 输入选项在
-i
前声明 - 输出选项在输出
url
前声明
如:输入input.mp4,输出帧率更改为 30 fps,输出到output.mp4,且遇到同名文件不询问直接覆盖
ffmpeg -y -i input.mp4 -r 30 output.mp4
变量
名称 | 描述 | 值 |
---|---|---|
n | 输入的帧序号,从0开始 | |
t | 随时间线递增的值,从0开始 | |
ow | 输出的宽度 | |
oh | 输出的高度 | |
iw | 输入的宽度 | |
ih | 输入的高度 | |
W / main_w | 主视窗宽度 | |
H / main_h | 主视窗高度 | |
h / overlay_w | 覆盖层宽度 | |
h / overlay_h | 覆盖层高度 | |
text_w | 文本区域宽度 | |
text_h | 文本区域高度 |
表达式
名称 | 描述 | 示例 |
---|---|---|
abs(number) | 返回绝对值 | abs(-2) |
between(x,min,max) | 若min ≤ x ≤ max,返回1,否则返回0 | between(1.5,1,2) |
ceil(number) | 往上取整 | ceil(1.1) |
floor(number) | 往下取整 | ceil(1.1) |
gt(x,y) | 当x>y时,返回1,否则返回0 | gt(1,2) |
gte(x,1) | 当x≥y时,返回1,否则返回0 | gte(1,2) |
lt(x,y) | 当x<y时,返回1,否则返回0 | lt(1,2) |
lte(x,y) | 当x≤y时,返回1,否则返回0 | lte(1,2) |
if(x,y) | 当x返回非0,返回y的计算结果 | if(gt(t,1),lt(t,3)) |
if(x,y,z) | 当x返回非0,返回y的计算结果,否则返回z的计算结果 | if(gt(t,1),lt(t,3),eq(t,4)) |
ifnot(x,y) | 当x返回0,返回y的计算结果 | if(gt(t,1),lt(t,3)) |
ifnot(x,y,z) | 当x返回0,返回y的计算结果,否则返回z的计算结果 | if(gt(t,1),lt(t,3),eq(t,4)) |
isnan(x) | 当x为非数字,返回1,否则返回0 | isnan(1) |
mod(x,y) | 返回 x%y 的计算结果 | mod(3,2) |
trunc(x / expression) | 将值或表达式往0的方向取整 | trunc(-1,1) = -1.0;trunc(2.1) = 2.0 |
rotw(radian) | 返回能完全包含旋转后视频的最小宽度;仅在作为ow / oh参数的求值表达式下可用 | rotw(PI/4) |
roth(radian) | 返回能完全包含旋转后视频的最小高度;仅在作为ow / oh参数的求值表达式下可用 | roth(PI/4) |
Options
全局选项(部分)
选项 | 描述 |
---|---|
-y | 遇到同名文件不询问,直接覆盖 |
-n | 遇到同名文件不覆盖,退出进程 |
-stats | 打印编码的进度或统计信息。默认开启,不需要指定 |
-nostats | 关闭编码的进度或统计信息 |
-filter_complex_threads | 设定 filter_complex处理图像的线程数,默认cpu数 |
-loop | 设置loopfilter,值为1表示自动 |
输入 / 输出选项(部分)
选项 | 类型 | 描述 | 示例 |
---|---|---|---|
-i | input | 指定输入流 | -i input.mp4 |
-s | output | 定义帧输出尺寸,可能的值 宽度※高度 / 缩写 | -s 360*240 |
-t | input / output | 作为输入选项时,限制读取输入流的时长;作为输入选项时,时长外的流写入将忽略;支持格式 hh:mm:ss / 秒 / 毫秒(ms) / 微秒(us) | -t 5 |
-vframes | output | 设定输出帧的数量 | -vframes 30 |
-r | input / output | 设定帧率。作为输入选项时,则忽略源输入的时长信息,ffmpeg根据恒定的fps 重新计算时长。作为输出选项时,保留源输入的时长,以设定的fps 输出 | -r 30 |
-filter_complex
overlay
视频覆盖
参数 | 值 | 描述 | 示例 |
---|---|---|---|
x | number / expression | 覆盖的x轴坐标 | overlay=x=10:y=10 |
y | number / expression | 覆盖的y轴坐标 | overlay=x=10:y=10 |
eval | ‘init’ / ‘frame’ | 值为init 时,表达式只会执行一次求值(包含t / n 的表达式将不会变化);值为frame 时,表达式在每次输入帧都会求值。 | overlay=x=t×10:y=n×10:eval=‘frame’ |
shortest | 1/0 | 是否在最短的输入终止时终止输出。1是;0否 | overlay=shortest=1 |
format | ‘yuv420’ / ‘yuv420p10’ / ‘yuv422’ / ‘yuv422p10’ / ‘yuv444’ / ‘rgb’ / ‘gbrp’ / ‘auto’ |
scale
缩放
参数 | 值 | 描述 | 示例 |
---|---|---|---|
w | number / expression | 缩放的宽度;当值为0时,使用输入宽度作为输出宽度;当值为负数时,根据提供的高度和源高度的比例 缩放宽度;当宽度高度都是负数,使用输入的宽度作为输出宽度。 | scale=w=10:y=10 |
h | number / expression | 缩放的宽度;当值为0时,使用输入高度作为输出高度;当值为负数时,根据提供的宽度和源宽度的比例 缩放高度;当宽度高度都是负数,使用输入的高度作为输出高度。 | |
eval | ‘init’ / ‘frame’ | 值为init 时,表达式只会执行一次求值(包含t / n 的表达式将不会变化);值为frame 时,表达式在每次输入帧都会求值。 |
rotate
旋转视频
参数 | 值 | 描述 | 示例 |
---|---|---|---|
angle / a | radian / expression | 角度(弧度表示) | rotate=a=PI / rotate=PI |
ow | number / expression | 输出宽度;默认iw; | rotate=ow=iw |
oh | number / expression | 输出高度;默认ih; | rotate=oh=iw |
fillcolor / c | hexadecimal color / ‘none’ | 输出区域颜色填充 | rotate=fillcolor=0xa1b2c3 |
scroll
以恒定速率滚动视频
参数 | 值 | 描述 | 示例 |
---|---|---|---|
horizontal / h | [-1,1] | 水平滚动速率 | scroll=h=0.01 |
vertical / v | [-1,1] | 垂直滚动速率 | scroll=v=0.01 |
hpos/ v | [0,1] | 初始水平位置 | scroll=hpos=0.5 |
vpos / v | [0,1] | 初始垂直位置 | scroll=vpos=0.5 |
vflip
垂直翻转视频
参数 | 值 | 描述 | 示例 |
---|---|---|---|
无 | -filter_complex “vflip” |
hflip
水平翻转视频
参数 | 值 | 描述 | 示例 |
---|---|---|---|
无 | -filter_complex “hflip” |
loop
帧 / 时间段 循环
参数 | 值 | 描述 | 示例 |
---|---|---|---|
loop | number | 循环次数。loop<0时,表示无限循环;loop>0时,表示循环次数;默认0 | loop=loop=1 |
start | number | 循环起始帧,默认0 | loop=start=0 |
time | number | 设定循环开始的秒数,仅在start=1时可用 | |
size | number | 设定点开始的循环帧数量,默认0 | loop=size=10 |
drawtext
描绘文本
参数 | 值 | 描述 | 示例 |
---|---|---|---|
x | number | 文本区域x轴坐标 | drawtext=x=10:y=10 |
y | number | 文本区域y轴坐标 | drawtext=x=10:y=10 |
fontfile | url | 字体文件 | drawtext=fontfile=“/catalog/sub_catalog/font.ttf” |
font | font | 字体,默认Sans | |
fontcolor | 十六进制色值 | 字体颜色 | drawtext=fontcolor=0xffffff |
fontcolor_expr | expression | 指定生成颜色的表达式,指定fontcolor_expr 会重写fontcolor | |
fontsize | number | 字体大小,默认16 | |
text | string | 描绘的文本 | |
textfile | url | 描绘的文本文件,需要utf-8编码;不能同时指定text和textfile,否则会报错 | |
start_number | number | 描绘起始帧,默认0 | |
alpha | [0,1] | 字体透明度 | |
tabsize | number | 每个tab键所使用的空格数,默认4 |
标签和引用
为输入的处理结果添加标签,在下一个处理包含上一个结果时,通过标签引用结果。
如:
ffmpeg -i input_1.mp4 -i input_2.mp4 -i input_3.mp4 -filter_complex [0:v]rotate=a=PI/4[给他个名字],[给他个名字][1:v]overlay=...
命令先把 input_1.mp4 应用 rotate,同时赋予标签[给他个名字]
,再引用rotate的结果([给他个名字]
)和 input_2.mp4 执行overlay。
[]
是标签的标记,可以是自定义的(建议使用英文),如[result_1]
;也可以通过下标对输入进行引用。[0:v][1:v][2:v]
分别表示对input_1.mp4,input_2.mp4,input_3.mp4进行引用(v表示对 video 的引用。若要引用 audio,使用[n:a]
)。