关于FFMPEG中的filter滤镜的简单介绍

news2024/11/26 4:54:45

滤镜的作用主要是对原始的音视频数据进行处理以实现各种各样的效果。比如叠加水印,翻转缩放视频等。

下图表示的正常转码流程,滤镜在解码和编码中间,虚线表示可有可无。

使用命令查看ffmpeg支持的滤镜

ffmpeg -filters 

查看某个滤镜的详细参数

ffmpeg -h filter=pad

 上图显示的pad滤镜的功能和需要的参数。

ffmpeg中的滤镜可分为:

  1. source filter  只有输出
  2. audio filter  音频过滤器
  3. video filter  视频过滤器
  4. multimedia filter  复杂过滤器
  5. sink filter 只有输入

这里需要重点提的两个特别的filter:bufferbuffersink
(1)buffer:滤波器buffer代表filter graph中的源头,原始数据就往这个filter节点输入的。通过调用该滤波器提供的函数(如av_buffersrc_add_frame)可以把需要滤波的帧传输进入滤波过程。在创建该滤波器实例的时候需要提供一些关于所输入的帧的格式的必要参数(如:time_base、图像的宽高、图像像素格式等)。

(2)buffersink:一个特殊的滤波器,滤波器buffersink代表filter graph中的输出节点,处理完成的数据从这个filter节点输出。通过调用滤波器提供的函数(如av_buffersink_get_frame)可以提供出被滤波过程过滤完成后的帧。

除了source和sink filter,其他filter都至少有一个输入、至少一个输出。

也可以简单的分为简单滤镜和复杂滤镜。

简单滤镜:只有一个输入和输出,命令行中使用  -vf(视频滤镜),  -af(音频滤镜)

 复杂滤镜:有多个输入和输出,命令行中使用 -lavfi -filter_complex

下图中官方给出一个filtergrpah示例:

 在这个滤镜图中,我们可以看到使用4个滤镜

1.使用split滤镜将输入流复制成两路流输出,一个叫main. 一个tmp

2.使用crop滤镜对tmp流进行裁剪

3.使用vflip对tmp流进行垂直翻转

4.使用overlay将tmp流叠加在main流中

可以使用命令行表示如下

ffmpeg -i INPUT -vf 'split [main][tmp]; [tmp] crop=iw:ih/2:0:0,vflip [flip]; [main][flip] overlay=0:H/2' OUTPUT

同一路的滤镜间用逗号(‘,’)进行分割,不同路的滤镜间用分号(‘;’)进行分割。



 

Filter的语法

Filter 的语法

filter_name=param_name1=param_value1:param_name2=param_value2

filter_name : 是fliter的名称, 必须有;它的参数是可选 的,以":"分隔或"+"号,可以有参数名,也可以没有;

例如:

ffmpeg -i video.avi  -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi

这个抽取视频Y、U、V分量的filter,就有三个输出,分别是 [y][u][v], 抽取后,将不同的输出保存到不同的文件中

没有音频、视频输入的filter称为source filter

没有音频、视频输出的filter称为sink filter

filterchain的语法

filter1,filter2,....

它是多个filter的组合,以逗号分隔;并且每个filter是输入是前一个filter的输出;

ffmpeg -i audio.aac -filter_complex "aresample=async=16000,adelay=316397,volume=1.0" -acodec libfdk_aac -y output.mp4

这里用到了三个filter,分别的aresample, adelay, volume, 组成一个filterchain;

filtergraph的语法

filterchain1;filterchain2;...

它是多个filterchain的组合,以分号";"分隔,

ffmpeg -i INPUT -filter_complex "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

这里用到了三个filterchain, 分别是:

split [main][tmp]; // 它只有一个filter,即 split; 它有一个默认的输入,即INPUT解码后的frame;

有两个输出, 以 [main], [tmp] 标识;

[tmp] crop=iw:ih/2:0:0, vflip [flip] // 它由两个filter组成,即crop和vflip;一个输入 [tmp], 一个输出[flip];

[main][flip] overlay=0:H/2 // 它由一个filter组成,即overlay, 有两输入,分别是[main][flip], 一个默认的输出;

常用滤镜

  • scale:视频/图像的缩放
  • overlay:视频/图片的叠加
  • crop:视频/图像的裁剪
  • trim:截取视频的片段
  • rotate:以任意⻆度旋转视频
  • movie:加载第三方的视频,图片
  • yadif:去隔行
  • pad:  填充视频
  • drawtext: 添加文字

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

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

相关文章

k210点亮LED灯

开发板上自带的3个led灯接线如图。 点亮led灯主要使用两个模块,如下: fm.register(pin,function,forceFalse) 【pin】芯片外部 IO 【function】芯片功能 【force】True 则强制注册,清除之前的注册记录 例:fm.register(12, fm.f…

真题详解(有向图)-软件设计(六十二)

真题详解(极限编程)-软件设计(六十一)https://blog.csdn.net/ke1ying/article/details/130435971 CMM指软件成熟度模型,一般1级成熟度最低,5级成熟度最高,采用更高级的CMM模型可以提高软件质量。 初始&am…

RepVGG学习笔记

RepVGG 0 前言1 结构重参数化1.1 结构重参数化第一步(将 C o n v 2 D Conv2D Conv2D算子和 B N BN BN算子融合以及将只有 B N BN BN的分支转换成一个 C o n v 2 D Conv2D Conv2D算子)1.2 结构重参数化第二步(多分支的 3 3 3\times3 33卷积融…

安全运营 ldap监控域控信息

0x00 背景 公司有多个主域,子域,有的子域因为境外数据安全的问题无法把日志传输到境内。那么如何在没有日志的情况下监控子域或者互信域的组织单元(OU)信息呢。 由于访问互信域要在域控上进行,本文根据最小权限原则监控普通用户也可以访问的…

Packet Tracer - 配置和验证小型网络

Packet Tracer - 配置和验证小型网络 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.10.10.1 255.255.255.0 不适用 G0/1 10.10.20.1 255.255.255.0 不适用 SW1 VLAN1 10.10.10.2 255.255.255.0 10.10.10.1 SW2 VLAN1 10.10.20.2 255.25…

【C++】set和map的使用

对于STL容器来说,有很多相似的功能,所以这里主要将与之前不同的功能说清楚 文章目录 1.对于set与set的简单理解2. setinsert迭代器遍历countmultisetinsertfindcount 3. mapinsert与迭代器的使用统计水果次数 operator []operator[]的实现理解对整体的拆…

Nginx:常见的面试题和答案

1. 什么是Nginx? 答:Nginx是一款高性能的Web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,同时用于处理高并发的请求,提供快速、可靠的服务。 2. Nginx的优点是什么? Nginx的优点包括&#xff1a…

【BeautifulSoup上】——05全栈开发——如桃花来

目录索引 介绍:解析库: 安装:pip install BeautifulSoup4pip install lxml 标签选择器:1.string属性:.name属性:获取标签中的属性值: 实用——标准选择器:使用find_all()根据标签名查…

五、C++内存管理机制 —— primitives(侯捷)

侯捷 C八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C 面向对象高级开发 1、C面向对象高级编程(上) 2、C面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C 设计模式 四、C 新标准 五、C 内存管…

2023-04-29 动态规划介绍

2023-04-29 动态规划介绍 动态规划是运筹学课程的一部分 多阶段决策问题 有一类活动的过程,可以分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果 当然,每个阶段的决策的选取不是任意确…

dc-6靶机

1.使用nmap进行信息搜集,存活主机,端口 192.168.85.184是存活主机,发现开放22,80端口 2.访问192.168.85.184的80端口 发现被重定向了,修改hosts文件 vim /etc/hosts 添加一行 192.168.85.174 wordy3.对网站进行信息搜…

彻底解决 Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0 解决方法

当我遇到这错误的时候,我去网上也找过对应解决方法,出现这个的原因有很多种情况 大多是解决Linux系统里的 我是windows系统里的MySQL服务出问题了,所有那些方法对我来说毫无意义. 好了,说一下我的解决办法,其实也很简单 只需要卸载mysql服务,注册表也要删干净,也要把环境变…

C的文件操作

🐖前言 🐕1.为什们我们要用文件 在我们之前写程序时,如果使用scanf函数用键盘输入数据,这些东西都放到内存当中,一旦退出程序,那么这些数据就会消失,比如就像我们写的通讯录,不管是…

Shiro相关知识

1、Shiro功能概述 Apache Shiro是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。 主要功能: Authentication:身份认证。登录时验证身份信息。 Authorization:授权操作。访问控制的过程&…

CSS布局基础(标签类型,盒子模型)

布局基础 元素显示类型,盒子模型 标签类型块元素常见块元素 行内元素常见行内元素 行内块元素常见行内块 模式转换显示类型显著区别 盒子模型盒子组成布局描述边框圆角 内边距外边距块元素居中盒子内行内(块)元素居中 外边距使用陷阱两盒子外…

【进阶C语言】动态版通讯录的实现(详细讲解+全部码源)

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于C语言进阶系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数…

Linux基础IO【重定向及缓冲区理解】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、文件描述符1.1、先描述,再组织1.2、files_struct1.3、分配规则…

Java数组的学习(基础)

目录 第一章:数组的概念介绍 1.数组的概念 2.数组的初始化/数组的创建/数组的定义 第二章:数组的使用 数组添加元素的方法/数组的赋值 数组的遍历 数组之选择排序的升序 数组之冒泡排序的升序 数组的最小值 数组的反转 数组中常见的异常 第三…

Python程序员想要转行,可以从这几个方面着手

最近有很多朋友问我一个问题,不论是我们做程序员还是做产品经理或者其他行业,到了30岁或35岁之后,都会面临各种各样的问题,比如达到职业天花板。有没有一种方法能够解决这种问题呢?我想分享一下我的观点和身边的案例。…

《Netty》从零开始学netty源码(四十七)之PooledByteBuf的方法

setBytes() 从channel中读取数据并写到PooledByteBuf中,分配缓存的过程与getBytes一样,只是duplicate为false。 capacity() 动态更新容量,根据新传入的容量值更改length。 如果新容量值与旧值相同则无需扩容如果为非池化内存则根据新容量值…