1 Mô tả
Tài liệu này mô tả một số tính năng và tiện ích chung do thư viện libavutil cung cấp.
2 Cú pháp
Phần này ghi lại cú pháp và định dạng được sử dụng bởi các thư viện và công cụ FFmpeg.
2.1 Trích dẫn và thoát
FFmpeg áp dụng cơ chế trích dẫn và thoát sau đây, trừ khi được chỉ định rõ ràng. Các quy tắc sau được áp dụng:
- ''' và '\' là các ký tự đặc biệt (tương ứng dùng để trích dẫn và thoát). Ngoài chúng, có thể có các ký tự đặc biệt khác tùy thuộc vào cú pháp cụ thể nơi sử dụng tính năng thoát và trích dẫn.
- Một ký tự đặc biệt được thoát bằng cách thêm tiền tố ‘\’ vào trước nó.
- Tất cả các ký tự nằm giữa '''' đều được bao gồm trong chuỗi được phân tích cú pháp. Bản thân ký tự trích dẫn '' không thể được trích dẫn, vì vậy bạn có thể cần phải đóng trích dẫn và thoát khỏi nó.
- Các khoảng trắng ở đầu và cuối, trừ khi được thoát hoặc được trích dẫn, sẽ bị xóa khỏi chuỗi được phân tích cú pháp.
Lưu ý rằng bạn có thể cần thêm cấp độ thoát thứ hai khi sử dụng dòng lệnh hoặc tập lệnh, điều này phụ thuộc vào cú pháp của ngôn ngữ shell được áp dụng.
Hàm av_get_token được xác định trong libavutil/avstring.h có thể được sử dụng để phân tích mã thông báo được trích dẫn hoặc thoát theo các quy tắc được xác định ở trên.
Công cụ tools/ffescape trong cây nguồn FFmpeg có thể được sử dụng để tự động trích dẫn hoặc thoát khỏi một chuỗi trong tập lệnh.
2.1.1 Ví dụ
- Thoát khỏi chuỗi Crime d'Amour chứa ký tự đặc biệt ':
Crime d\'Amour - Chuỗi bên trên chứa một trích dẫn, do đó, ' cần phải thoát khi trích dẫn nó:
'Crime d'\''Amour' - Bao gồm các khoảng trắng ở đầu hoặc cuối bằng cách sử dụng dấu ngoặc kép:
' this string starts and ends with whitespaces ' - Thoát và trích dẫn có thể được trộn lẫn với nhau:
' The string '\'string\'' is a string ' - Để bao gồm chữ '\', bạn có thể sử dụng lối thoát hoặc trích dẫn:
'c:\foo' can be written as c:\\foo
2.2 Ngày
Cú pháp được chấp nhận là:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
now
Nếu giá trị là "bây giờ" thì phải mất thời gian hiện tại.
Thời gian là giờ địa phương trừ khi Z được thêm vào, trong trường hợp đó nó được hiểu là UTC. Nếu phần năm-tháng-ngày không được chỉ định thì nó sẽ lấy năm-tháng-ngày hiện tại.
2.3 Khoảng thời gian
Có hai cú pháp được chấp nhận để biểu thị khoảng thời gian.
[-][HH:]MM:SS[.m...]
HH biểu thị số giờ, MM số phút cho tối đa 2 chữ số và SS biểu thị số giây cho tối đa 2 chữ số. m ở cuối biểu thị giá trị thập phân cho SS.
hoặc
[-]S+[.m...][s|ms|us]
S biểu thị số giây, với phần thập phân tùy chọn m. Các hậu tố bằng chữ tùy chọn 's', 'ms' hoặc 'us' biểu thị để diễn giải giá trị tương ứng là giây, mili giây hoặc micro giây.
Trong cả hai biểu thức, tùy chọn ‘-' biểu thị thời lượng âm.
2.3.1 Ví dụ
Các ví dụ sau đây đều là khoảng thời gian hợp lệ:
- ‘55’
55 giây
- ‘0.2’
0,2 giây
- ‘200ms’
200 mili giây, tức là 0,2 giây
- ‘200000us’
200000 micro giây, tức là 0,2 giây
- ‘12:03:45’
12 giờ 03 phút 45 giây
- ‘23.189’
23,189 giây
2.4 Kích thước video
Chỉ định kích thước của video có nguồn, nó có thể là một chuỗi có dạng chiều rộngxheight hoặc tên viết tắt của kích thước.
Các chữ viết tắt sau đây được công nhận:
- ‘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 Tốc độ video
Chỉ định tốc độ khung hình của video, được biểu thị bằng số khung hình được tạo mỗi giây. Nó phải là một chuỗi ở định dạng frame_rate_num/frame_rate_den, một số nguyên, một số float hoặc một chữ viết tắt tốc độ khung hình video hợp lệ.
Các chữ viết tắt sau đây được công nhận:
- ‘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 Tỷ lệ
Tỷ lệ có thể được biểu diễn dưới dạng biểu thức hoặc ở dạng tử số:mẫu số.
Lưu ý rằng tỷ lệ có giá trị vô hạn (1/0) hoặc âm được coi là hợp lệ, vì vậy bạn nên kiểm tra giá trị được trả về nếu muốn loại trừ các giá trị đó.
Giá trị không xác định có thể được biểu thị bằng chuỗi "0:0".
2.7 Màu sắc
Nó có thể là tên của một màu như được xác định bên dưới (khớp không phân biệt chữ hoa chữ thường) hoặc chuỗi [0x|#]RRGGBB[AA], có thể theo sau là @ và một chuỗi đại diện cho thành phần alpha.
Thành phần alpha có thể là một chuỗi được tạo bởi "0x" theo sau là số thập lục phân hoặc số thập phân trong khoảng từ 0,0 đến 1,0, đại diện cho giá trị độ mờ ('0x00' hoặc '0,0' có nghĩa là hoàn toàn trong suốt, '0xff' hoặc '1,0' hoàn toàn mờ đục). Nếu thành phần alpha không được chỉ định thì giả sử là '0xff'.
Chuỗi 'ngẫu nhiên' sẽ có màu ngẫu nhiên.
Tên màu sau đây được công nhận:
- ‘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’
0x00BFF
- ‘DimGray’
0x696969
- ‘DodgerBlue’
0x1E90FF
- ‘FireBrick’
0xB22222
- ‘FloralWhite’
0xFFFFAF0
- ‘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’
0xFFFFFF0
- ‘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
Bố cục kênh 2.8
Bố cục kênh chỉ định cách bố trí không gian của các kênh trong luồng âm thanh đa kênh. Để chỉ định bố cục kênh, FFmpeg sử dụng cú pháp đặc biệt.
Các kênh riêng lẻ được xác định bằng id, như được đưa ra trong bảng bên dưới:
- ‘FL’
phía trước bên trái
- ‘FR’
phía trước bên phải
- ‘FC’
trung tâm phía trước
- ‘LFE’
tần số thấp
- ‘BL’
quay lại bên trái
- ‘BR’
lưng bên phải
- ‘FLC’
phía trước bên trái của trung tâm
- ‘FRC’
phía trước bên phải trung tâm
- ‘BC’
trung tâm phía sau
- ‘SL’
bên trái
- ‘SR’
bên phải
- ‘TC’
Trung tâm hàng đầu
- ‘TFL’
phía trên phía trước bên trái
- ‘TFC’
trung tâm phía trước hàng đầu
- ‘TFR’
phía trên bên phải
- ‘TBL’
phía trên phía sau bên trái
- ‘TBC’
trung tâm phía trên phía sau
- ‘TBR’
phía trên phía sau bên phải
- ‘DL’
trộn xuống trái
- ‘DR’
downmix đúng
- ‘WL’
rộng bên trái
- ‘WR’
rộng bên phải
- ‘SDL’
bao quanh trực tiếp bên trái
- ‘SDR’
bao quanh trực tiếp bên phải
- ‘LFE2’
tần số thấp 2
Thành phần bố cục kênh tiêu chuẩn có thể được chỉ định bằng cách sử dụng các mã định danh sau:
- ‘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
Bố cục kênh tùy chỉnh có thể được chỉ định dưới dạng một chuỗi các thuật ngữ, được phân tách bằng dấu '+'. Mỗi thuật ngữ có thể là:
- tên của một kênh (ví dụ: 'FL', 'FR', 'FC', 'LFE', v.v.), mỗi kênh tùy chọn chứa một tên tùy chỉnh sau '@', (ví dụ: 'FL@Left', 'FR @Right', 'FC@Center', 'LFE@Low_Frequency', v.v.)
Bố cục kênh tiêu chuẩn có thể được chỉ định bằng cách sau:
- tên của một kênh (ví dụ: 'FL', 'FR', 'FC', 'LFE', v.v.)
- tên của bố cục kênh tiêu chuẩn (ví dụ: 'mono', 'stereo', '4.0', 'quad', '5.0', v.v.)
- một số kênh, ở dạng thập phân, theo sau là 'c', tạo ra bố cục kênh mặc định cho số kênh đó (xem hàm av_channel_layout_default). Lưu ý rằng không phải tất cả số lượng kênh đều có bố cục mặc định.
- một số kênh, ở dạng thập phân, theo sau là 'C', mang lại bố cục kênh không xác định với số lượng kênh được chỉ định. Lưu ý rằng không phải tất cả các chuỗi đặc tả bố cục kênh đều hỗ trợ bố cục kênh không xác định.
- mặt nạ bố cục kênh, ở dạng thập lục phân bắt đầu bằng "0x" (xem macro AV_CH_* trong libavutil/channel_layout.h.
Trước libavutil phiên bản 53, ký tự cuối "c" để chỉ định một số kênh là tùy chọn, nhưng bây giờ nó là bắt buộc, trong khi mặt nạ bố cục kênh cũng có thể được chỉ định dưới dạng số thập phân (nếu và chỉ khi không có "c" hoặc theo sau "C").
Xem thêm hàm av_channel_layout_from_string được xác định trong libavutil/channel_layout.h.
3 Đánh giá biểu thức
Khi đánh giá một biểu thức số học, FFmpeg sử dụng trình đánh giá công thức nội bộ, được triển khai thông qua giao diện libavutil/eval.h.
Một biểu thức có thể chứa các toán tử đơn phân, nhị phân, hằng số và hàm.
Hai biểu thức expr1 và expr2 có thể được kết hợp để tạo thành một biểu thức khác "expr1;expr2". expr1 và expr2 lần lượt được đánh giá và biểu thức mới ước tính giá trị của expr2.
Có sẵn các toán tử nhị phân sau: +, -, *, /, ^.
Có sẵn các toán tử đơn nguyên sau: +, -.
Một số biến nội bộ có thể được sử dụng để lưu trữ và tải các kết quả trung gian. Chúng có thể được truy cập bằng cách sử dụng hàm ld và st với đối số chỉ mục thay đổi từ 0 đến 9 để chỉ định biến nội bộ nào cần truy cập.
Các chức năng sau đây có sẵn:
- abs(x)
Tính giá trị tuyệt đối của x.
- acos(x)
Tính arccosine của x.
- asin(x)
Tính arcsin của x.
- atan(x)
Tính arctang của x.
- atan2(y, x)
Tính giá trị chính của tiếp tuyến của y/x.
- between(x, min, max)
Trả về 1 nếu x lớn hơn hoặc bằng min và nhỏ hơn hoặc bằng max, nếu không thì trả về 0.
- bitand(x, y)
- bitor(x, y)
Tính toán theo từng bit và/hoặc phép toán trên x và y.
Kết quả đánh giá x và y được chuyển đổi thành số nguyên trước khi thực hiện thao tác theo bit.
Lưu ý rằng cả việc chuyển đổi sang số nguyên và chuyển đổi trở lại dấu phẩy động đều có thể mất độ chính xác. Hãy cẩn thận với những kết quả không mong đợi đối với số lượng lớn (thường là 2^53 và lớn hơn).
- ceil(expr)
Làm tròn giá trị của biểu thức expr lên trên số nguyên gần nhất. Ví dụ: "trần (1.5)" là "2.0".
- clip(x, min, max)
Trả về giá trị của x được cắt bớt giữa mức tối thiểu và tối đa.
- cos(x)
Tính cosin của x.
- cosh(x)
Tính cosin hyperbol của x.
- eq(x, y)
Trả về 1 nếu x và y tương đương, 0 nếu không.
- exp(x)
Tính hàm mũ của x (với cơ số e là số Euler).
- floor(expr)
Làm tròn giá trị của biểu thức expr xuống số nguyên gần nhất. Ví dụ: "sàn(-1,5)" là "-2,0".
- gauss(x)
Tính hàm Gauss của x, tương ứng với exp(-x*x/2)/sqrt(2*PI).
- gcd(x, y)
Trả về ước chung lớn nhất của x và y. Nếu cả x và y đều bằng 0 hoặc một trong hai hoặc cả hai đều nhỏ hơn 0 thì hành vi không được xác định.
- gt(x, y)
Trả về 1 nếu x lớn hơn y, 0 nếu không.
- gte(x, y)
Trả về 1 nếu x lớn hơn hoặc bằng y, nếu không thì trả về 0.
- hypot(x, y)
Hàm này tương tự như hàm C cùng tên; nó trả về "sqrt(x*x + y*y)", độ dài cạnh huyền của một tam giác vuông có cạnh dài x và y hoặc khoảng cách của điểm (x, y) tính từ gốc tọa độ.
- if(x, y)
Đánh giá x, và nếu kết quả khác 0 thì trả về kết quả đánh giá của y, nếu không thì trả về 0.
- if(x, y, z)
Đánh giá x, và nếu kết quả khác 0 thì trả về kết quả đánh giá của y, nếu không thì trả về kết quả đánh giá của z.
- ifnot(x, y)
Đánh giá x, và nếu kết quả bằng 0 thì trả về kết quả đánh giá của y, nếu không thì trả về 0.
- ifnot(x, y, z)
Đánh giá x, và nếu kết quả bằng 0 thì trả về kết quả đánh giá của y, nếu không thì trả về kết quả đánh giá của z.
- isinf(x)
Trả về 1,0 nếu x là +/-INFINITY, 0,0 nếu không.
- isnan(x)
Trả về 1,0 nếu x là NAN, 0,0 nếu không.
- ld(idx)
Tải giá trị của biến nội bộ với chỉ mục idx, trước đó được lưu trữ bằng st(idx, expr). Hàm trả về giá trị được nạp.
- lerp(x, y, z)
Trả về nội suy tuyến tính giữa x và y theo lượng z.
- log(x)
Tính logarit tự nhiên của x.
- lt(x, y)
Trả về 1 nếu x nhỏ hơn y, 0 nếu không.
- lte(x, y)
Trả về 1 nếu x nhỏ hơn hoặc bằng y, nếu không thì trả về 0.
- max(x, y)
Trả về mức tối đa giữa x và y.
- min(x, y)
Trả về giá trị tối thiểu giữa x và y.
- mod(x, y)
Tính số dư của phép chia x cho y.
- not(expr)
Trả về 1,0 nếu expr bằng 0, 0,0 nếu không.
- pow(x, y)
Tính lũy thừa của x nâng y lên, nó tương đương với "(x)^(y)".
- print(t)
- print(t, l)
In giá trị của biểu thức t bằng loglevel l. Nếu l không được chỉ định thì mức nhật ký mặc định sẽ được sử dụng. Trả về giá trị của biểu thức được in.
- random(idx)
Trả về giá trị giả ngẫu nhiên trong khoảng từ 0,0 đến 1,0. idx là chỉ mục của biến nội bộ được sử dụng để lưu hạt giống/trạng thái, trước đó có thể được lưu trữ bằng st(idx).
Để khởi tạo hạt giống, bạn cần lưu trữ giá trị hạt giống dưới dạng số nguyên không dấu 64 bit trong biến nội bộ có chỉ mục idx.
Ví dụ: để lưu trữ hạt giống có giá trị 42 trong biến nội bộ có chỉ số 0 và in một vài giá trị ngẫu nhiên:
st(0,42); print(random(0)); print(random(0)); print(random(0)) - randomi(idx, min, max)
Trả về giá trị giả ngẫu nhiên trong khoảng giữa tối thiểu và tối đa. idx là chỉ mục của biến nội bộ sẽ được sử dụng để lưu hạt giống/trạng thái, có thể được lưu trữ trước đó bằng st(idx).
Để khởi tạo hạt giống, bạn cần lưu trữ giá trị hạt giống dưới dạng số nguyên không dấu 64 bit trong biến nội bộ có chỉ mục idx.
- root(expr, max)
Tìm một giá trị đầu vào mà hàm được biểu thị bằng expr với đối số ld(0) là 0 trong khoảng 0..max.
Biểu thức trong expr phải biểu thị một hàm liên tục nếu không kết quả sẽ không được xác định.
ld(0) được sử dụng để biểu thị giá trị đầu vào của hàm, có nghĩa là biểu thức đã cho sẽ được đánh giá nhiều lần với các giá trị đầu vào khác nhau mà biểu thức có thể truy cập thông qua ld(0). Khi biểu thức ước tính là 0 thì giá trị đầu vào tương ứng sẽ được trả về.
- round(expr)
Làm tròn giá trị của biểu thức expr tới số nguyên gần nhất. Ví dụ: "round(1.5)" là "2.0".
- sgn(x)
Tính dấu của x.
- sin(x)
Tính sin của x.
- sinh(x)
Tính sin hyperbol của x.
- sqrt(expr)
Tính căn bậc hai của expr. Điều này tương đương với "(expr)^.5".
- squish(x)
Tính biểu thức 1/(1 + exp(4*x)).
- st(idx, expr)
Lưu giá trị của biểu thức expr vào một biến nội bộ. idx chỉ định chỉ mục của biến nơi lưu trữ giá trị và đó là giá trị nằm trong khoảng từ 0 đến 9. Hàm trả về giá trị được lưu trong biến nội bộ.
Giá trị được lưu trữ có thể được lấy bằng ld(var).
Lưu ý: các biến hiện không được chia sẻ giữa các biểu thức.
- tan(x)
Tính tang của x.
- tanh(x)
Tính tang hyperbol của x.
- taylor(expr, x)
- taylor(expr, x, idx)
Tính giá trị chuỗi Taylor tại x, cho biểu thức biểu thị đạo hàm thứ ld(idx)-th của hàm số tại 0.
Khi chuỗi không hội tụ thì kết quả là không xác định.
ld(idx) được sử dụng để biểu thị thứ tự đạo hàm trong expr, có nghĩa là biểu thức đã cho sẽ được đánh giá nhiều lần với các giá trị đầu vào khác nhau mà biểu thức có thể truy cập thông qua ld(idx). Nếu idx không được chỉ định thì giả sử là 0.
Lưu ý, khi bạn có đạo hàm tại y thay vì 0, có thể sử dụng taylor(expr, x-y).
- time(0)
Trả về thời gian (đồng hồ treo tường) hiện tại tính bằng giây.
- trunc(expr)
Làm tròn giá trị của biểu thức expr về 0 đến số nguyên gần nhất. Ví dụ: "trunc(-1.5)" là "-1.0".
- while(cond, expr)
Đánh giá biểu thức expr trong khi biểu thức cond khác 0 và trả về giá trị của đánh giá expr cuối cùng hoặc NAN nếu cond luôn sai.
Các hằng số sau đây có sẵn:
- PI
diện tích của đĩa đơn vị, khoảng 3,14
- E
exp(1) (số Euler), xấp xỉ 2,718
- PHI
tỷ lệ vàng (1+sqrt(5))/2, xấp xỉ 1,618
Giả sử rằng một biểu thức được coi là "đúng" nếu nó có giá trị khác 0, hãy lưu ý rằng:
* hoạt động như AND
+ hoạt động như HOẶC
Ví dụ: cấu trúc:
if (A AND B) then C
tương đương với:
if(A*B, C)
Trong mã C, bạn có thể mở rộng danh sách các hàm đơn phân và nhị phân, đồng thời xác định các hằng số được nhận dạng để chúng có sẵn cho các biểu thức của bạn.
Người đánh giá cũng nhận ra tiền tố đơn vị Hệ thống Quốc tế. Nếu 'i' được thêm vào sau tiền tố thì tiền tố nhị phân sẽ được sử dụng, dựa trên lũy thừa 1024 thay vì lũy thừa 1000. Hậu tố 'B' nhân giá trị với 8 và có thể được thêm vào sau tiền tố đơn vị hoặc được sử dụng một mình . Điều này cho phép sử dụng ví dụ 'KB', 'MiB', 'G' và 'B' làm hậu tố số.
Sau đây là danh sách các tiền tố Hệ thống Quốc tế có sẵn, với biểu thị lũy thừa tương ứng là 10 và 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