【FFMPEG】Filtering Introduction[翻译/举例]
Filtering Introduction
Filtering in FFmpeg is enabled through the libavfilter library.
FFmpeg中的Filtering可以通过libavfilter library来使用。
In libavfilter, a filter can have multiple inputs and multiple outputs. To illustrate the sorts of things that are possible, we consider the following filtergraph.
在libavfilter中,一个filter可以有多个输入和多个输出。为了说明这些事情可实现的可能,我们看下下面这幅图
[main]
input --> split ---------------------> overlay --> output| ^|[tmp] [flip]|+-----> crop --> vflip -------+
This filtergraph splits the input stream in two streams, then sends one stream through the crop filter and the vflip filter, before merging it back with the other stream by overlaying it on top. You can use the following command to achieve this:
这副图中input stream被切割为2个stream,然后将其中一路stream通过crop filter和vflip filter送出然后通过盖在另一路stream上方的方式与另一路stream融合。你可以通过下面的命令来实现此功能:
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
The result will be that the top half of the video is mirrored onto the bottom half of the output video.
上述命令的执行结果是视频的上半部分是输出视频的下半部分的镜像。
Filters in the same linear chain are separated by commas, and distinct linear chains of filters are separated by semicolons. In our example,crop,vflip are in one linear chain, split and overlay are separately in another. The points where the linear chains join are labelled by names enclosed in square brackets. In the example, the split filter generates two outputs that are associated to the labels [main] and [tmp].
同一线性链路中的Filters使用逗号隔开,不同链路中的filters使用分号隔离。在我们的例子中crop和vflip是一个线性链路,split 和 overlay在另一个线性链路。两条线性链路的交汇点使用使用方括号中的名称来标记。在例子中,split filter产生了两个输出分别标记为[main]和[tmp]
The stream sent to the second output of split, labelled as [tmp], is processed through the crop filter, which crops away the lower half part of the video, and then vertically flipped. The overlay filter takes in input the first unchanged output of the split filter (which was labelled as [main]), and overlay on its lower half the output generated by the crop,vflip filterchain.
spilt输出的第二路stream被标记为[tmp], 该stream被 crop filter处理:裁剪掉视频的下半部分,然后垂直翻转.overlay filter 将 split filter(标记为[main])的第一个未更改输出作为输入,并在其下半部分覆盖crop,vflip filterchain生成的输出。
Some filters take in input a list of parameters: they are specified after the filter name and an equal sign, and are separated from each other by a colon.
一些过滤器接受参数列表的输入:它们在filter名称和等号之后指定,并且彼此之间用冒号分隔。
There exist so-called source filters that do not have an audio/video input, and sink filters that will not have audio/video output.
没有audio/video输入的filters被称作source filters, 没有audio/video输出的filters被称作 sink filters。
Filtergraph description
A filtergraph is a directed graph of connected filters. It can contain cycles, and there can be multiple links between a pair of filters. Each link has one input pad on one side connecting it to one filter from which it takes its input, and one output pad on the other side connecting it to one filter accepting its output.
filtergraph是连接filters的有向图。它可以包含循环,一对filters中间可以存在多个链路。每个链接的一侧有一个 input pad ,将其连接到一个filter ,从中获取输入,另一侧有一个output pad,将其连接到一个接受其输出的filter。
Each filter in a filtergraph is an instance of a filter class registered in the application, which defines the features and the number of input and output pads of the filter.
filtergraph 中的每个filter 都是在应用程序中注册的filter class的实例,它定义了filter的特征和 input output pad的数量。
A filter with no input pads is called a “source”, and a filter with no output pads is called a “sink”.
没有输入pads 的filter 称为“source”,没有输出pads 的filter 称为“sink”。
Filtergraph syntax
A filtergraph has a textual representation, which is recognized by the -filter/-vf/-af and -filter_complex options in ffmpeg and -vf/-af in ffplay, and by the avfilter_graph_parse_ptr() function defined in libavfilter/avfilter.h.
filtergraph 有一个文本表示,它在ffmpeg中通过 -filter/-vf/-af和 -filter_complex 选项识别,ffplay中通过-vf/-af 识别。并通过 avfilter_graph_parse_ptr()在中定义的函数 libavfilter/avfilter.h函数解析。
A filterchain consists of a sequence of connected filters, each one connected to the previous one in the sequence. A filterchain is represented by a list of “,”-separated filter descriptions.
filterchain 由一系列连接的filters组成,每个filters都连接到序列中的前一个filters。filterchain 由“,”分隔的filter列表表示。
A filtergraph consists of a sequence of filterchains. A sequence of filterchains is represented by a list of “;”-separated filterchain descriptions.
filtergraph由一系列过filterchains组成。filterchains序列由“;”分隔的过filterchains描述列表表示。
A filter is represented by a string of the form: [in_link_1]…[in_link_N]filter_name@id=arguments[out_link_1]…[out_link_M]
过滤器由以下形式的字符串表示: [ in_link_1 ]…[ in_link_N ] filter_name@id = arguments [ out_link_1 ] … [ out_link_M ]
filter_name is the name of the filter class of which the described filter is an instance of, and has to be the name of one of the filter classes registered in the program optionally followed by “@id”. The name of the filter class is optionally followed by a string “=arguments”.
filter_name是filter class的名称,filter_name所描述的filter是它的一个实例,并且必须是在程序中注册的filter class之一的名称,可选地后跟“@id ”。filter class的名称后面可以选择跟一个字符串“= arguments ”。
arguments is a string which contains the parameters used to initialize the filter instance. It may have one of two forms:
A ’:’-separated list of key=value pairs.
A ’:’-separated list of value. In this case, the keys are assumed to be the option names in the order they are declared. E.g. the fade filter declares three options in this order – type, start_frame and nb_frames. Then the parameter list in:0:30 means that the value in is assigned to the option type, 0 to start_frame and 30 to nb_frames.
A ’:’-separated list of mixed direct value and long key=value pairs. The direct value must precede the key=value pairs, and follow the same constraints order of the previous point. The following key=value pairs can be set in any preferred order.
arguments是一个字符串,其中包含用于初始化filter实例的参数。它可能具有以下两种形式之一:
- 以“:”分隔的键=值对列表。
- 以“:”分隔的值列表。在这种情况下,假定键是按声明顺序排列的选项名称。例如,fade过滤器按此顺序声明三个选项 –type, start_frame and nb_frames. 那么参数列表in:0:30表示将in的值 赋值给option type, 0赋值给start_frame和30赋值给nb_frames.
- 以“:”分隔的混合直接值和长键=值对列表 。直接值必须在键=值对之前,并遵循与前一点相同的约束顺序。可以按任何首选顺序设置 以下
键=值对。
If the option value itself is a list of items (e.g. the format filter takes a list of pixel formats), the items in the list are usually separated by ‘|’.
如果option值本身是一个列表(例如,format filter采用像素格式列表),则列表中的项目通常由 ‘|’.
The list of arguments can be quoted using the character ‘'’ as initial and ending mark, and the character ‘\’ for escaping the characters within the quoted text; otherwise the argument string is considered terminated when the next special character (belonging to the set ‘[]=;,’) is encountered.
arguments list可以使用字符 ‘'’作为开始和结束标记被引用,字符 ‘’ 用于转义引用文本中的字符;否则 当下一个特殊字符( ‘[]=;,’)被遇到的时候,argument字符串将被认为中断了。
A special syntax implemented in the ffmpeg CLI tool allows loading option values from files. This is done be prepending a slash ’/’ to the option name, then the supplied value is interpreted as a path from which the actual value is loaded. E.g.
ffmpeg -i <INPUT> -vf drawtext=/text=/tmp/some_text <OUTPUT>
ffmpeg中实现的特殊语法,CLI 工具允许从文件加载选项值。这是通过在选项名称前添加一个斜杠“/”来完成的,然后将提供的值解释为加载实际值的路径。
will load the text to be drawn from /tmp/some_text. API users wishing to implement a similar feature should use the avfilter_graph_segment_*() functions together with custom IO code.
上述命令中将加载要从中绘制的文本/tmp/some_text. 希望实现类似功能的 API 用户应将这些avfilter_graph_segment_*() 功能与自定义 IO 代码一起使用。
The name and arguments of the filter are optionally preceded and followed by a list of link labels. A link label allows one to name a link and associate it to a filter output or input pad. The preceding labels in_link_1 … in_link_N, are associated to the filter input pads, the following labels out_link_1 … out_link_M, are associated to the output pads.
filter的名称和参数可选地前后跟有链接标签列表。链接标签允许人们命名链接并将其关联到filter 输出或输入pad。前面的标签in_link_1 … in_link_N与pad输入pad相关联,以下标签out_link_1 … out_link_M与输出pad相关联。
When two link labels with the same name are found in the filtergraph, a link between the corresponding input and output pad is created.
当在filtergraph中找到两个具有相同名称的链接标签时,将创建相应输入和输出pad 之间的链接。
If an output pad is not labelled, it is linked by default to the first unlabelled input pad of the next filter in the filterchain. For example in the filterchain
如果未标记输pad,则默认情况下将其链接到过滤器链中下一个filterchain的第一个未标记输入pad。例如在下面的filterchain中
nullsrc, split[L1], [L2]overlay, nullsink
the split filter instance has two output pads, and the overlay filter instance two input pads. The first output pad of split is labelled “L1”, the first input pad of overlay is labelled “L2”, and the second output pad of split is linked to the second input pad of overlay, which are both unlabelled.
split filter实例有两个输出pad,overlay filter实例有两个输入pad。split 的第一个输出pad标记为“L1”,overlay 的第一个输入pad标记为“L2”,split 的第二个输出pad链接到 overlay 的第二个输入pad,两者均未标记。
In a filter description, if the input label of the first filter is not specified, “in” is assumed; if the output label of the last filter is not specified, “out” is assumed.
在filter description中,如果没有指定第一个filter的输入标签,则假定为“in”;如果未指定最后一个filter的输出标签,则假定为“out”。
In a complete filterchain all the unlabelled filter input and output pads must be connected. A filtergraph is considered valid if all the filter input and output pads of all the filterchains are connected.
在完整的filterchain中,所有未标记的filter 输入和输出pads都必须连接。如果所有过filtergraph的所有过滤器输入和输出pad都已连接,则过filtergraph被认为是有效的。
Libavfilter will automatically insert scale filters where format conversion is required. It is possible to specify swscale flags for those automatically inserted scalers by prepending sws_flags=flags; to the filtergraph description.
Libavfilter 会自动在需要格式转换的地方插入缩放filters 。可以通过 在 filtergraph 描述之前为那些自动插入的缩放器指定 swscale 标志。 sws_flags=flags;
Here is a BNF description of the filtergraph syntax:
NAME ::= sequence of alphanumeric characters and '_'
FILTER_NAME ::= NAME["@"NAME]
LINKLABEL ::= "[" NAME "]"
LINKLABELS ::= LINKLABEL [LINKLABELS]
FILTER_ARGUMENTS ::= sequence of chars (possibly quoted)
FILTER ::= [LINKLABELS] FILTER_NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
FILTERCHAIN ::= FILTER [,FILTERCHAIN]
FILTERGRAPH ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]
相关文章:
【FFMPEG】Filtering Introduction[翻译/举例]
Filtering Introduction Filtering in FFmpeg is enabled through the libavfilter library. FFmpeg中的Filtering可以通过libavfilter library来使用。 In libavfilter, a filter can have multiple inputs and multiple outputs. To illustrate the sorts of things that are…...
什么是IP65?仅仅是防水等级吗?看完本文直呼666!
IP65在硬件设备,准确的来说在电气设备中,这个参数很常见,但是作为网络技术的博主,为啥要介绍IP65? 这个很好解释,因为网络设备,比如路由器、交换机,还有服务器、监控等都是属于电气…...
Flask入门(10):数据库连接池
目录10.数据库连接池模式一模式二示例:使用数据库连接池进行登录验证10.数据库连接池 参考:https://www.cnblogs.com/wangkun122/articles/8992637.html 通过DBUtils实现数据库连接池 安装: pip install DBUtils1.2注意:pytho…...
华为OD机试C++实现 - 最小步骤数
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...
数仓:用户行为类指标一网打尽
前言 用户行为分析是对用户在产品或触点上产生的行为及行为背后的数据进行分析,通过构建用户行为数据分析体系或者用户画像,来改变产品、营销、运营决策,实现精细化运营,指导业务增长。总之,很重要。 先来看下用户类…...
mysql数据库的主从复制
一、实现主从复制的方式。 异步复制:它是mysql默认的同步方式,从库通过io线程去拉取 bin log时,主库不需要关注这个时候是否有从库在同步数据,他只做自己的事情就可以了, 整个复制过程都是异步完成的 ; 半同步复制&…...
【极海APM32替代笔记】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断)
【极海APM32替代笔记】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模…...
一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇文章一万多字,…...
华为OD机试真题 用 C++ 实现 - 子序列长度 | 多看题,提高通过率
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...
华为OD机试题 - 符合条件的子串长度(JavaScript)| 包含代码编写思路
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 华为OD机试题 最近更新的博客使用说明符合条件的子…...
快速读懂网络拓扑图
快速读懂网络拓扑图几重常见的网络拓扑总线型拓扑简介优点缺点环型拓扑简介优点缺点星型拓扑简介优点缺点网络层级机构节点结点链路通路不同的连接线代表什么意思?不同颜色、粗细的直线代表什么意思?闪电线-串行链路几重常见的网络拓扑 总线型拓扑 简介…...
《上海市创新型企业总部认定和奖励管理办法》
各区人民政府、有关单位: 为加快推动上海创新型经济发展,支持各类高成长性企业和研发机构升级打造创新型企业总部,培育壮大更多高能级创新主体,为建设具有全球影响力的科技创新中心提供支撑,现将《上海市创新型企业总…...
LeetCode 160. 相交链表 -- 消除长度差
相交链表 简单 2K 相关企业 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意…...
《分布式技术原理与算法解析》学习笔记Day19
分布式通信:消息队列 什么是消息队列? 队列是一种具有先进先出特点的数据结构,消息队列是基于队列实现的、存储具有特定格式的消息数据。消息以特定格式放入这个队列的尾部后直接返回,不需要系统马上处理,之后有其他…...
云、安全、网络三位一体,Akamai 推出大规模分布式边缘和云平台 Akamai Connected Cloud
出品 | CSDN 云计算 云服务市场规模在持续增长。 基于网络技术积累与优势,与布局边缘计算之后,巨头 Akamai 在继续推进它的技术与产品进程。近日,Akamai 正式推出大规模分布式边缘和云平台 Akamai Connected Cloud,包含云计算、安…...
生产者消费者模型(多线程工作)
目录 1.模型前提 2.阻塞队列(消费场所) 3. 实验 4.有关效率 1.模型前提 以单生产者对单消费者为例子: 前提一:有一个缓冲区作为消费场所。 前提二:有两种功能不同的线程分别具有消费与生产的能力。 前提三&…...
InnoDB锁
1、共享排他锁 Shared and Exclusive Locks--共享锁(SLock),允许持有该锁的事务读取一行数据--排它锁(XLock),允许持有该锁的事务删除或者更新一行数据特性:--行级锁--如果一个事务持有当前行的…...
Java Stream、File、IO 超详细整理,适合新手入门
目录 Java Stream Java File Java IO Java Stream Java Stream 是 Java 8 中引入的一种新的抽象数据类型,它允许开发人员使用函数式编程的方式来处理集合数据。 使用 Java Stream 可以方便地进行过滤、映射、排序和聚合等操作。下面是一个简单的示例:…...
华为OD机试真题Python实现【寻找密码】真题+解题思路+代码(20222023)
寻找密码 题目 小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下: 在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码, 从它的末尾开始依次去掉一位得到的新密码也在密码本中存在。 请输出符合要求的密码,如果由多个符合要求…...
springboot和springframework版本依赖关系
springboot和springframework版本依赖关系 springboot版本springframework版本发布时间1.0.x1.0.0.RELEASE4.0.3.RELEASE2014.041.0.1.RELEASE4.0.3.RELEASE2014.041.0.2.RELEASE4.0.3.RELEASE2014.041.1.x1.1.0.RELEASE4.0.5.RELEASE2014.061.1.1.RELEASE4.0.5.RELEASE2014.0…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
Springboot 高校报修与互助平台小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校报修与互助平台小程序被用户普遍使用,为…...
SpringCloud优势
目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...
