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

写在前面

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

正文

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

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

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

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

名称 类型 具体描述的章节
aevalsrc 音频源 数字音频章节
asettb 音频过滤器 高级技术章节
aspect option 词汇表章节
astreamsync 音频过滤器 数字音频章节
boxblur 视频过滤器 模糊,锐化和其他去噪章节
crop 视频过滤器 裁剪视频章节
drawtext 视频过滤器 为视频添加文字章节
hue 视频过滤器 颜色修正章节
lut, lutrgb, lutyuv 视频过滤器 颜色修正章节
overlay 视频过滤器 overlay-画中画章节
rc_eq option 格式之间转换章节
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个常量,但开发人员可以通过修改源代码来定义附加常量。

符号 数值 描述
PI 3.14159265358979323846 圆周率
E 2.7182818284590452354 自然对数的底数,欧拉数
PHI 1.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)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,380评论 0 5
  • for表达式是monad语法糖 先看一组示例: Person类包含了人员名称,是否是男性,以及他的孩子的字段。代码...
    JasonDing阅读 587评论 0 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,712评论 0 2
  • 战车逆位,今天对这张牌没什么感觉,白色的狮身人面兽感觉是自己,有些哀怨和悲伤,黑色的那个感觉是婆婆,她比较强,战车...
    塔罗师默默阅读 175评论 0 0
  • by 瓯南 1 你有没有爱过这样一个人?明知道没有结果,却依然想对Ta好,哄Ta笑;陪Ta哭,伴Ta闹。甚至是默默...
    瓯南阅读 1,041评论 3 18