首页 > 其他分享 >ffmpeg滤镜创建过程

ffmpeg滤镜创建过程

时间:2024-07-04 13:30:21浏览次数:16  
标签:codecContext ffmpeg 创建 avfilter ctx filter 滤镜 graph

1、创建一个滤镜图

AVFilterGraph *filter_graph = avfilter_graph_alloc();

2、创建滤镜的输入和输出

AVFilterInOut *inputs = avfilter_inout_alloc();

AVFilterInOut *outputs = avfilter_inout_alloc();

3、每个滤镜创建上下文

AVFilterContext *filter1_ctx = avfilter_graph_alloc_filter(filter_graph, filter1, "filter1");

AVFilterContext *filter2_ctx = avfilter_graph_alloc_filter(filter_graph, filter2, "filter2");

4、设置滤镜参数

snprintf(args, sizeof(args), "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d", codecContext->width, codecContext->height, codecContext->pix_fmt, codecContext->time_base.num, codecContext->time_base.den, codecContext->sample_aspect_ratio.num, codecContext->sample_aspect_ratio.den);

5、添加输入滤镜

avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "input", args, nullptr, filter_graph);

6、添加输出滤镜

avfilter_graph_create_filter(&buffersink_ctx, buffersink, "output", nullptr, nullptr, filter_graph);

7、将滤镜的输入和输出与对应的滤镜上下文关联起来

inputs->name = av_strdup("input");

inputs->filter_ctx = filter1_ctx;

inputs->pad_idx = 0;

inputs->next = NULL;

outputs->name = av_strdup("output");

outputs->filter_ctx = filter2_ctx;

outputs->pad_idx = 0;

outputs->next = NULL;

8、解析滤镜描述

avfilter_graph_parse_ptr(filter_graph, filter_descr, &inputs, &outputs, nullptr);

9、连接滤镜链接

avfilter_graph_config(filter_graph, nullptr);

10、清理资源

avfilter_inout_free(&inputs);

avfilter_inout_free(&outputs);

avfilter_graph_free(&filter_graph);

标签:codecContext,ffmpeg,创建,avfilter,ctx,filter,滤镜,graph
From: https://blog.csdn.net/melonbo/article/details/140169346

相关文章

  • linux创建用户后权限设置的问题
    1.创建用户设置用户名密码useradduserNamepasswduserName(会提示输入密码)2.给新用户添加分组,赋权限usermod-aGnew_groupusername;//添加附属组ueermod-gnew_groupusername;//设置为主组groups(username)//查看所属组id(username)//查看用户和组的信息roo......
  • vue3+node.js+mysql+electron+express实现用户登录,文章写入删除,全量更新,增量更新,和截
    第一件事情是安装node.js,去官网下,在终端node-v,npm-v有版本号就行了,不必搞环境配置,保姆级别教程,感谢哥有时间。嘻嘻,祝大家开心。1.首先你要创建electron项目打开vscode,新建终端输入代码npminit这个代码是初始化的意思会生成一个文件package.json里面的代码应该是这......
  • 1.数据库的连接、创建会话与模型
    SQLAlchemy是一个强大的Python库,它让你可以用一种面向对象的方式来操作数据库(ORM技术)。在学习SQLAlchemy的过程中,需要一些基础知识的沉淀:Python基础、Python面向对象、MySQL数据库的诸多知识点……在此之前,你可能需要了解传统执行SQL语句和使用ORM的一些区别以及他们的概......
  • Day31.管理员创建老师功能
    1.管理员创建老师功能_代码及执行流程2.管理员创建老师功能_视图层管理员创建老师admin.py下的create_teacher方法'''管理员视图'''frominterfaceimportadmin_interfacefromlibimportcommon,common_interface#todo管理员创建老师@common.auth('admin')defc......
  • C++文件系统操作2 - 跨平台实现文件夹的创建和删除
    1.关键词2.fileutil.h3.fileutil.cpp4.filesystem_win.h5.filesystem_win.cpp6.filesystem_unix.cpp7.源码地址1.关键词C++文件系统操作创建文件夹创建多级目录文件夹删除文件夹删除文件夹下的所有文件和子目录跨平台2.fileutil.h#pragmaonce#incl......
  • 像学Excel 一样学 Pandas系列-创建数据分析维度
    嗨,小伙伴们。又到喜闻乐见的Python数据分析王牌库Pandas的学习时间。按照数据分析处理过程,这次轮到了新增维度的部分了。老样子,我们先来回忆一下,一个完整数据分析的过程,包含哪些部分内容。其中,Pandas的基础信息导入、数据导入和数据整理、数据探索和清洗已经在前几篇文章......
  • Day31.管理员创建学校
    1.管理员创建学校_代码执行流程2.管理员创建学校_视图层admin.py'''管理员视图'''frominterfaceimportadmin_interfacefromlibimportcommon,common_interface#todo管理员创建学校@common.auth('admin')defcreate_school():print('管理员创建......
  • Day31.管理员创建课程功能
    1.管理员创建课程_代码及执行流程2.管理员创建课程_管理员创建课程admin.py#todo管理员创建课程@common.auth('admin')defcreate_course():print('管理员创建课程...')whileTrue:#todo1.让管理员先选择学校#todo1.1调用接口,获取所有......
  • 【漏洞复现】金斗云 HKMP智慧商业软件 任意用户创建漏洞
    0x01产品简介金斗云智慧商业软件是一款功能强大、易于使用的智慧管理系统,通过智能化的管理工具,帮助企业实现高效经营、优化流程、降低成本,并提升客户体验。无论是珠宝门店、4S店还是其他零售、服务行业,金斗云都能提供量身定制的解决方案,助力企业实现数字化转型和智能化升......
  • 车载测试之-CANoe创建仿真工程
    在现代汽车工业中,车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程,不仅能够模拟真实的车辆环境,还能大大提升测试效率和准确性。那么,CANoe是如何实现这些的呢?车载测试中,为什么选择使用CANoe创建仿真工程?它具备哪些独特的功能和优势,能够在复杂的车......