目錄
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 比例
比例可以表示為算式,或 numerator:denominator 的形式。
請注意,具有無限大 (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’
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’
0xDCDCDC
- ‘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 聲道配置
聲道配置指定多聲道音訊串流中聲道的空間佈置。若要指定聲道配置,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
- ‘9.1.6’
FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR+TSL+TSR
- ‘hexadecagonal’
FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
- ‘binaural’
BIL+BIR
- ‘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’ 等)
- 標準聲道配置的名稱(例如 ‘mono’、‘stereo’、‘4.0’、‘quad’、‘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 的位元 AND/OR 運算。
x 和 y 評估的結果會在執行位元運算之前轉換為整數。
請注意,轉換為整數和轉換回浮點數都可能損失精確度。請注意大數(通常為 2^53 及更大)的非預期結果。
- ceil(expr)
將表達式 expr 的值向上捨入到最接近的整數。例如,"ceil(1.5)" 為 "2.0"。
- clip(x, min, max)
傳回 x 的值,限制在 min 和 max 之間。
- 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)
尋找輸入值,使以 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(idx, expr)
將表達式 expr 的值儲存在內部變數中。idx 指定要儲存值的變數索引,其值範圍為 0 到 9。函式傳回儲存在內部變數中的值。
儲存的值可以使用
ld(var)
擷取。注意:變數目前未在表達式之間共用。
- tan(x)
計算 x 的正切值。
- tanh(x)
計算 x 的雙曲正切值。
- taylor(expr, x)
- taylor(expr, x, idx)
在 x 處評估泰勒級數,給定表示函式在 0 處的第
ld(idx)
階導數的表達式。當級數不收斂時,結果未定義。
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
假設表達式在具有非零值時被視為「true」,請注意
*
的作用類似 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
4 參見
ffmpeg, ffplay, ffprobe, libavutil
5 作者
FFmpeg 開發者。
有關作者身份的詳細資訊,請參閱專案的 Git 歷史記錄 (https://git.ffmpeg.org/ffmpeg),例如,在 FFmpeg 原始碼目錄中輸入命令 git log
,或瀏覽線上儲存庫 https://git.ffmpeg.org/ffmpeg。
特定元件的維護者列在原始碼樹狀結構中的檔案 MAINTAINERS 中。
本文件於 January 21, 2025 使用 makeinfo 產生。
託管由 telepoint.bg 提供