最新要闻
- 视讯!年货再出新花样 透视玩家现原形
- 14岁女孩500元卖头发被商贩剪坏 网友吐槽太坑:应先通女孩父母 每日动态
- 努比亚官宣新旗舰:镜头超越一英寸 7月见|全球聚看点
- 天天视点!别喝工业勾兑啤酒了:熊猫精酿12°P啤酒2.6元新低 好喝不上头
- 环球快消息!随笔[七律]
- 撤销日本福岛核污染地区食品进口限制?欧盟回应很合理 美国早撤销 世界通讯
- 即时看!交付12万台电池零起火!极氪汽车6月交付10620辆 极氪001蝉联30万元以上纯电车型销冠
- 大额券手慢无:361°板鞋/运动鞋/休闲鞋74元抄底(多款式)
- 联合电子X-Pin电机批量生产 X-Pin绕组技术比对解读
- 燃烧烈爱无删减在线_燃烧烈爱-全球热推荐
- 当前要闻:电话号码过户要预存1万元话费?中国移动回应来了
- 我国CR450动车组研制取得阶段性成果:时速453km性能指标良好-焦点讯息
- 观天下!大猩猩性别歧视 英国小报遭头版制裁
- cad如何调比例尺寸_cad比例怎么调整原图纸比例 环球热点
- 复读14年的高考钉子户认清事实:考了594分没能力上清华 没浪费教育资源
- 泰坦号潜艇失事前水下短信通信记录曝光:报警前8小时就已出现问题
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
如何使用libavfilter库给输入文件input.yuv添加视频滤镜?
一.视频滤镜初始化
(资料图)
本次代码实现的是给输入视频文件添加水平翻转滤镜,在视频滤镜初始化部分我们可以分为以下几步进行:
1.创建滤镜图结构
视频滤镜功能最核心的结构为滤镜图结构,即AVFilterGraph结构,我们调用avfilter_graph_alloc()函数就可以创建一个滤镜图结构。
2.创建滤镜实例结构
仅创建一个空的滤镜图显然是无法完成任何工作的,因此必须根据需求向滤镜图中添加相应的滤镜实例。这里,我们添加buffer滤镜和buffersink滤镜作为视频滤镜的输入和输出。滤镜由AVFilter结构实现,调用avfilter_get_by_name()函数即可获得相应的滤镜。在获取了这两个滤镜后,接下来,需要创建对应的滤镜实例,滤镜实例由AVFilterContext结构实现,通过调用avfilter_graph_create_filter()函数就能将滤镜实例添加到创建好的滤镜图中。
3.创建和配置滤镜接口
对于创建好的滤镜,需要将相应的接口连接后方可正常工作,滤镜接口类型定义为AVFilterInOut结构,其本质是一个链表的节点,创建输入输出接口可以调用avfilter_inout_alloc()函数,创建好之后,将滤镜对象和接口绑定即可。
4.根据滤镜描述解析并配置滤镜图
在完成滤镜图,相关滤镜和接口结构的创建后,接下来需要根据字符串类型的滤镜描述信息对整体的滤镜图进行解析和配置,这一步需要先后调用avfilter_graph_parse_ptr()和avfilter_graph_config()函数。
完整的初始化代码如下:
//video_filter_core.cpp#define STREAM_FRAME_RATE 25AVFilterContext *buffersink_ctx;AVFilterContext *buffersrc_ctx;AVFilterGraph *filter_graph;AVFrame *input_frame= nullptr,*output_frame= nullptr;static int32_t init_frames(int32_t width,int32_t height,enum AVPixelFormat pix_fmt){ int result=0; input_frame=av_frame_alloc(); output_frame=av_frame_alloc(); if(!input_frame||!output_frame){ cerr<<"Error:frame allocation failed."<width=width; input_frame->height=height; input_frame->format=pix_fmt; result= av_frame_get_buffer(input_frame,0); if(result<0){ cerr<<"Error:av_frame_get_buffer failed."< name=av_strdup("in"); outputs->filter_ctx=buffersrc_ctx; outputs->pad_idx=0; outputs->next= nullptr; inputs->name=av_strdup("out"); inputs->filter_ctx=buffersink_ctx; inputs->pad_idx=0; inputs->next= nullptr; //根据滤镜描述解析并配置滤镜图 if((result= avfilter_graph_parse_ptr(filter_graph,filter_descr,&inputs,&outputs, nullptr))<0){ cerr<<"Error:avfilter_graph_parse_ptr failed."< 二.循环编辑视频帧
在这一步主要用到av_buffersrc_add_frame_flags()和av_buffersink_get_frame()这两个函数,它们的功能分别是将输入图像添加到滤镜图和从sink滤镜中获取编辑后的图像。代码如下:
//video_filter_core.cppstatic int32_t filter_frame(){ int32_t result=0; if((result= av_buffersrc_add_frame_flags(buffersrc_ctx,input_frame,AV_BUFFERSRC_FLAG_KEEP_REF))<0){ cerr<<"Error:add frame to buffer src failed."<width<<",height:"< height< 下面是数据读入和数据写出代码: //io_data.cppstatic FILE* input_file= nullptr;static FILE* output_file= nullptr;int32_t open_input_output_files(const char* input_name,const char* output_name){ if(strlen(input_name)==0||strlen(output_name)==0){ cout<<"Error:empty input or output file name."<width; int32_t frame_height=frame->height; int32_t luma_stride=frame->linesize[0]; int32_t chroma_stride=frame->linesize[1]; int32_t frame_size=frame_width*frame_height*3/2; int32_t read_size=0; if(frame_width==luma_stride){ //如果width等于stride,则说明frame中不存在padding字节,可整体读取 read_size+=fread(frame->data[0],1,frame_width*frame_height,input_file); read_size+=fread(frame->data[1],1,frame_width*frame_height/4,input_file); read_size+=fread(frame->data[2],1,frame_width*frame_height/4,input_file); } else{ //如果width不等于stride,则说明frame中存在padding字节 //对三个分量应该逐行读取 for(size_t i=0;i<frame_height;i++){ read_size+=fread(frame->data[0]+i*luma_stride,1,frame_width,input_file); } for(size_t uv=1;uv<=2;uv++){ for(size_t i=0;i<frame_height/2;i++){ read_size+=fread(frame->data[uv]+i*chroma_stride,1,frame_width/2,input_file); } } } if(read_size!=frame_size){ cerr<<"Error:Read data error,frame_size:"<<frame_size<<",read_size:"< linesize; for(size_t i=0;i<3;i++){ int32_t width=(i==0?frame->width:frame->width/2); int32_t height=(i==0?frame->height:frame->height/2); for(size_t j=0;j main函数实现:
int main(){ const char *input_file_name="../input.yuv"; int32_t pic_width=1920; int32_t pic_height=1080; int32_t total_frame_cnt=250; const char *filter_descr="hflip"; const char *output_file_name="../output.yuv"; int32_t result= open_input_output_files(input_file_name,output_file_name); if(result<0){ return result; } result= init_video_filter(pic_width,pic_height,filter_descr); if(result<0){ return result; } result= filtering_video(total_frame_cnt); if(result<0){ return result; } close_input_output_files(); destroy_video_filter(); return 0;}最后,可以以下指令测试输出的output.yuv文件:
ffplay -f rawvideo -video_size 1920x1080 -i output.yuv
关键词:
如何使用libavfilter库给输入文件input.yuv添加视频滤镜?
Linux主流架构运维工作简单剖析 今日热搜
视讯!年货再出新花样 透视玩家现原形
14岁女孩500元卖头发被商贩剪坏 网友吐槽太坑:应先通女孩父母 每日动态
努比亚官宣新旗舰:镜头超越一英寸 7月见|全球聚看点
天天视点!别喝工业勾兑啤酒了:熊猫精酿12°P啤酒2.6元新低 好喝不上头
环球快消息!随笔[七律]
【见·闻】巴西精品咖啡市场从业者非常看好中国市场发展前景-百事通
撤销日本福岛核污染地区食品进口限制?欧盟回应很合理 美国早撤销 世界通讯
即时看!交付12万台电池零起火!极氪汽车6月交付10620辆 极氪001蝉联30万元以上纯电车型销冠
大额券手慢无:361°板鞋/运动鞋/休闲鞋74元抄底(多款式)
联合电子X-Pin电机批量生产 X-Pin绕组技术比对解读
燃烧烈爱无删减在线_燃烧烈爱-全球热推荐
当前要闻:电话号码过户要预存1万元话费?中国移动回应来了
我国CR450动车组研制取得阶段性成果:时速453km性能指标良好-焦点讯息
观天下!大猩猩性别歧视 英国小报遭头版制裁
2023年6月随笔暨半年总结 世界今亮点
cad如何调比例尺寸_cad比例怎么调整原图纸比例 环球热点
复读14年的高考钉子户认清事实:考了594分没能力上清华 没浪费教育资源
泰坦号潜艇失事前水下短信通信记录曝光:报警前8小时就已出现问题
简讯:如何做屋顶的防水层呢(如何做屋顶的防水层)
ASP.NET Core Web API之Token验证 天天快看
讯息:# 02. 数据分组整合之unique+groupby
天天快播:IDApython的学习
胖手指戴哪种戒指图片_胖手指
环球微动态丨山东大学拟聘用2名硕士为寓管:一人毕业于哈工大 另一人是海归
跑单王1年送25000单外卖:从外卖小白到外卖王者只用了一个月时间
Intel 13代酷睿最低端U300 CPU首次现身:1个大核、4个小核|速讯
当前看点!因为四个字 Kindle彻底告别中国!说真的 我有点难过
AMD锐龙5 5600X3D处理器确认:美国独享
起亚k2怎么样专家点评(起亚k2怎么样)-热消息
大话墨香online(大话墨香)
决算是什么意思通俗易懂_决算是什么意思_全球观点
特斯拉CEO马斯克被曝患有抑郁症 其服用氯胺酮以此“治疗”
演员马丽迎来了自己41岁生日 晒出美丽照片为自己庆生
微软巴西透露Xbox Series X|S总销量已超2100万台 与总部说法一致
《主播女孩重度依赖》开发商宣布全球累计销量突破百万 将举办庆祝直播
胖东来老板称企业家要活得像人 引发网友广泛热议
天天观速讯丨我在树莓派上跑通了bert模型,使用numpy实现bert模型,使用hugging face 或pytorch训练模型,保存参数为numpy格式,然
开源通用高性能的分布式id序列组件
【当前独家】时文选粹摘抄100字_时文选粹 摘抄
2023上半年票房冠军公布:《满江红》 由沈腾主演_天天亮点
千万别搜索“李斯特菌” 搜完我把冰箱里食物扔了|天天实时
3年过去 骁龙888处理器的库存还没清完:三星被逼重发Galaxy S21 FE
k8s安装环境准备:Virtualbox安装CentOS;复制多个CentOS虚拟机
1999元 LG新款27寸显示器开售:2K 165Hz IPS屏
世界聚焦:Kindle真的要拿来盖泡面了!官方店铺正式停运
超越南方!大数据看这一个6月北方有多热:专家科普原因
世界球精选!Java-语法基础
大数据面试题集锦-Hadoop面试题(三)-MapReduce-每日看点
素描鼻子的画法(素描鼻子)
【金融街发布】外汇局:一季度我国外债规模有所回升 结构保持基本稳定
马斯克:决斗可能约在斗兽场 需要锻炼一下我的耐力
世界今头条!湖南遇特大暴雨:市民街头抱团互救 防灾减灾进行时
当前时讯:中国创纪录一箭41星揭秘:印度一箭104星弱爆了
小学毕业典礼多名学生疑因天热晕倒 学校:当天多云 孩子因低血糖出现状况|速看料
3499元 优派新款便携显示器上架:4K OLED屏-环球快报
快讯:科普书单·新书|动物园开饭啦
北方热过南方 高温屡破纪录!大数据看这个6月北方有多热-新动态
月销2.1万辆 大众速腾彻底爆发 反超丰田卡罗拉
焦点要闻:胖东来老板称企业家要活得像人:要对得起自己的人生
夏季用电高峰来袭 你家能不断电 北斗立大功了
18叶双环扇叶:云米电风扇79元起大促(90元大额券)
佳能晒出EOS系列里程碑:累积产量已达1.1亿台
记录--让整个网站界面无滚动条
保利联合:上半年净利润预计盈利5560万元–7522万元
每日机构分析:6月30日
天天微头条丨6月总票房破40亿!国产悬疑片《消失的她》16亿票房第一:你贡献几张票?
称孩子报新闻学就打晕!大学新闻教授称张雪峰的话不无道理
天际汽车停工停产 被发动机厂商起诉“还钱”
女高材生制售救猫药获刑15年 罚金4000万:没有获批 卖了8000多万
Maven高级相关知识:模块,打包方式,依赖继承,聚合,私服搭建-每日报道
热热热!全球多地出现极端高温|天天快播
【金融街发布】人民银行增加支农支小再贷款、再贴现额度2000亿元-全球最资讯
孟羽童离职格力后 董明珠谈接班人:一把手要把企业视为自己生命
只有4节车厢的绿皮火车:一开就是27年!你见过吗? 世界今热点
天天热讯:售价218万 没有机翼也能飞 北美首款飞行汽车正式发布
阿斯巴甜可能致癌!无糖饮料还能放心喝吗?
焦点资讯:小区一保时捷内燃冒烟 保安拿铁锹拍烂前挡风灭火!网友:这物业费值
git rebase合并多个commit
处理开发者账号到期导致APP下架的方处理开发者账号到期导致APP下架的方法
头条焦点:艾隆科技:智慧医疗领域迎来黄金期,公司布局精准,稳步发展,前景可期!|投资者问答精选
趴桌子午睡是怎么毁掉你的身体的?
7399元 壹号本OneXPlayer 2Pro EVA联名限量版今晚开售:8.4寸大屏|今日热闻
全国最大“吃鸡”外挂案宣判:卖挂赚近3千万 两被告获刑4年
苹果带出来得“歪路”要改 手机重回可拆卸电池是必然
胖东来8页报告调查顾客与员工争执:管理人员携礼登门致歉
环球精选!使用Python字符串访问与修改局部变量
在python中实现使用迭代生成器yield减少内存占用的方法
文心一言 VS 讯飞星火 VS chatgpt (52)-- 算法导论6.2 4题_观焦点
使用Python字符串访问与修改局部变量_每日热议
热点在线丨狂收 3.2k star!百度开源压测工具,可模拟几十亿的并发场景,太强悍了!
【津云镜头】特警三支队、金街治安派出所做好爱警暖警工作
布局高端车载PHY芯片,加速推动高速以太网通信芯片国产化——访裕太微首席运营官李晓刚
科创板收盘播报:科创50指数涨0.37% 新股芯动联科较发行价涨75.21%
满满的回忆!赵雅芝吕良伟同台合唱《上海滩》 头条焦点
印度加入美国载人登月计划 被赞苏醒中的巨人:航天将远超俄罗斯
特斯拉天幕变全景烤炉 开车戴帽子冰袖 女子调侃自己变烤乳猪
这就是差距!AMD ROCm开发平台终于要支持RX 7900 XTX
蓉港高铁明天正式开行:成都10小时直达香港