首页 > 其他分享 >FFmpeg滤镜API

FFmpeg滤镜API

时间:2023-02-19 13:31:57浏览次数:35  
标签:AVFrame FFmpeg graph avfilter Filter 滤镜 API 上下文

FFmpeg 采用了 Filter Graph 的模型来管理整个数据流的处理,参与数据处理的各个功能模块叫做 Filter(滤镜)。

普通的用户在使用音视频剪辑软件的时候,会把滤镜这个词理解为 app 上提供的一些特效,例如 变场,镜像,加水印 等等。

但是在 FFmpeg 音视频开发领域,Filter(滤镜)是指对音视频数据的处理,包括 裁剪,转换采样率格式,转换封装格式 等等,这些很简单的功能,在 FFmpeg 里面也是 一个 Filter。

所以,你可以把 Filter(滤镜)看成是一个大杂烩,有很多功能,这些功能都是用来对音频或者视频的数据进行处理。


各个 Filter 会在 Filter Graph 中 按照一定的顺序连接起来,流水线式 地 协同工作,如下:

FFmpeg滤镜API_FFmpeg

Filter 大致可以分为 3 类,如下:

1,buffer Filter,输入源 ​​Filter​​,负责接受 ​​AVFrame​​ 的输入。可以调 ​​av_buffersrc_add_frame_flags()​​ 函数 往 这个 ​​FIlter​​ 输入 ​​AVFrame​​。

在复杂滤镜场景下,输入源 ​​FIlter​​ 可以有多个,同时接受多个输入流的数据输入。

2,功能性 Filter,功能性 ​​Filter​​ 负责处理音视频数据。例如 ​​scale Filter​​ 就是一个功能性的 ​​Filter​​,还有 ​​overlay​​,​​format​​ 等等,这些都属于功能性 ​​Filter​​。

3,buffersink Filter,输出 ​​Filter​​,可以调 ​​av_buffersink_get_frame_flags()​​ 函数,从这个 ​​buffersink FIlter​​ 里面读取出来已经处理好的 ​​AVFrame​​。

在复杂滤镜场景下,输出 ​​FIlter​​ 也是可以有多个的,同时输出多个流。


跟滤镜有关的数据结构有以下:

  1. ​AVFilterGraph​​,滤镜容器,里面可以有多个 滤镜上下文
  2. ​AVFilterInOut​​,滤镜链表,​​avfilter_graph_parse2​​ 函数有时候会设置这个结构体,开放输入跟输出给其他的滤镜上下文来链接。
  3. ​AVFilterContext​​,滤镜上下文,可以看成是滤镜的实例
  4. ​AVFilter​​,滤镜信息。

跟滤镜有关的API函数有以下:

  1. ​avfilter_graph_alloc​​,创建滤镜容器
  2. ​avfilter_get_by_name​​,根据字符串名字找出 ​​AVFilter​
  3. ​avfilter_graph_create_filter​​ ,根据 ​​AVFilter​​ 来创建滤镜上下文。同时会把新创建的滤镜上下文放进去滤镜容器。
  4. ​avfilter_link​​,连接两个滤镜上下文
  5. ​avfilter_graph_parse2​​,根据 传递的字符串语法 来创建 一个 或者 多个 滤镜上下文,多个滤镜会根据语法自动连接。同时会把新创建的滤镜上下文放进去滤镜容器。
  6. ​avfilter_graph_config​​,正式打开滤镜容器。
  7. ​avfilter_graph_get_filter​​,根据名称获取 滤镜容器内部的某个 滤镜上下文
  8. ​av_buffersrc_add_frame_flags​​,往 滤镜上下文 发送一个 ​​AVFrame​​,让滤镜进行处理。
  9. ​av_buffersink_get_frame_flags​​,从滤镜上下文读取已经处理好的 ​​AVFrame​​。

参考资料:

1,《Window Media编程导向》第12章 - 陆其明


标签:AVFrame,FFmpeg,graph,avfilter,Filter,滤镜,API,上下文
From: https://blog.51cto.com/u_15655186/6066710

相关文章

  • FFmpeg的scale滤镜介绍
    FFmpeg的滤镜API其实有3种调用方法,我个人觉得他是3种用法,如下:1,用 ​​avfilter_graph_create_filter​​ 一个一个地创建滤镜(​​AVFilterContext​​),然后用 ​​......
  • Net6 Core Api(.net6)发布到IIS注意事项及显示HTTP 错误500.19解决方法
    Net6CoreApi发布到IIS不同于webapi,依赖框架不同,配置也移至项目内Program.cs一、发布到指定文件夹,和IIS,不过注意IIS应用程序池选择的是“无托管代码“ 访问接口路径......
  • SpringBoot中统一API返回格式的两种方式
    微服务中,由于各业务团队之间的对接,各个团队之间需要统一返回格式,这样解析时不容易出现错误。因此,有必要统一返回格式。下面我说下项目中常见的两种统一和变更返回值格式的......
  • 关于 Angular Universal 应用执行时需要 Browser API 的问题
    由于AngularUniversalApplication不在浏览器中执行,因此服务器上可能缺少某些浏览器API和功能。例如,服务器端应用程序不能引用仅供浏览器使用的全局对象,例如Window,D......
  • fastapi_sqlalchemy_mysql_rbac_jwt_gooddemo
    /Users//codelearn/fastapi_sqlalchemy_mysql_01/init_test_data.py#!/usr/bin/envpython3#-*-coding:utf-8-*-importasynciofromemail_validatorimportEmai......
  • Linux 获取设置资源API
    getrlimit()/setrlimit()函数获取或设置资源使用限制,linux下每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用的进程......
  • 关于 Angular Universal 应用执行时需要 Browser API 的问题
    由于AngularUniversalApplication不在浏览器中执行,因此服务器上可能缺少某些浏览器API和功能。例如,服务器端应用程序不能引用仅供浏览器使用的全局对象,例如Window,Do......
  • FFmpeg:搭建rstp/rtmp/HLS服务器(测试推流)
    在日常开发中,有些时候需要做一些推拉流测试,但又找不到可以测试的拉流地址,这个时候,可以使用rtsp-simple-server来搭建rtsp/rtmp/HLS服务器。1.服务器搭建rstp-simple-ser......
  • API 接口测试工具--Eoapi
    一个简单、好用的API接口测试工具——Eoapi,下面会给大家简单演示一下,如何用这款工具进行API接口测试。  API接口测试在测试中我们可能会关注状态码、响应体以......
  • captura怎样解决FFmpeg解析错误问题
     captura怎样解决FFmpeg解析错误问题?captura软件里大家在进行屏幕录制的工作得时候都会用到captura软件,软件得功能可以满足大家的需求,可以轻松的录制屏幕,进行屏幕截屏等......