FFmpeg语法与表达式评估详解
FFmpeg Mirror of https://git.ffmpeg.org/ffmpeg.git 项目地址: https://gitcode.com/gh_mirrors/ff/FFmpeg
引言
FFmpeg作为强大的多媒体处理工具,其命令行参数和表达式系统具有丰富的语法规则。本文将深入解析FFmpeg中的语法结构和表达式评估机制,帮助开发者更好地掌握FFmpeg的使用技巧。
引用与转义机制
FFmpeg采用了一套特殊的引用和转义规则,主要特点包括:
- 特殊字符:单引号(')和反斜杠()是特殊字符,分别用于引用和转义
- 转义规则:特殊字符可通过前缀反斜杠进行转义
- 引用规则:被单引号包围的内容会被原样解析
- 空白处理:未引用或转义的前后空白字符会被自动移除
实用示例
# 转义单引号
Crime d\'Amour
# 引用包含单引号的字符串
'Crime d'\''Amour'
# 保留空白字符
' 保留前后空白 '
# 混合使用引用和转义
' The string '\'string\'' is a string '
# 处理Windows路径
'c:\foo' 或 c:\\foo
日期与时间格式
日期格式
FFmpeg支持灵活的日期表示方式:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
now
- "now"表示当前时间
- 未指定日期部分则使用当前日期
- 末尾的Z表示UTC时间,否则为本地时间
持续时间格式
FFmpeg支持两种持续时间表示法:
- 传统格式:
[-][HH:]MM:SS[.m...]
- 简化格式:
[-]S+[.m...][s|ms|us]
示例说明
55 # 55秒
0.2 # 0.2秒
200ms # 200毫秒
12:03:45 # 12小时3分45秒
视频参数规范
视频尺寸
视频尺寸可通过宽度x高度
或预定义缩写指定:
ntsc # 720x480
hd1080 # 1920x1080
4k # 4096x2160
帧率格式
视频帧率支持多种表示方式:
frame_rate_num/frame_rate_den # 分数形式
整数或浮点数 # 直接数值
预定义缩写 # 如ntsc、pal等
常用帧率缩写
ntsc # 30000/1001 ≈ 29.97fps
pal # 25/1 = 25fps
film # 24/1 = 24fps
颜色表示法
FFmpeg支持丰富的颜色指定方式:
- 颜色名称:如"Red"、"Blue"等(不区分大小写)
- 十六进制值:
[0x|#]RRGGBB[AA]
- 透明度:可通过
@
后缀指定(0.0完全透明,1.0完全不透明) - 随机颜色:使用"random"关键字
示例
Red # 纯红色
0xFF0000 # 同上
#FF0000@0.5 # 半透明红色
random # 随机颜色
音频通道布局
FFmpeg提供了强大的音频通道布局描述系统:
单通道标识
FL # 前左
FR # 前右
LFE # 低频效果
TFL # 上前左
标准布局组合
mono # FC
stereo # FL+FR
5.1 # FL+FR+FC+LFE+BL+BR
7.1.4 # FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
自定义布局
可通过"+"组合单通道标识:
FL+FR+FC+LFE # 3.1布局
FL@Left+FR@Right # 带自定义名称的立体声
表达式评估系统
FFmpeg内置了强大的表达式求值器,支持多种运算和函数:
基本运算符
- 二元运算符:
+
,-
,*
,/
,^
(幂运算) - 一元运算符:
+
,-
变量存储
可通过st(idx,expr)
和ld(idx)
函数存取10个内部变量(idx:0-9)
数学函数
abs(x) # 绝对值
sqrt(x) # 平方根
sin(x)/cos(x)/tan(x) # 三角函数
exp(x) # 指数函数
log(x) # 自然对数
逻辑函数
gt(x,y) # x>y返回1,否则0
if(x,y,z) # x非零返回y,否则z
between(x,min,max) # x在[min,max]间返回1
实用函数
lerp(x,y,z) # 线性插值:x*(1-z)+y*z
random(x) # 生成[0,x-1]的随机数
结语
掌握FFmpeg的语法规则和表达式系统是高效使用该工具的关键。本文详细介绍了各种语法结构和表达式用法,希望能帮助开发者在多媒体处理中更加得心应手。实际应用中,建议结合具体场景灵活运用这些规则,以达到最佳效果。
FFmpeg Mirror of https://git.ffmpeg.org/ffmpeg.git 项目地址: https://gitcode.com/gh_mirrors/ff/FFmpeg
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考