FFplay文档解读-2-语法详解采用以下引用和转义机制
前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
4.语法
本节介绍FFmpeg
库和工具使用的语法和格式。
4.1引用和转义
FFmpeg
采用以下引用和转义机制,除非明确指定。 适用以下规则:
'
和\
是特殊字符(分别用于引用和转义)。 除了它们之外,根据使用转义和引用的特定语法,可能还有其他特殊字符。通过在前面添加
\
来转义特殊字符。包含在
''
之间的所有字符都包含在解析后的字符串中。 引号字符'
本身不能引用,因此可能需要关闭引号并将其转义。除非转义或引用,否则将从解析后的字符串中删除前导和尾随空格。
请注意,在使用命令行或脚本时,可能需要添加第二级转义,这取决于所采用的shell
语言的语法。
'libavutil / avstring.h'
中定义的函数av_get_token
可用于根据上面定义的规则解析引用或转义的标记。
FFmpeg
源代码树中的工具“tools / ffescape”
可用于自动引用或转义脚本中的字符串。
4.1.1示例
- 转义字符串
Crime d'Amou
包含特殊字符'
:
示例代码 |
---|
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 |
4.2 日期
语法如下:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]now
如果值为now
,则需要当前时间。
除非附加Z
,否则时间是本地时间,在这种情况下,它被解释为UTC
。 如果未指定年 - 月 - 日部分,则需要当前的年 - 月 - 日。
4.3持续时间
表达持续时间有两种可行的语法:
语法 | 描述 |
---|---|
[-][HH:]MM:SS[.m...] |
HH表示小时数,MM表示最多2位数的分钟数,SS表示最多2位数的秒数。 最后的m表示SS的十进制值。 |
[-]S+[.m...] |
S表示秒数,可选小数部分为m。 |
在两个表达式中,可选的-
表示负持续时间。
4.3.1例子
以下示例均为有效持续时间:
时间 | 解释 |
---|---|
‘55’ |
55 秒 |
‘12:03:45’ |
12 小时03 分45 秒 |
‘23.189’ |
23.189 秒 |
4.4 Video size
指定源视频的大小,它可以是width
x
height
形式的字符串,也可以是size缩写的名称。
ffplay识别下面的缩写:
缩写 | 解释 |
---|---|
‘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’ |
whsxga |
‘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 |
4.5 Video rate
指定视频的帧速率,表示为每秒生成的帧数。 它必须是frame_rate_num / frame_rate_den
格式的字符串,整数,浮点数或有效视频帧速率缩写。
ffplay
识别如下缩写:
缩写 | 含义 |
---|---|
‘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 |
4.6比率
比率可以表达为表达式,或者以分子:
分母的形式表示。
请注意,具有无限(1/0)
或负值的比率被视为有效,因此如果要排除这些值,则应检查返回的值。
未定义的值可以使用0:0
字符串表示。
4.7 Color
它可以是下面定义的颜色名称(不区分大小写匹配)或[0x |#] RRGGBB [AA]
序列,可能后跟@
和表示alpha
分量的字符串。
alpha分量可以是由0x
后跟十六进制数字或介于0.0
和1.0
之间的十进制数字组成的字符串,表示不透明度值('0x00'
或'0.0'
表示完全透明,'0xff'
或'1.0'
完全不透明的)。 如果未指定alpha
分量,则假定为'0xff'
。
字符串'random'
将产生随机颜色。
ffplay
识别如下颜色名称:
名称 | 颜色值 |
---|---|
‘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 |
4.8 Channel Layout
通道布局指定多通道音频流中通道的空间布置。 要指定通道布局,FFmpeg
使用特殊语法。
各个频道由id标识,如下表所示:
值 | 解释 |
---|---|
‘FL’ |
front left |
‘FR’ |
front right |
‘FC’ |
front center |
‘LFE’ |
low frequency |
‘BL’ |
back left |
‘BR’ |
back right |
‘FLC’ |
front left-of-center |
‘FRC’ |
front right-of-center |
‘BC’ |
back center |
‘SL’ |
side left |
‘SR’ |
side right |
‘TC’ |
top center |
‘TFL’ |
top front left |
‘TFC’ |
top front center |
‘TFR’ |
top front right |
‘TBL’ |
top back left |
‘TBC’ |
top back center |
‘TBR’ |
top back right |
‘DL’ |
downmix left |
‘DR’ |
downmix right |
‘WL’ |
wide left |
‘WR’ |
wide right |
‘SDL’ |
surround direct left |
‘SDR’ |
surround direct right |
‘LFE2’ |
low frequency 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 |
‘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 |
‘octagonal’ |
FL+FR+FC+BL+BR+BC+SL+SR |
‘downmix’ |
DL+DR |
自定义通道布局可以指定为一系列术语,以
+
或|
分隔。 每个term
可以如下所示:标准频道布局的名称(例如
'mono'
,'stereo'
,'4.0'
,'quad'
,'5.0'
等)。单个频道的名称(例如
'FL'
,'FR'
,'FC'
,'LFE'
等)。多个通道,十进制,后跟
C
,产生该通道数的默认通道布局(参见函数av_get_default_channel_layout
)。 请注意,并非所有通道计数都具有默认布局。多个通道,十进制,后跟
C
,产生具有指定通道数的未知通道布局。 请注意,并非所有通道布局规范字符串都支持未知的通道布局。通道布局掩码,以十六进制开头,以
0x
开头(参见'libavutil / channel_layout.h'
中的AV_CH_ *macros
)。
在libavutil
版本53
之前,指定多个通道的尾随字符c
是可选的,但现在它是必需的,而通道布局掩码也可以指定为十进制数字(当且仅当没有后跟c
或 C
)。
另请参阅'libavutil / channel_layout.h'
中定义的函数av_get_channel_layout
。