ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用

news2024/9/29 11:27:51
Author: wencoo
Blog:https://wencoo.blog.csdn.net/
Date: 19/05/2023
Details:

在这里插入图片描述

文章目录

  • 摘要
  • 什么是时间线编辑
  • 哪些filter支持时间线编辑
  • 时间线编辑中,可以使用哪些预设函数
  • 常用预设函数功能即使用方法
    • if(x, y)
    • if(x, y, z)
    • gt(x, y)
    • gte(x, y)
    • lt(x, y)
    • lte(x, y)
    • eq(x, y)
    • between(x, min, max)
  • 参考
  • 技术交流

摘要

我们先来看一条命令:

ffmpeg -i input.mp4 -vf "movie=logo.png[logo];[in][logo]overlay=x='if(gte(t\,2)\,((t-2)*80)-w\,NAN)'" output.mp4

实现的是2秒后logo从左到右移动,参数释义

if(gte(t\,2)\,((t-2)*80)-w\,NAN) : 对水印坐标x的处理

80 移动的距离,单位像素

从这条命令中,可以看到,控制logo移动的重点设置在x的值设置'if(gte(t\,2)\,((t-2)*80)-w\,NAN)',很明显,这其中涉及到特定的语法,本文的重点,就是来看这个特定的语法到底是如何定义的,怎样使用。

什么是时间线编辑

有些过滤器支持通用的启用选项。对于支持时间轴编辑的过滤器,可以将此选项设置为在向过滤器发送帧之前求值的表达式。如果评估值非零,过滤器将被启用,否则帧将被原封不动地发送到过滤器图中的下一个过滤器。

表达式接受以下值:

‘t’
如果输入的时间戳未知,则使用NAN

‘n’
输入帧的序号,从0开始

‘pos’
输入帧在文件中的位置,如果未知则为NAN;已弃用,请勿使用

‘w’
‘h’
视频输入帧的宽度和高度

此外,这些过滤器支持一个enable命令,该命令可用于重新定义表达式。
与任何其他过滤选项一样,enable选项遵循相同的规则。
例如,要启用模糊滤镜(smartblur)从10秒到3分钟,并启用曲线滤镜从3秒开始:

smartblur = enable='between(t,10,3*60)',
curves    = enable='gte(t,3)' : preset=cross_process

请参阅ffmpeg -filters查看哪些过滤器支持时间轴。

哪些filter支持时间线编辑

使用ffmpeg -filters查看那些filter支持时间线编辑

wencoo@LAPTOP-QC48GNLD:build$ ffmpeg -filters 
ffmpeg version 4.1.10 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04)
  configuration: --prefix=/usr/local/ --enable-debug --disable-stripping --enable-libx264 --enable-libx265 --enable-gpl --enable-shared
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Filters:
  T.. = Timeline support
  .S. = Slice threading
  ..C = Command support
  A = Audio input/output
  V = Video input/output
  N = Dynamic number and/or type of input/output
  | = Source or sink filter
 ... abench            A->A       Benchmark part of a filtergraph.
 ... acompressor       A->A       Audio compressor.
 ... acontrast         A->A       Simple audio dynamic range compression/expansion filter.
 ... acopy             A->A       Copy the input audio unchanged to the output.
 ... acue              A->A       Delay filtering to match a cue.
 ... acrossfade        AA->A      Cross fade two input audio streams.
 ... acrossover        A->N       Split audio into per-bands streams.
 ... acrusher          A->A       Reduce audio bit resolution.
 .S. adeclick          A->A       Remove impulsive noise from input audio.
 .S. adeclip           A->A       Remove clipping from input audio.
 T.. adelay            A->A       Delay one or more audio channels.
 ... aderivative       A->A       Compute derivative of input audio.
 ... aecho             A->A       Add echoing to the audio.
 ... aemphasis         A->A       Audio emphasis.
 ... aeval             A->A       Filter audio signal according to a specified expression.
 T.. afade             A->A       Fade in/out input audio.
 TSC afftdn            A->A       Denoise audio samples using FFT.
 ... afftfilt          A->A       Apply arbitrary expressions to samples in frequency domain.
 .S. afir              AA->N      Apply Finite Impulse Response filter with supplied coefficients in 2nd stream.

可以看到,前面四个....一列中,有不同的标识,代表不同的功能支持

时间线编辑中,可以使用哪些预设函数

Expression Evaluation 表达式求值

当计算算术表达式时,FFmpeg使用一个内部公式求值器,通过libavutil/eval.h接口实现,表达式可以包含一元、二元操作符、常量和函数。两个表达式expr1和expr2可以组合成另一个表达式“expr1;expr2”。Expr1和expr2依次求值,新表达式的求值为expr2。
可以使用以下二进制操作符:+、-、*、/、^。

可以使用以下一元操作符: +, -.

以下功能可用:

abs(x)
Compute absolute value of x.

acos(x)
Compute arccosine of x.

asin(x)
Compute arcsine of x.

atan(x)
Compute arctangent of x.

atan2(x, y)
Compute principal value of the arc tangent of y/x.

between(x, min, max)
Return 1 if x is greater than or equal to min and lesser than or equal to max, 0 otherwise.

bitand(x, y)
bitor(x, y)
Compute bitwise and/or operation on x and y.

The results of the evaluation of x and y are converted to integers before executing the bitwise operation.

Note that both the conversion to integer and the conversion back to floating point can lose precision. Beware of unexpected results for large numbers (usually 2^53 and larger).

ceil(expr)
Round the value of expression expr upwards to the nearest integer. For example, "ceil(1.5)" is "2.0".

clip(x, min, max)
Return the value of x clipped between min and max.

cos(x)
Compute cosine of x.

cosh(x)
Compute hyperbolic cosine of x.

eq(x, y)
Return 1 if x and y are equivalent, 0 otherwise.

exp(x)
Compute exponential of x (with base e, the Euler’s number).

floor(expr)
Round the value of expression expr downwards to the nearest integer. For example, "floor(-1.5)" is "-2.0".

gauss(x)
Compute Gauss function of x, corresponding to exp(-x*x/2) / sqrt(2*PI).

gcd(x, y)
Return the greatest common divisor of x and y. If both x and y are 0 or either or both are less than zero then behavior is undefined.

gt(x, y)
Return 1 if x is greater than y, 0 otherwise.

gte(x, y)
Return 1 if x is greater than or equal to y, 0 otherwise.

hypot(x, y)
This function is similar to the C function with the same name; it returns "sqrt(x*x + y*y)", the length of the hypotenuse of a right triangle with sides of length x and y, or the distance of the point (x, y) from the origin.

if(x, y)
Evaluate x, and if the result is non-zero return the result of the evaluation of y, return 0 otherwise.

if(x, y, z)
Evaluate x, and if the result is non-zero return the evaluation result of y, otherwise the evaluation result of z.

ifnot(x, y)
Evaluate x, and if the result is zero return the result of the evaluation of y, return 0 otherwise.

ifnot(x, y, z)
Evaluate x, and if the result is zero return the evaluation result of y, otherwise the evaluation result of z.

isinf(x)
Return 1.0 if x is +/-INFINITY, 0.0 otherwise.

isnan(x)
Return 1.0 if x is NAN, 0.0 otherwise.

ld(var)
Load the value of the internal variable with number var, which was previously stored with st(var, expr). The function returns the loaded value.

lerp(x, y, z)
Return linear interpolation between x and y by amount of z.

log(x)
Compute natural logarithm of x.

lt(x, y)
Return 1 if x is lesser than y, 0 otherwise.

lte(x, y)
Return 1 if x is lesser than or equal to y, 0 otherwise.

max(x, y)
Return the maximum between x and y.

min(x, y)
Return the minimum between x and y.

mod(x, y)
Compute the remainder of division of x by y.

not(expr)
Return 1.0 if expr is zero, 0.0 otherwise.

pow(x, y)
Compute the power of x elevated y, it is equivalent to "(x)^(y)".

print(t)
print(t, l)
Print the value of expression t with loglevel l. If l is not specified then a default log level is used. Returns the value of the expression printed.

Prints t with loglevel l

random(x)
Return a pseudo random value between 0.0 and 1.0. x is the index of the internal variable which will be used to save the seed/state.

root(expr, max)
Find an input value for which the function represented by expr with argument ld(0) is 0 in the interval 0..max.

The expression in expr must denote a continuous function or the result is undefined.

ld(0) is used to represent the function input value, which means that the given expression will be evaluated multiple times with various input values that the expression can access through ld(0). When the expression evaluates to 0 then the corresponding input value will be returned.

round(expr)
Round the value of expression expr to the nearest integer. For example, "round(1.5)" is "2.0".

sgn(x)
Compute sign of x.

sin(x)
Compute sine of x.

sinh(x)
Compute hyperbolic sine of x.

sqrt(expr)
Compute the square root of expr. This is equivalent to "(expr)^.5".

squish(x)
Compute expression 1/(1 + exp(4*x)).

st(var, expr)
Store the value of the expression expr in an internal variable. var specifies the number of the variable where to store the value, and it is a value ranging from 0 to 9. The function returns the value stored in the internal variable. Note, Variables are currently not shared between expressions.

tan(x)
Compute tangent of x.

tanh(x)
Compute hyperbolic tangent of x.

taylor(expr, x)
taylor(expr, x, id)
Evaluate a Taylor series at x, given an expression representing the ld(id)-th derivative of a function at 0.

When the series does not converge the result is undefined.

ld(id) is used to represent the derivative order in expr, which means that the given expression will be evaluated multiple times with various input values that the expression can access through ld(id). If id is not specified then 0 is assumed.

Note, when you have the derivatives at y instead of 0, taylor(expr, x-y) can be used.

time(0)
Return the current (wallclock) time in seconds.

trunc(expr)
Round the value of expression expr towards zero to the nearest integer. For example, "trunc(-1.5)" is "-1.0".

while(cond, expr)
Evaluate expression expr while the expression cond is non-zero, and returns the value of the last expr evaluation, or NAN if cond was always false.

The following constants are available:

PI
area of the unit disc, approximately 3.14

E
exp(1) (Euler’s number), approximately 2.718

PHI
golden ratio (1+sqrt(5))/2, approximately 1.618

Assuming that an expression is considered "true" if it has a non-zero value, note that:

* works like AND

+ works like OR

For example the construct:

if (A AND B) then C
is equivalent to:

if(A*B, C)
In your C code, you can extend the list of unary and binary functions, and define recognized constants, so that they are available for your expressions.

The evaluator also recognizes the International System unit prefixes. If ’i’ is appended after the prefix, binary prefixes are used, which are based on powers of 1024 instead of powers of 1000. The ’B’ postfix multiplies the value by 8, and can be appended after a unit prefix or used alone. This allows using for example ’KB’, ’MiB’, ’G’ and ’B’ as number postfix.

The list of available International System prefixes follows, with indication of the corresponding powers of 10 and of 2.

y
10^-24 / 2^-80

z
10^-21 / 2^-70

a
10^-18 / 2^-60

f
10^-15 / 2^-50

p
10^-12 / 2^-40

n
10^-9 / 2^-30

u
10^-6 / 2^-20

m
10^-3 / 2^-10

c
10^-2

d
10^-1

h
10^2

k
10^3 / 2^10

K
10^3 / 2^10

M
10^6 / 2^20

G
10^9 / 2^30

T
10^12 / 2^40

P
10^15 / 2^50

E
10^18 / 2^60

Z
10^21 / 2^70

Y
10^24 / 2^80

常用预设函数功能即使用方法

if(x, y)

对x求值,如果结果不为零,则返回y的求值结果,否则返回0。

if(x, y, z)

对x求值,如果结果非零则返回y的求值结果,否则返回z的求值结果。

gt(x, y)

如果x大于y返回1,否则返回0。

gte(x, y)

如果x大于等于y返回1,否则返回0。

lt(x, y)

如果x小于y返回1,否则返回0

lte(x, y)

如果x小于等于y返回1,否则返回0

eq(x, y)

如果x和y相等,返回1,否则返回0。

between(x, min, max)

如果x大于等于min小于等于max返回1,否则返回0。

参考

  • 5 Timeline editing
  • 3 Expression Evaluation
  • FFmpeg 学习8 --FFmpeg进阶命令,使用文件的水印及between
  • FFMPEG进阶系列02-ffmpeg命令详解3

技术交流

欢迎加微信进行技术交流,多个朋友多条路嘛!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AHB-to-APB Bridge——04apb_tran、apb_if、apb_drv、mem、apb_mon、apb_agt

apb_if放入所有apb需要的信号,以及cb ifndef APB_IF_SV define APB_IF_SVinterface apb_if;logic pclk;logic prst;logic penable;logic …

C++的stack和queue

stack和queue 1.stackstack的模拟实现 2.queuequeue的模拟实现 3.容器适配器3.1. 什么是容器适配器3.2. STL标准库中stack和queue的底层结构3.3. deque的简单介绍3.3.1. deque原理介绍3.3.2. deque的缺陷3.3.3. 为什么选择deque作为stack和queue的底层默认容器 1.stack stack的…

深度学习-第T7周——咖啡豆识别

深度学习-第T7周——咖啡豆识别 深度学习-第T7周——咖啡豆识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目 四、数据预处理1、 加载数据1、设置图片格式2、划分训练集3、划分验证集4、查看标签 2、数据可视化3、检查数据4、配置数据集 五、搭建CNN网络六、…

Vue3+TS知识点补充

一、关于Ref 1.shallowRef() shallowRef 是 Vue 3 中新引入的响应式数据类型之一,它与 ref 类型非常相似,但是有一些不同点。 不同的是,shallowRef 只会对其包装的对象进行浅层次的响应式处理,即如果这个对象的子属性发生改变&…

软件测试——黑盒测试

1.测试概述 1.1综述 本测试报告为计算机程序能力在线测评系统的黑盒测试,黑盒测试可以在不知道程序内部结构和代码的情况下进行,用来测试软件功能是否符合用户需求,是否达到用户预期目标,是否拥有较好的人机交互体验。 图1.1 黑…

media设备节点初始化与Video4Linux初始化

media设备节点初始化与Video4Linux初始化 文章目录 media设备节点初始化与Video4Linux初始化media设备节点初始化Video4Linux初始化 media设备节点初始化 media_devnode_init函数是一个内核初始化函数,用于在Linux内核启动期间进行设备节点初始化。 函数的主要作用…

复习:遥感图像解译复习整理

惭愧,这个课程从始自终就没有认真学过,一部分是因为自己的原因,另一部分也是因为自己的原因。因此,对于整理的资料有不足之处请指正。 另外,资料自word复制,没有时间整理博客的格式。 -- 2023年05月19日记…

深度学习训练营之Densenet网络

深度学习训练营 原文链接环境介绍前言设计理念网络结构实验结果和讨论pytorch实现DenseNet附录 原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:365天深度学习训练营-第J3周:Densenet网络学习&…

第一代AIGC硬件悄然爆发

文 | 智能相对论 作者 | 叶远风 看起来,这可能是一副正常的黑框眼镜,你戴上去彬彬有礼、斯斯文文; 实际上,它里边还装了一个“小伙伴”,你随时可以与它交流,谈天说地或者提出各种问题接受它的帮助&#x…

深度学习之构建MPL神经网络——泰坦尼克号乘客的生存分析

大家好,我是带我去滑雪! 本期使用泰坦尼克号数据集,该数据集的响应变量为乘客是生存还是死亡(survived,其中1表示生存,0表示死亡),特征变量有乘客舱位等级(pclass&#x…

广告投放的关键成功因素:广告归因与广告效果监测

在当今竞争激烈的市场环境中,广告归因和广告效果监测成为了广告投放中至关重要的环节。通过深入了解广告归因和广告效果监测的方法,企业可以更好地评估广告投放的成效,并做出精确的决策,以提高广告效果和最大化投资回报。 本文将带…

昆仑万维“勇闯”百模大战:一个“无懈可击”的商业故事话本?

文丨智能相对论 作者丨沈浪 新能源火了做新能源,元宇宙火了做元宇宙。 如果一个热点领域没有昆仑万维的身影,那一定是这个领域还不够“热”,爆不了。 但凡是热到爆的领域,昆仑万维虽迟但到。 不过,这样说可能有些…

【计算机网络基础】章节测试3 数据链路层

文章目录 判断题选择题辨析题应用题 判断题 相对于广域网而言,局域网的误码率较低。√ 交换机是依据IP地址来转发数据包的。 局域网使用集线器作为网络连接设备时,逻辑上是星型结构。 PPP协议应首先满足的需求是简单,以使得协议在实现的时…

Go语言的学习【2】基础语法

目录 代码组成部分字符串格式化字符数据类型变量遇到的问题及解决办法1 代码组成部分 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。 在 Go 程序中,一行代表一个语句结束。 如果你…

【linux】图文并茂,让你轻松掌握Linux基本指令

目录 一,前提 二, 在root身份下,管理用户 1. 判断身份 2. 创建用户 3. 销毁用户 三,文件增,删,移动指令 1. pwd——查看路径 2. ps ——打开文件目录 3. touch——创建文件 4. nano——打开文件 5.…

【大数据】Presto(Trino)REST API 与执行计划介绍

文章目录 一、概述二、环境准备三、常用 REST API1)worker 节点优雅退出2)提交SQL查询请求3)获取查询状态4)获取查询结果5)取消查询请求6)获取Presto 节点信息7)获取Presto服务器使用统计信息8&…

功率放大器电路中的三极管和MOS管,究竟有什么区别?

学习模拟电子技术基础,和电子技术相关领域的朋友,在学习构建功率放大器电路时最常见的电子元器件就是三极管和场效应管(MOS管)了。那么三极管和MOS管有哪些联系和区别呢?在构建功率放大器电路时我们要怎么选择呢&#…

干货 | 利用SPSS进行高级统计分析第一期

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 你是否还在为分析实验数据而感到头疼?你是否还在苦于自己不知道如何选择合适的模型来分析数据? 本期我们就来为大家带来了利用SPSS软件进行高级统计分析…

【学习日记】在不可联网电脑上安装Python和深度学习环境

测试环境 Hyer-V上开了个虚拟机,win7-64位企业版,全新未安装任何环境的最基本的操作系统。 因为不联网安装,而且是win7这种古老的操作系统,确实会遇到很多问题。做个记录。 安装Python 打开python-3.7.8.exe 安装程序 此时可能…

离岗识别 yolov5模型

离岗识别通过yolov5网络模型技术,离岗识别可以自动识别现场画面中人员离岗脱岗睡岗等行为,发现违规行为立即抓拍告警。YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较…