FFmpeg 实用程序文档

目录

1 说明

本文档描述了 libavutil 库提供的一些通用功能和实用程序。

2 语法

本节记录 FFmpeg 库和工具使用的语法和格式。

2.1 Quoting and escaping

除非明确指定,FFmpeg 采用以下引用和转义机制。应用以下规则:

  • ''' 和 '\' 是特殊字符(分别用于引用和转义)。除了它们之外,可能还有其他特殊字符,具体取决于使用转义和引用的特定语法。
  • 特殊字符通过在其前面添加 ' 进行转义\'。
  • ' 之间包含的所有字符' 按字面意思包含在已解析的字符串中。引号字符 ''' 本身不能被引用,因此您可能需要关闭引用并转义它。
  • 除非转义或引用,否则前导和尾随空格将从解析的字符串中删除。

请注意,在使用命令行或脚本时,您可能需要添加第二级转义,这取决于所采用的 shell 语言的语法。

函数av_get_token定义在 libavutil/avstring.h可用于根据上面定义的规则解析引用或转义的标记。

工具工具/ffescapeFFmpeg 源代码树中的内容可用于自动引用或转义脚本中的字符串。

2.1.1 示例

  • Crime d'Amour转义包含特殊字符的字符串'
    Crime d\'Amour
    
  • 上面的字符串包含引号,因此'在引用它时需要转义:
    'Crime d'\''Amour'
    
  • 使用引号包含前导或尾随空格:
    '  this string starts and ends with whitespaces  '
    
  • 转义和引用可以混合在一起:
    ' The string '\'string\'' is a string '
    
  • 包含文字 '\' 您可以使用转义或引用:
    'c:\foo' can be written as c:\\foo
    

2.2 Date

可接受的语法是:

[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
now

如果该值为“now”,则需要当前时间。

除非附加 Z,否则时间为本地时间,在这种情况下,它被解释为 UTC。如果未指定年月日部分,则采用当前年月日。

2.3 Time duration

有两种可接受的语法来表示持续时间。

[-][HH:]MM:SS[.m...]

HH表示小时数,MM表示分钟数,最多 2 位数字,SS表示秒数,最多 2 位数字。末尾的 m 表示 SS十进制值。

或者

[-]S+[.m...][s|ms|us]

S表示秒数,带有可选的小数部分 m。可选的文字后缀 's','多发性硬化症' 或者 '我们' 表示将该值分别解释为秒、毫秒或微秒。

在这两个表达式中,可选的 '-' 表示负持续时间。

2.3.1 示例

以下示例均为有效持续时间:

55

55秒

0.2

0.2秒

200ms

200毫秒,即0.2秒

200000us

200000微秒,即0.2秒

12:03:45

12小时03分45秒

23.189

23.189秒

2.4 Video size

指定源视频的大小,它可以是width x height形式的字符串 ,或者是大小缩写的名称。

可以识别以下缩写:

ntsc

720x480

pal

720x576

qntsc

352x240

qpal

352x288

sntsc

640x480

spal

768x576

film

352x240

ntsc-film

352x240

sqcif

128x96

qcif

176x144

cif

352x288

4cif

704x576

16cif

1408x1152

qqvga

160x120

qvga

320x240

vga

640x480

svga

800x600

xga

1024x768

uxga

1600x1200

qxga

2048x1536

sxga

1280x1024

qsxga

2560x2048

hsxga

5120x4096

wvga

852x480

wxga

1366x768

wsxga

1600x1024

wuxga

1920x1200

woxga

2560x1600

wqsxga

3200x2048

wquxga

3840x2400

whsxga

6400x4096

whuxga

7680x4800

cga

320x200

ega

640x350

hd480

852x480

hd720

1280x720

hd1080

1920x1080

2k

2048x1080

2kflat

1998x1080

2kscope

2048x858

4k

4096x2160

4kflat

3996x2160

4kscope

4096x1716

nhd

640x360

hqvga

240x160

wqvga

400x240

fwqvga

432x240

hvga

480x320

qhd

960x540

2kdci

2048x1080

4kdci

4096x2160

uhd2160

3840x2160

uhd4320

7680x4320

2.5 Video rate

指定视频的帧速率,表示为每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。

可以识别以下缩写:

ntsc

30000/1001

pal

25/1

qntsc

30000/1001

qpal

25/1

sntsc

30000/1001

spal

25/1

film

24/1

ntsc-film

24000/1001

2.6 Ratio

比率可以表示为表达式,或采用 分子:分母 的形式。

请注意,具有无限 (1/0) 或负值的比率被视为有效,因此如果要排除这些值,则应检查返回的值。

未定义的值可以使用“0:0”字符串来表示。

2.7 Color

它可以是如下定义的颜色名称(不区分大小写的匹配)或序列 [0x|#]RRGGBB[AA],可能后跟 @ 和表示 alpha 分量的字符串。

alpha分量可以是由“0x”后跟一个十六进制数或0.0到1.0之间的十进制数组成的字符串,表示不透明度值('0x00' 或者 '0.0' 表示完全透明,'0xff' 或者 '1.0' 完全不透明)。如果未指定 alpha 分量,则 '0xff' 假设。

字符串 '随机的' 将产生随机颜色。

可以识别以下颜色名称:

AliceBlue

0xF0F8FF

AntiqueWhite

0xFAEBD7

Aqua

0x00FFFF

Aquamarine

0x7FFFD4

Azure

0xF0FFFF

Beige

0xF5F5DC

Bisque

0xFFE4C4

Black

0x000000

BlanchedAlmond

0xFFEBCD

Blue

0x0000FF

BlueViolet

0x8A2BE2

Brown

0xA52A2A

BurlyWood

0xDEB887

CadetBlue

0x5F9EA0

Chartreuse

0x7FFF00

Chocolate

0xD2691E

Coral

0xFF7F50

CornflowerBlue

0x6495ED

Cornsilk

0xFFF8DC

Crimson

0xDC143C

Cyan

0x00FFFF

DarkBlue

0x00008B

DarkCyan

0x008B8B

DarkGoldenRod

0xB8860B

DarkGray

0xA9A9A9

DarkGreen

0x006400

DarkKhaki

0xBDB76B

DarkMagenta

0x8B008B

DarkOliveGreen

0x556B2F

Darkorange

0xFF8C00

DarkOrchid

0x9932CC

DarkRed

0x8B0000

DarkSalmon

0xE9967A

DarkSeaGreen

0x8FBC8F

DarkSlateBlue

0x483D8B

DarkSlateGray

0x2F4F4F

DarkTurquoise

0x00CED1

DarkViolet

0x9400D3

DeepPink

0xFF1493

DeepSkyBlue

0x00BFFF

DimGray

0x696969

DodgerBlue

0x1E90FF

FireBrick

0xB22222

FloralWhite

0xFFFAF0

ForestGreen

0x228B22

Fuchsia

0xFF00FF

Gainsboro

0xDCDCCDC

GhostWhite

0xF8F8FF

Gold

0xFFD700

GoldenRod

0xDAA520

Gray

0x808080

Green

0x008000

GreenYellow

0xADFF2F

HoneyDew

0xF0FFF0

HotPink

0xFF69B4

IndianRed

0xCD5C5C

Indigo

0x4B0082

Ivory

0xFFFFF0

Khaki

0xF0E68C

Lavender

0xE6E6FA

LavenderBlush

0xFFF0F5

LawnGreen

0x7CFC00

LemonChiffon

0xFFFACD

LightBlue

0xADD8E6

LightCoral

0xF08080

LightCyan

0xE0FFFF

LightGoldenRodYellow

0xFAFAD2

LightGreen

0x90EE90

LightGrey

0xD3D3D3

LightPink

0xFFB6C1

LightSalmon

0xFFA07A

LightSeaGreen

0x20B2AA

LightSkyBlue

0x87CEFA

LightSlateGray

0x778899

LightSteelBlue

0xB0C4DE

LightYellow

0xFFFFE0

Lime

0x00FF00

LimeGreen

0x32CD32

Linen

0xFAF0E6

Magenta

0xFF00FF

Maroon

0x800000

MediumAquaMarine

0x66CDAA

MediumBlue

0x0000CD

MediumOrchid

0xBA55D3

MediumPurple

0x9370D8

MediumSeaGreen

0x3CB371

MediumSlateBlue

0x7B68EE

MediumSpringGreen

0x00FA9A

MediumTurquoise

0x48D1CC

MediumVioletRed

0xC71585

MidnightBlue

0x191970

MintCream

0xF5FFFA

MistyRose

0xFFE4E1

Moccasin

0xFFE4B5

NavajoWhite

0xFFDEAD

Navy

0x000080

OldLace

0xFDF5E6

Olive

0x808000

OliveDrab

0x6B8E23

Orange

0xFFA500

OrangeRed

0xFF4500

Orchid

0xDA70D6

PaleGoldenRod

0xEEE8AA

PaleGreen

0x98FB98

PaleTurquoise

0xAFEEEE

PaleVioletRed

0xD87093

PapayaWhip

0xFFEFD5

PeachPuff

0xFFDAB9

Peru

0xCD853F

Pink

0xFFC0CB

Plum

0xDDA0DD

PowderBlue

0xB0E0E6

Purple

0x800080

Red

0xFF0000

RosyBrown

0xBC8F8F

RoyalBlue

0x4169E1

SaddleBrown

0x8B4513

Salmon

0xFA8072

SandyBrown

0xF4A460

SeaGreen

0x2E8B57

SeaShell

0xFFF5EE

Sienna

0xA0522D

Silver

0xC0C0C0

SkyBlue

0x87CEEB

SlateBlue

0x6A5ACD

SlateGray

0x708090

Snow

0xFFFAFA

SpringGreen

0x00FF7F

SteelBlue

0x4682B4

Tan

0xD2B48C

Teal

0x008080

Thistle

0xD8BFD8

Tomato

0xFF6347

Turquoise

0x40E0D0

Violet

0xEE82EE

Wheat

0xF5DEB3

White

0xFFFFFF

WhiteSmoke

0xF5F5F5

Yellow

0xFFFF00

YellowGreen

0x9ACD32

2.8 Channel Layout

通道布局指定多通道音频流中通道的空间布置。为了指定通道布局,FFmpeg 使用特殊语法。

各个频道由 ID 标识,如下表所示:

FL

左前

FR

右前方

FC

前中心

LFE

低频

BL

左后侧

BR

右后

FLC

前偏左

FRC

前偏右

BC

后中心

SL

左侧

SR

右侧

TC

顶部中心

TFL

左前上方

TFC

顶部前中心

TFR

右前上方

TBL

左上后侧

TBC

上后中心

TBR

右上后侧

DL

向左缩混

DR

右缩混

WL

左宽

WR

右宽

SDL

环绕直接左

SDR

直接右环绕

LFE2

低频2

标准通道布局组合可以使用以下标识符来指定:

mono

FC

stereo

FL+FR

2.1

FL+FR+LFE

3.0

FL+FR+FC

3.0(back)

FL+FR+BC

4.0

FL+FR+FC+BC

quad

FL+FR+BL+BR

quad(side)

FL+FR+SL+SR

3.1

FL+FR+FC+LFE

5.0

FL+FR+FC+BL+BR

5.0(side)

FL+FR+FC+SL+SR

4.1

FL+FR+FC+LFE+BC

5.1

FL+FR+FC+LFE+BL+BR

5.1(side)

FL+FR+FC+LFE+SL+SR

6.0

FL+FR+FC+BC+SL+SR

6.0(front)

FL+FR+FLC+FRC+SL+SR

3.1.2

FL+FR+FC+LFE+TFL+TFR

hexagonal

FL+FR+FC+BL+BR+BC

6.1

FL+FR+FC+LFE+BC+SL+SR

6.1

FL+FR+FC+LFE+BL+BR+BC

6.1(front)

FL+FR+LFE+FLC+FRC+SL+SR

7.0

FL+FR+FC+BL+BR+SL+SR

7.0(front)

FL+FR+FC+FLC+FRC+SL+SR

7.1

FL+FR+FC+LFE+BL+BR+SL+SR

7.1(wide)

FL+FR+FC+LFE+BL+BR+FLC+FRC

7.1(wide-side)

FL+FR+FC+LFE+FLC+FRC+SL+SR

5.1.2

FL+FR+FC+LFE+BL+BR+TFL+TFR

octagonal

FL+FR+FC+BL+BR+BC+SL+SR

cube

FL+FR+BL+BR+TFL+TFR+TBL+TBR

5.1.4

FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR

7.1.2

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR

7.1.4

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR

7.2.3

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2

9.1.4

FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR

hexadecagonal

FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR

downmix

DL+DR

22.2

FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR

自定义通道布局可以指定为一系列术语,用“+”分隔。每个术语可以是:

  • 单个频道的名称(例如'FL','FR','FC','低频效果”等),每个选项都可以在“@”之后包含自定义名称(例如“FL@左','FR@右','FC@中心','LFE@低频', ETC。)

标准通道布局可以通过以下方式指定:

  • 单个频道的名称(例如'FL','FR','FC','低频效果', ETC。)
  • 标准通道布局的名称(例如“单核细胞增多症','立体声','4.0','四边形','5.0', ETC。)
  • 多个通道,以十进制表示,后跟“c”,生成该通道数的默认通道布局(请参阅函数 av_channel_layout_default)。请注意,并非所有通道数都有默认布局。
  • 多个通道(十进制),后跟“C”,产生具有指定通道数的未知通道布局。请注意,并非所有通道布局规范字符串都支持未知通道布局。
  • 通道布局掩码,以“0x”开头的十六进制(请参阅 AV_CH_*中的宏libavutil/channel_layout.h

在 libavutil 版本 53 之前,用于指定通道数量的尾随字符“c”是可选的,但现在是必需的,而通道布局掩码也可以指定为十进制数(当且仅当后面不跟有“c”或“C”)。

av_channel_layout_from_string另请参阅中定义的 函数libavutil/channel_layout.h

3 表达评估

当评估算术表达式时,FFmpeg 使用内部公式评估器,通过libavutil/eval.h 界面。

表达式可以包含一元、二元运算符、常量和函数。

两个表达式expr1expr2可以组合形成另一个表达式“ expr1 ; expr2 ”。 expr1expr2依次计算,新表达式的计算结果为expr2的值。

可以使用以下二元运算符:+, -, *, /, ^

可以使用以下一元运算符:+, -.

可以使用以下功能:

abs(x)

计算x的绝对值。

acos(x)

计算x的反余弦。

asin(x)

计算x的反正弦。

atan(x)

计算x的反正切。

atan2(x, y)

计算y / x的反正切主值。

between(x, min, max)

如果x大于或等于min且小于或等于max,则返回 1,否则返回 0。

bitand(x, y)
bitor(x, y)

对xy进行按位和/或运算。

在执行按位运算之前, xy的计算结果将转换为整数。

请注意,转换为整数和转换回浮点数都可能会丢失精度。请注意大数字(通常为 2^53 及更大)的意外结果。

ceil(expr)

将表达式expr的值向上舍入为最接近的整数。例如,“ceil(1.5)”为“2.0”。

clip(x, min, max)

返回介于minmax之间的x值。

cos(x)

计算x的余弦。

cosh(x)

计算x的双曲余弦。

eq(x, y)

如果xy相等, 则返回 1 ,否则返回 0。

exp(x)

计算x的指数(以e欧拉数为底)。

floor(expr)

将表达式expr的值向下舍入到最接近的整数。例如,“下限(-1.5)”为“-2.0”。

gauss(x)

计算x的高斯函数,对应于 exp(-x*x/2) / sqrt(2*PI)

gcd(x, y)

返回xy的最大公约数。如果xy都为 0 或者其中一个或两个都小于零,则行为未定义。

gt(x, y)

如果x大于y ,则返回 1 ,否则返回 0。

gte(x, y)

如果x大于或等于y ,则返回 1 ,否则返回 0。

hypot(x, y)

该函数与C语言中的同名函数类似;它返回“sqrt( x * x + y * y )”,即边长为xy的直角三角形的斜边长度,或者点 ( x , y ) 距原点的距离。

if(x, y)

计算x,如果结果非零,则返回y的计算结果,否则返回 0。

if(x, y, z)

计算x,如果结果非零,则返回y的计算结果,否则返回z的计算结果。

ifnot(x, y)

计算x,如果结果为零,则返回y的计算结果,否则返回 0。

ifnot(x, y, z)

计算x,如果结果为零,则返回y的计算结果,否则返回z的计算结果。

isinf(x)

如果x为 +/-INFINITY,则返回 1.0,否则返回 0.0。

isnan(x)

如果x为 NAN,则返回 1.0 ,否则返回 0.0。

ld(var)

使用数字var加载内部变量的值 ,该值之前使用 st( var , expr ) 存储。该函数返回加载的值。

lerp(x, y, z)

返回xy之间按z量进行的线性插值。

log(x)

计算x的自然对数。

lt(x, y)

如果x小于y ,则返回 1 ,否则返回 0。

lte(x, y)

如果x小于或等于y ,则返回 1 ,否则返回 0。

max(x, y)

返回xy之间的最大值。

min(x, y)

返回xy之间的最小值。

mod(x, y)

计算x除以y的余数。

not(expr)

如果expr为零, 则返回 1.0 ,否则返回 0.0。

pow(x, y)

计算x提升y的幂,相当于“( x )^( y )”。

print(t)
print(t, l)

使用 loglevel l打印表达式t的值。如果 未指定l,则使用默认日志级别。返回打印的表达式的值。

打印 t 和日志级别 l

random(x)

返回 0.0 到 1.0 之间的伪随机值。x是用于保存种子/状态的内部变量的索引。

root(expr, max)

查找一个输入值,其参数ld(0)的expr表示的函数在区间 0.. max中为 0 。

expr中的表达式必须表示连续函数,否则结果是未定义的。

ld(0)用于表示函数输入值,这意味着给定的表达式将使用表达式可以访问的各种输入值进行多次计算 ld(0)。当表达式计算结果为 0 时,将返回相应的输入值。

round(expr)

将表达式expr的值舍入为最接近的整数。例如,“round(1.5)”是“2.0”。

sgn(x)

计算x的符号。

sin(x)

计算x的正弦。

sinh(x)

计算x的双曲正弦。

sqrt(expr)

计算expr的平方根。这相当于“( expr )^.5”。

squish(x)

计算表达式1/(1 + exp(4*x))

st(var, expr)

将表达式expr的值存储在内部变量中。var指定存储值的变量号,范围是 0 到 9。函数返回内部变量中存储的值。请注意,变量当前不在表达式之间共享。

tan(x)

计算x的正切。

tanh(x)

计算x的双曲正切。

taylor(expr, x)
taylor(expr, x, id)

给定一个表示函数在 0 处的阶导数的 表达式,计算x处的泰勒级数。ld(id)

当级数不收敛时,结果是不确定的。

ld(id)用于表示expr中的导数阶,这意味着给定的表达式将使用表达式可以访问的各种输入值进行多次计算 ld(id)。如果未指定 id ,则假定为 0。

请注意,当您在 y 处求导数而不是 0 时, taylor(expr, x-y)可以使用。

time(0)

返回当前(挂钟)时间(以秒为单位)。

trunc(expr)

将表达式expr的值朝零舍入到最接近的整数。例如,“trunc(-1​​.5)”为“-1.0”。

while(cond, expr)

当表达式cond非零时计算表达式expr ,并返回最后一次expr计算的值,如果cond始终为 false,则返回 NAN。

以下常量可用:

PI

单位圆盘面积,约为 3.14

E

exp(1)(欧拉数),大约 2.718

PHI

黄金比例 (1+sqrt(5))/2,约为 1.618

假设如果表达式具有非零值,则该表达式被视为“真”,请注意:

*工作原理类似于 AND

+工作原理类似于或

例如构造:

if (A AND B) then C

相当于:

if(A*B, C)

在 C 代码中,您可以扩展一元和二元函数的列表,并定义可识别的常量,以便它们可用于您的表达式。

评估器还可以识别国际系统单位前缀。如果在前缀后面附加“i”,则使用二进制前缀,它基于 1024 的幂而不是 1000 的幂。“B”后缀将值乘以 8,并且可以附加在单位前缀之后或单独使用。这允许使用“KB”、“MiB”、“G”和“B”作为数字后缀。

可用的国际系统前缀列表如下,并指示相应的 10 和 2 的幂。

y

10^-24 / 2^-80

z

10^-21 / 2^-70

a

10^-18 / 2^-60

f

10^-15 / 2^-50

p

10^-12 / 2^-40

n

10^-9 / 2^-30

u

10^-6 / 2^-20

m

10^-3 / 2^-10

c

10^-2

d

10^-1

h

10^2

k

10^3 / 2^10

K

10^3 / 2^10

M

10^6 / 2^20

G

10^9 / 2^30

T

10^12 / 2^40

P

10^15 / 2^50

E

10^18 / 2^60

Z

10^21 / 2^70

Y

10^24 / 2^80

4 另请参阅

ffmpegffplayffprobelibavutil

5 位作者

FFmpeg 开发人员。

git log有关作者身份的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源目录中键入命令 ,或浏览https://git 的在线存储库。 ffmpeg.org/ffmpeg

文件中列出了特定组件的维护者 维护者在源代码树中。

本文档于2023 年 11 月 16 日使用makeinfo 生成。

由telepoint.bg提供的托管