《ffmpeg basics》中文版 -- 13.数学函数

13.数学函数

​ FFmpeg 的一个优势在于它提供了不少内置的数学函数,我们可以在一些 音视频 filter,选项或者 source 中使用它们,这为我们的工作提供了很大的便利。

在表达式中使用数学函数

​ FFmpeg 中的很多选项都需要一个数字值,而数值可以以表达式的形式来表示,表达式中可以包含数字,数字操作符(+ - * / 等),常量,以及 FFmpeg 内置的数学函数。函数一般用于特定的一些音视频 filter 以及 sources (也是filter , 有视频源,音频源等,它们一般不需要输入,但可以输出特定的数据,如 color 是一个视频源,它可以输出纯色的图片)配合使用,下面的表中列举了可以使用的函数的 Filter,option,sources,以及如何去查找它们的详细描述。

​ 为了在 FFmpeg 中对数学表达式进行求值,它在内部提供了一个相关的公式求值程序,这个程序是通过文件 libavutil/eval.h 中的接口实现的。程序中可以使用 International System number prefixes(国际规范的数字前缀)(在 FFmpeg 中它被称为后缀 postfixes,因为它紧紧跟随在数字后面)。如果在前缀后加上一个 i ,那么会使用 2 的 n 次幂,而不是 10 的 n 次幂。B 这个前缀表示将值乘以 8 ,他可以和其他的前缀配合使用,也可以单独使用,也就是说我们可以使用如 B, KB, MiB 这样的前缀。可以使用的 SI number prefixes 在第一章节《FFmpeg 基础》中有描述。使用 C 语言的开发者可以自动拓展列表中的一元和二元函数(即一个参数和两个参数),并且可以定义额外的常量,使得它们可以在表达式中使用。

在这里插入图片描述

内置的数学操作符

​ FFmpeg 的用户可以使用常见的一元和二元数学操作符,其描述如下:

在这里插入图片描述

内置常量

​ 当前,FFmpeg 仅包含以下三个常量,但开发者可以通过修改源码来定义额外的常量:

在这里插入图片描述

​ 常量 PI 经常用于三角函数之中,如 sine,cosine,tangent 等。例如,想要使用 523.251 Hz 来生成一个 C5的音调,我们可以使用命令:

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

​ 由于 sin 和 cos 的周期性相同,因此以下命令和上述命令结果相同:

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

内置数学函数表

​ 如果我们用到了两个不同的表达式,但想把他们表述为一个表达式,那么我们可以使用如下形式:“expr1;expr2”,此时会按照顺序依次计算 expr1 和 expr2 ,而新的表达式返回最后一个表达式的值,即expr2 的结果。

​ 当要把整数表达式表示为布尔值时,非 0 表示 true,0 表示 false。对于逻辑值,我们可以使用 * 符号作逻辑 AND,+ 符号作逻辑 OR。

​ 下面是 FFmpeg 中所有可用的函数:

在这里插入图片描述

在这里插入图片描述

函数的使用案例

​ 函数可以大量应用于 drawtext filter。例如 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)

​ 本书中关于函数的其他示例:

  • 《在视频上添加文字》
  • 《数字音频》
  • 《批量处理》
H&A
发布了7 篇原创文章 · 获赞 4 · 访问量 820

猜你喜欢

转载自blog.csdn.net/qq_34305316/article/details/103937521