1 描述
本文档介绍了 libavutil 库提供的一些通用功能和实用程序。
2 语法
本节记录了 FFmpeg 库和工具所采用的语法和格式。
2.1 引用和转义
除非明确指定,否则 FFmpeg 采用以下引用和转义机制。适用以下规则:
- ‘'’ 和 ‘\’ 是特殊字符(分别用于引用和转义)。除它们之外,可能还有其他特殊字符,具体取决于使用转义和引用的特定语法。
- 通过在特殊字符前加上‘\’来对其进行转义。
- 所有括在‘'’之间的字符都按字面意思包含在解析的字符串中。引号字符‘'’本身不能用引号引起来,因此您可能需要关闭引号并将其转义。
- 除非转义或用引号引起来,否则前导和尾随空格将从解析的字符串中删除。
请注意,在使用命令行或脚本时,您可能需要添加第二级转义,这取决于所采用的 shell 语言的语法。
libavutil/avstring.h 中定义的函数 av_get_token 可用于根据上面定义的规则解析引用或转义的标记。
FFmpeg 源代码树中的工具 tools/ffescape 可用于自动引用或转义脚本中的字符串。
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 日期
可接受的语法是:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
now
如果值为“now”,则采用当前时间。
时间是本地时间,除非附加 Z,在这种情况下它将被解释为 UTC。如果未指定年月日部分,则采用当前年月日。
2.3 时间持续时间
有两种可接受的语法用于表达时间持续时间。
[-][HH:]MM:SS[.m...]
HH 表示小时数,MM 表示分钟数(最多 2 位数字),SS 表示秒数(最多 2 位数字)。末尾的 m 表示 SS 的十进制值。
或
[-]S+[.m...][s|ms|us]
S 表示秒数,小数部分 m 可选。可选文字后缀“s”、“ms”或“us”分别表示将值解释为秒、毫秒或微秒。
在这两个表达式中,可选的“
-
”表示负持续时间。
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 视频大小
指定源视频的大小,可以是widthxheight形式的字符串,也可以是大小缩写的名称。
可识别以下缩写:
‘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 视频速率
指定视频的帧速率,以每秒生成的帧数表示。它必须是 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 比率
比率可以表示为表达式,也可以表示为分子:分母的形式。
请注意,具有无限(1/0)或负值的比率被视为有效,因此如果您想排除这些值,则应检查返回值。
未定义的值可以使用“0:0”字符串表示。
2.7 颜色
它可以是下面定义的颜色名称(不区分大小写的匹配)或 [0x|#]RRGGBB[AA] 序列,可能后跟 @ 和表示 alpha 分量的字符串。
alpha 分量可能是一个由“0x”后面跟着十六进制数或 0.0 到 1.0 之间的十进制数组成的字符串,表示不透明度值(“0x00”或“0.0”表示完全透明,“0xff”或“1.0”表示完全不透明)。如果未指定 alpha 分量,则假定为“0xff”。
字符串“random”将产生随机颜色。
以下颜色名称是已识别:
‘AliceBlue’
0xF0F8FF
‘AntiqueWhite’
0xFAEBD7
‘Aqua’
0x00FFFF
‘Aquamarine’
0x7FFFD4
‘Azure’
0xF0FFFF
‘Beige’
0xF5F5DC
‘Bisque’
0xFFE4C4
‘Black’
0x00 0000
‘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’
0xDCDCDC
‘GhostWhite’
0xF8F8FF
‘Gold’
0xFFD700
‘GoldenRod’
0xDAA520
‘Gray’
0x808080
‘Green’
0x008000
‘GreenYellow’
0xADFF 2F
‘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’
0xFF A500
‘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’
0 xA0522D
‘Silver’
0xC0C0C0
‘SkyBlue’
0x87CEEB
‘SlateBlue’
0x6A5A CD
‘SlateGray’
0x708090
‘Snow’
0xFFFAFA
‘SpringGreen’
0x00FF7F
‘SteelBlue’
0x4682B4
‘Tan’
0xD2B48C
‘Teal’
0x008080
‘Thistle’
0xD8BFD8
‘Tomato’
0xFF6347
‘Turquoise’
0x40E0D0
‘Violet’
0xEE82EE
‘Wheat’
0xF5DEB3
‘White’
0xFFFFFF
‘
<2 26>
’
0xF5F5F5
‘Yellow’
0xFFFF00
‘YellowGreen’
0x9ACD32
2.8 声道布局
声道布局指定多声道音频流中声道的空间分布。为了指定声道布局,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+B L+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”、“LFE”等),每个通道都可以在“@”后包含自定义名称(例如“FL@Left”、“FR@Right”、“FC@Center”、“LFE@Low_Frequency”等)
标准通道布局可以通过以下方式指定:
- 单个通道的名称(例如“FL”、“FR”、“FC”、“LFE”等)
- 标准通道布局的名称(例如“单声道”、“立体声”、“4.0”、“四声道”、“5.0”等)
- 十进制的通道数,后跟“c”,产生该通道数的默认通道布局(请参阅函数 av_channel_layout_default)。请注意,并非所有通道数都有默认布局。
- 十进制的通道数,后跟“C”,产生具有指定通道数的未知通道布局。请注意,并非所有通道布局规范字符串都支持未知通道布局。
- 通道布局掩码,以“0x”开头的十六进制格式(请参阅 libavutil/channel_layout.h 中的 AV_CH_* 宏。
在 libavutil 版本 53 之前,用于指定通道数的尾随字符“c”是可选的,但现在是必需的,而通道布局掩码也可以指定为十进制数(当且仅当后面没有“c”或“C”时)。
另请参阅 libavutil/channel_layout.h 中定义的函数 av_channel_layout_from_string。
3 表达式求值
在求算术表达式的值时,FFmpeg 使用通过 libavutil/eval.h 接口实现的内部公式求值器。
表达式可能包含一元、二元运算符、常量和函数。
两个表达式 expr1 和 expr2 可以组合形成另一个表达式“expr1;expr2”。依次对 expr1 和 expr2 进行求值,新表达式求值为 expr2 的值。
以下二元运算符可用:+、-、*、/、^。
以下一元运算符可用:+、-。
一些内部变量可用于存储和加载中间结果。可以使用 ld 和 st 函数访问它们,并使用从 0 到 9 不等的索引参数来指定要访问哪个内部变量。
以下函数可用:
- abs(x)
计算 x 的绝对值。
- acos(x)
计算 x 的反余弦。
- asin(x)
计算 x 的反正弦。
- atan(x)
计算 x 的反正切。
- atan2(y, x)
计算 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)
返回在最小值和最大值之间截断的 x 值。
- cos(x)
计算 x 的余弦。
- cosh(x)
计算 x 的双曲余弦。
- eq(x, y)
如果 x 和 y 相等,则返回 1,否则返回 0。
- exp(x)
计算 x 的指数(底数为 e,即欧拉数)。
- floor(expr)
将表达式 expr 的值向下舍入为最接近的整数。例如,“floor(-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(idx)
加载索引为 idx 的内部变量的值,该值先前已用 st(idx, 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)
使用日志级别 l 打印表达式 t 的值。如果未指定 l,则使用默认日志级别。返回打印的表达式的值。
- random(idx)
返回 0.0 到 1.0 之间的伪随机值。idx 是用于保存种子/状态的内部变量的索引,可以预先用 st(idx) 存储。
要初始化种子,您需要将种子值作为 64 位无符号整数存储在索引为 idx 的内部变量中。
例如,将值为 42 的种子存储在索引为 0 的内部变量中并打印一些随机值:
st(0,42); print(random(0)); print(random(0)); print(random(0)) - randomi(idx, min, max)
返回 min 和 max 之间的间隔内的伪随机值。idx 是用于保存种子/状态的内部变量的索引,可以预先用 st(idx) 存储。
要初始化种子,您需要将种子值作为 64 位无符号整数存储在索引为 idx 的内部变量中。
- root(expr, max)
在 0..max 区间内找到一个输入值,对于该输入值,expr 表示的函数(参数 ld(0))为 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(idx, expr)
将表达式 expr 的值存储在内部变量中。 idx 指定存储值的变量的索引,它是一个从 0 到 9 的值。该函数返回存储在内部变量中的值。
可以使用 ld(var) 检索存储的值。
注意:变量目前不在表达式之间共享。
- tan(x)
计算 x 的正切。
- tanh(x)
计算 x 的双曲正切。
- taylor(expr, x)
- taylor(expr, x, idx)
给定一个表示函数在 0 处第 ld(idx) 阶导数的表达式,在 x 处求泰勒级数。
当级数不收敛时,结果不确定。
ld(idx) 用于表示 expr 中的导数阶数,这意味着给定的表达式将使用表达式可以通过 ld(idx) 访问的各种输入值进行多次求值。如果未指定 idx,则假定为 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
+ 相当于 OR
例如构造:
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