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 界面。

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

两个表达式expr1和expr2可以组合形成另一个表达式“ expr1 ; expr2 ”。 expr1和expr2依次计算,新表达式的计算结果为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)

对x和y进行按位和/或运算。

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

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

ceil(expr)

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

clip(x, min, max)

返回介于min和max之间的x值。

cos(x)

计算x的余弦。

cosh(x)

计算x的双曲余弦。

eq(x, y)

如果x和y相等, 则返回 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)

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

gt(x, y)

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

gte(x, y)

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

hypot(x, y)

该函数与C语言中的同名函数类似;它返回“sqrt( x * x + y * y )”,即边长为x和y的直角三角形的斜边长度,或者点 ( 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)

返回x和y之间按z量进行的线性插值。

log(x)

计算x的自然对数。

lt(x, y)

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

lte(x, y)

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

max(x, y)

返回x和y之间的最大值。

min(x, y)

返回x和y之间的最小值。

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 另请参阅

ffmpeg、ffplay、ffprobe、 libavutil

5 位作者

FFmpeg 开发人员。

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

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

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

由telepoint.bg提供的托管