打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
《FFmpeg Basics》中文版-13-数学函数

写在前面

如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

正文

FFmpeg工具提供的一个巨大优势是内置的数学函数,可以对某些音频和视频过滤器、选项和源进行各种修改。

可以使用数学函数的表达式

许多FFmpeg选项都需要数值作为参数,其中一些可以是表达式形式,可以包含算术运算符、常量和各种数学函数。函数通常用于音频和视频过滤器和源,下一个表包含它们的列表,包括在哪里找到它们的描述。

FFmpeg中的算术表达式的评估提供了一个内部公式评估器,通过位于文件libavutil/eval.h中的接口实现。这个评估人员也接受国际系统编号前缀(在FFmpeg文档中被称为后缀,因为它们是在数字之后立即输入的)。如果我是在前缀后面加上,使用的是2的幂而不是10的幂。B(字节)前缀将值乘以8,并且可以在另一个前缀后附加或单独使用。这意味着,例如B, KB, MiB可以像前缀一样使用。可用的SI数字前缀的列表在FFmpeg基础上。C代码中的开发人员可以扩展一元函数和二进制函数的列表,并定义额外的常量,这些常量将在描述的表达式中可用。

名称类型具体描述的章节
aevalsrc音频源数字音频章节
asettb音频过滤器高级技术章节
aspectoption词汇表章节
astreamsync音频过滤器数字音频章节
boxblur视频过滤器模糊,锐化和其他去噪章节
crop视频过滤器裁剪视频章节
drawtext视频过滤器为视频添加文字章节
hue视频过滤器颜色修正章节
lut, lutrgb, lutyuv视频过滤器颜色修正章节
overlay视频过滤器overlay-画中画章节
rc_eqoption格式之间转换章节
pad视频过滤器填充视频章节
scale视频过滤器调整和伸缩视频章节
select视频过滤器高级技术章节
setdar, setsar视频过滤器高级技术章节
setpts视频过滤器时间操作章节
settb视频过滤器高级技术章节
volume音频过滤器数字音频章节

内置算术运算符

FFmpeg工具的用户可以使用常用的单目和双目算术运算符,如下表所述。

操作符类型描述例子
+单目将负值转换为正数+(-3)=3
-单目将正数转换为负数-(2+3)=-5
+双目提供加法操作4+5=9
-双目提供减法运算10-6=4
*双目提供乘法运算4*5=20
/双目提供除法运算9/3=3
^双目提供了一个指数函数10^2=10*10=100

内置的常量

最近FFmpeg仅包含下表中描述的3个常量,但开发人员可以通过修改源代码来定义附加常量。

符号数值描述
PI3.14159265358979323846圆周率
E2.7182818284590452354自然对数的底数,欧拉数
PHI1.61803398874989484820黄金比例,(1 +√6(5)/ 2

PI常数通常用作三角函数的正弦,余弦,正切等参数。例如,要产生频率为523.251 Hz的C5音调(中音高C)的音调,我们可以使用命令(命令里面右括号,我这儿会报语法错误)

ffplay -f lavfi -i aevalsrc=sin(523.251*2*PI*t)

我的测试命令:

ffplay -f lavfi -i aevalsrc=sin\(523.251*2*PI*t\)

由于余弦函数具有相似的周期性,下一个命令给出了相同的结果:

ffplay -f lavfi -i aevalsrc=cos(523.251*2*PI*t)

内置数学函数表

如果我们使用2个不同的表达式,并希望将它们组合成另一个表达式,我们可以使用一个符号“expr1;expr2”,其中expr1和expr2依次被计算,新的表达式求出expr2的值。

当使用函数来评估表达式为“true”时,如果它们具有非零值,我们可以利用*符号(星号)的工作方式类似于逻辑,并且+符号(+)的工作方式类似或。接下来的两页包含FFmpeg工具中可用函数的表。

可用的函数表达式

函数描述
abs(x)计算x的绝对值
acos(x)x的反余弦计算
asin(x)计算x的反正弦
atan(x)计算x的反正切
ceil(expr)将expr扩展到最近的整数,例如ceil(4.5)=5.0
cos(x)计算cos(x)
cosh(x)计算双曲余弦x
eq(x, y)如果x=y,则返回1,否则返回0
exp(x)以e=2.71828182(欧拉数)计算x的指数
floor(expr)85/5000
将expr扩展到最近的整数,例如地板(4.5)=4,地板(-4.5)=-5
gauss(x)计算x的高斯函数,对应exp(-xx/2) / sqrt(2PI)
gcd(x, y)计算x和y的最大公约数,如果x=y=0,或者如果x<0和y<0,结果是未定义的
gt(x, y)大于比较,返回1如果x > y,否则返回0
gte(x, y)大于或等于比较,返回1如果x y,否则返回0
hypot(x, y)计算斜边(直角三角形最长边),sqrt(xx + yy)
if(expr1, expr2)评估expr1,如果结果为非零返回expr1的评估,否则返回0
ifnot(exp1, exp2)评估exp1,如果结果为零,则返回值的评估,否则返回0
isinf(x)如果x是+/-∞,则返回1.0,否则返回0
isnan(x)如果x是NaN(不是数字),则返回0
ld(var)使用var标识符返回一个由st(var, expr)函数设置的内部变量值
log(x)用e=2.71828182(欧拉数)计算x的自然对数
lt(x, y)小于比较,返回1如果x < y,否则返回0
lte(x, y)小于或等于比较,返回1如果x≤y,否则返回0
max(x, y)计算x和y的最大值
min(x, y)计算x和y的最小值
mod(x, y)计算模,除法x/y的余数
not(expr)如果expr为0,则返回1,否则返回1
pow(x, y)计算x的值提高到y的力量,结果是相当于(x)^(y)
random(x)从0.0 - 1.0返回一个伪随机数,x是用于保存种子/状态的内部变量的索引
root(expr, max)在区间0中找到f(x)=0的地方。函数f()必须是连续的,否则结果是未定义的
sin(x)计算sin(x)
sinh(x)计算双曲正弦函数
sqrt(expr)计算√expr,结果是相当于(expr)^ 0.5
squish(x)计算表达式1/(1 + exp(4*x))
st(var, expr)将表达式expr的值存储到带有数字var(值0到9)的内部变量中,变量目前不在表达式之间共享
tan(x)计算tanx
tanh(x)计算双曲正切x
taylor(expr, x)
taylor(expr, x, id)
-求x的泰勒级数,expr表示f(x)在0处的导数
-如果id没有指定,则假定为0
-如果你有y的导数而不是0,可以用taloy(expr, x-y)
-如果级数不收敛,结果是未定义的
trunc(expr)向0到最近的整数,例如地板(-4.5)=-4
while(cond, expr)计算表达式expr时,表达式cond为非零,并返回最后一个expr评价的值,或者NAN if cond总是false

-rc_eq选项的特殊函数
bits2qp(bits)
qp2bits(qp)
附加功能,可与其他函数一起使用,以定义由所选编解码器的-rc_eq选项指定的速率控制方程

使用函数的例子

函数的大量应用程序提供了drawtext过滤器。例如,可以使用lt(x, y)和gt(x, y)函数来设置文本出现或从视频帧中消失的时间,下一个命令在开始时将文本延迟5秒:

ffplay -f lavfi -i color=c=orange -vf ^ drawtext=fontfile=/Windows/Fonts/arial.ttf:fontcolor=white:fontsize=20:^ text="5 seconds delayed text":x=(w-tw)/2:y=(h-th)/2:draw=gt(t\,5)

在书中使用函数的其他例子:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python优化机制:常量折叠
《MySQL 8.0数据库管理与应用》第5章 MySQL语言
用Python学数学之Sympy代数符号运算
sympy 的练习
Python Sympy:解方程利器
【数学】压箱底儿的:巧选二次函数表达式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服