最新要闻
- 演唱会还有一个月门票退不掉 秀动平台建议顾客自行转让 全球要闻
- 爱旭股份:拟向特定对象增发募资不超过60亿元
- 重大工程加快进度 多路资金力挺交通基建
- 超10万!天猫好房1元店“业绩”惊人 1元秒杀1平方报名如潮 每日聚焦
- 警方通报,丈夫将妻子冲撞碾压致死 最新
- 全球微速讯:烟台大学2023年硕士研究生调剂工作通知
- 【环球快播报】机构:今年Q1全球ODM服务器出货119万台 环比下跌5%
- 无需购票,刷证或扫码即走!重庆26座高铁车站启用公交化票制 聚焦
- 动漫神作2020(动漫神作排行榜)
- 世界微动态丨配网改造加速度 供电能力再提升
- 环球微头条丨天山深读丨优化信贷结构 提升服务质效——前5月新疆金融业运行情况解读
- 看点:公司加班是否可以提出解除合同
- 尼山对话聚焦人工智能 周鸿祎:用360智脑可复刻“孔子”助力山东文旅推广
- 环球焦点!小斑块大问题,颈动脉斑块怎么修?
- 天天看热讯:《芈月传》被下架?主演中有两位劣迹艺人,能挺到现在已经不错了
- 热点评!诗歌时刻丨胡雅婷:针形的阴影更加密集,而鸟声并不寡淡
广告
手机
合伙人侵权怎么赔偿
天天最资讯丨中国航空产业生态链具有全球竞争力——访空客中国首席执行官徐岗
- 合伙人侵权怎么赔偿
- 天天最资讯丨中国航空产业生态链具有全球竞争力——访空客中国首席执行官徐岗
- 实时焦点:coq10的功效与副作用吃几粒(coq10的功效和吃法)
- 【环球新要闻】广西西林县:“四个聚焦”打造跨省区乡村治理新样板
- 机构评美国6月谘商会消费者信心指数:信心改善 但仍预期会出现衰退|天天观焦点
- 好吃不饺子好玩不过嫂孑意思_人善被人欺妻善被人骑|时快讯
家电
如何将mp4文件解复用并且解码为单独的.yuv图像序列以及.pcm音频采样数据?-世界实时
一.初始化解复用器
(资料图片)
在音视频的解复用的过程中,有一个非常重要的结构体AVFormatContext,即输入文件的上下文句柄结构,代表当前打开的输入文件或流。我们可以将输入文件的路径以及AVFormatContext **format_ctx 传入函数avformat_open_input(),就可以打开对应的音视频文件或流。接下来再调用avformat_find_stream_info()函数去解析输入文件中的音视频流信息,打开对应的解码器,读取文件头的信息进行解码, 然后在解码过程中将一些参数的信息保存到AVStream结构对应的成员中。之后,我们便可以通过AVStream去初始化编解码器的上下文结构,下面给出代码:
static AVFormatContext *format_ctx= nullptr;static AVCodecContext *video_dec_ctx= nullptr,*audio_dec_ctx= nullptr;static int32_t video_stream_index=-1;static int32_t audio_stream_index=-1;static AVStream *video_stream= nullptr,*audio_stream= nullptr;static FILE *output_video_file= nullptr,*output_audio_file= nullptr;static AVPacket *pkt= nullptr;static AVFrame *frame= nullptr;static int open_codec_context(int32_t *stream_idx,AVCodecContext **dec_ctx,AVFormatContext *fmt_ctx,enum AVMediaType type){ int ret,stream_index; AVStream *st= nullptr; const AVCodec *dec= nullptr; ret= av_find_best_stream(fmt_ctx,type,-1,-1, nullptr,0); if(ret<0){ cerr<<"Error:Could not find "<streams[stream_index]; //find decoder for the stream dec= avcodec_find_decoder(st->codecpar->codec_id); if(!dec){ cerr<<"Error:Failed to find codec:"< codecpar))<0){ cerr<<"Error:Failed to copy codec parameters to decoder context."< =0){ video_stream=format_ctx->streams[video_stream_index]; output_video_file=fopen(video_output_name,"wb"); if(!output_video_file){ cerr<<"Error:failed to open video output file."< =0){ audio_stream=format_ctx->streams[audio_stream_index]; output_audio_file=fopen(audio_output_name,"wb"); if(!output_audio_file){ cerr<<"Error:failed to open audio output file."< 二.循环读取码流包数据进行解码
在这里,我们需要调用一个非常重要的函数av_read_frame(),它可以从打开的音视频文件或流中依次读取下一个码流包结构,然后我们将码流包传入解码器进行解码即可,代码如下:
static int32_t decode_packet(AVCodecContext *dec,const AVPacket *pkt,bool flushing){ int32_t result=0; result= avcodec_send_packet(dec,pkt); if(result<0){ cerr<<"Error:avcodec_send_packet failed."<=0){ result=avcodec_receive_frame(dec,frame); if(result<0){ if(result==AVERROR_EOF||result==AVERROR(EAGAIN)){ return 0; } cerr<<"Error:Error during decoding,result="< codec->type==AVMEDIA_TYPE_VIDEO){ write_frame_to_yuv(frame); } else{ write_samples_to_pcm(frame,audio_dec_ctx); } if(flushing){ cout<<"flushing"< =0){ cout<<"Read packet,pts:"< pts<<",stream:"< stream_index<<",size:"< size< stream_index==audio_stream_index){ result= decode_packet(audio_dec_ctx,pkt,false); } else if(pkt->stream_index==video_stream_index){ result= decode_packet(video_dec_ctx,pkt,false); } av_packet_unref(pkt); if(result<0){ break; } } if(video_dec_ctx){ decode_packet(video_dec_ctx, nullptr,true); } if(audio_dec_ctx){ decode_packet(audio_dec_ctx, nullptr,true); } cout<<"Demuxing succeeded."< 三.将解码后的图像序列以及音频采样数据写入相应的文件
这个步骤比较简单,不解释,直接上代码:
int32_t write_frame_to_yuv(AVFrame* frame){ uint8_t** pBuf=frame->data; int* pStride=frame->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;jsample_fmt); if(data_size<0){ cerr<<"Error:failed to calculate data size."< channels;ch++){ fwrite(frame->data[ch]+i*data_size,1,data_size,output_audio_file); } } return 0;} 四.销毁资源,释放内存
void destroy_demuxer(){ avcodec_free_context(&video_dec_ctx); avcodec_free_context(&audio_dec_ctx); avformat_close_input(&format_ctx); if(output_audio_file!= nullptr){ fclose(output_audio_file); output_audio_file= nullptr; } if(output_video_file!= nullptr){ fclose(output_video_file); output_video_file= nullptr; }}五.main函数
int main(){ int32_t result=init_demuxer("../input.mp4","../output.yuv","../output.pcm"); if(result<0){ return -1; } result=demuxing(); if(result<0){ return -1; } destroy_demuxer(); return 0;}到这里,就大功告成了,可以使用以下的命令去播放输出的音视频文件:
ffplay -ac 2 -ar 44100 -f f32le -i output.pcm
ffplay -f rawvideo -video_size 1920x1080 -i output.yuv
关键词:
如何将mp4文件解复用并且解码为单独的.yuv图像序列以及.pcm音频采样数据?-世界实时
演唱会还有一个月门票退不掉 秀动平台建议顾客自行转让 全球要闻
合伙人侵权怎么赔偿
环球关注:锡南科技6月27日成功登陆创业板 上市首日收盘上涨20.59%
天天最资讯丨中国航空产业生态链具有全球竞争力——访空客中国首席执行官徐岗
【环球报资讯】新华网:刘健辞去公司董事长职务
吞食天地2中文版怎么合成武将 吞食天地2中文版合成武将配方
世界今日报丨鬼魅魍魉什么意思_鬼魅魍魉怎么读
世子凶猛(世子) 快播
新买的手机号被别人注册了微信怎么办不是用了微信_新买的手机号被别人注册了微信怎么办
天天热讯:叶圣陶的教育思想内容(叶圣陶的教育思想的精髓)
实时焦点:coq10的功效与副作用吃几粒(coq10的功效和吃法)
焦点访谈:多彩动漫“拥抱”亚运
【环球新要闻】广西西林县:“四个聚焦”打造跨省区乡村治理新样板
灵雀云获Gartner® 首份《DevOps平台魔力象限报告》“荣誉提及”
【甘快看】人报甘头条 | “保障先锋·2023”集结!
全球微头条丨坦诚!库利巴利:不否认去沙特为钱,这能帮助家人和更多年轻人
男生能用韩束黑面膜吗?价格多少?|全球快报
焦点快看:浙商证券:给予中谷物流买入评级,目标价位16.6元
环球最新:江西外办与中国驻冰岛大使馆“云端”相聚:为推动江西与冰岛开展合作牵线搭桥
机构评美国6月谘商会消费者信心指数:信心改善 但仍预期会出现衰退|天天观焦点
吃什么水果补水(补叶酸的食物和水果)-天天时讯
翻译:WTA上周回眸:科维托娃手感火热剑指温网,朱琳登上荣誉榜
环球播报:东方财富期货早餐 6月27日 周二
天天报道:山西国税网上申报升级版_山西国税网上税务局
家长学生看过来 !2023年中小学生暑期安全提示36条 微资讯
江汉清河采油厂CX12井措施日增油7.4吨
当前播报:小康转债结果出炉,仍有200多万资金未转股
爱旭股份:拟向特定对象增发募资不超过60亿元
机构:2023年中国AI服务器市场规模将增长101% 2025年或达561亿美元
药明康德(02359.HK):540.205万股限制性A股股票将于7月3日起上市及买卖 今日看点
重大工程加快进度 多路资金力挺交通基建
超10万!天猫好房1元店“业绩”惊人 1元秒杀1平方报名如潮 每日聚焦
好吃不饺子好玩不过嫂孑意思_人善被人欺妻善被人骑|时快讯
打印机怎么清理内存_打印机内存不足无法打印怎么办|世界快播报
过度依赖宁德时代,深陷低价竞争困局,昆仑新材业绩恐大幅下滑
草长莺飞造句_草长莺飞造句有哪些
环球今热点:走进“华北油城”感受央企担当
全球最资讯丨先保交楼,再清偿境外,然后境内债务。爆雷房企为何这样排序?
聚焦!西安市好的白癜风治疗医院在哪|医院位置-天天新要闻
当前关注:曾是超人的男子(关于曾是超人的男子介绍)
安逸花贷款逾期3个月说要找上门来真的吗?逾期3个月会怎么样? 天天微头条
红酒用什么能洗掉(怎么洗掉红酒污渍)
打野是什么意思(诅咒巨魔打野)|看热讯
精准推送惠企政策,蔡甸区探索“政策找企业”_全球热消息
电脑版qq怎么删除聊天记录|环球热资讯
汉王科技:正深度分析如何更好的转化“紫东太初”多模态大模型的应用成果 每日时讯
强县行|“点石成金”,你见到的高铁轨道板很可能来自临朐这个镇
嘉园社区:除隐患保安全 网格联动取缔非法液化气营运-世界热闻
新疆认定首批8家自治区野外科学观测研究站
泰州市开展“基层突出问题大起底”专题走访 环球速看
焦点热议:新莱福(301323.SZ):目前仅聚焦于微电机用环形压敏电阻和片式压敏电阻两个细分领域
警方通报,丈夫将妻子冲撞碾压致死 最新
中铁四局七公司做好工人班组建设 打通安全管理“最后一公尺”_每日信息
专访马士基码头公司中国区总裁韩岩滨:全球范围内,绿色甲醇缺乏生产力
天天快消息!中考会出成绩排名分段吗?最新回应
每日观点:信用卡逾期怎么办房贷?发生过信用卡逾期能否办房贷?_当前快看
全球微速讯:烟台大学2023年硕士研究生调剂工作通知
当前热讯:蓝精灵2:绿石之囚宣传片:灵灵发明聚合器
煲仔饭怎么经营才赚钱?狮城煲仔屋加盟让你不想火都难!|环球看热讯
“三万亿俱乐部”,江西凭什么入选?
国家电网董事长:中国平均电价始终保持在全球较低水平
新股暗盘 | 药师帮(09885)暗盘盘初涨超25% 每手赚1010港元
产业因路而兴、村庄因路而美 “四好农村路”引领乡村蝶变
汽车行业:2023-5海外重点市场新能源汽车跟踪月报
生物医药板块涨1.48% 未名医药涨10.02%居首
碳中和板块涨2.19% 光一退涨19.68%居首
九龙福黄金价格今天多少一克(2023年06月27日) 天天短讯
【环球快播报】机构:今年Q1全球ODM服务器出货119万台 环比下跌5%
全球微头条丨华光环能涨停
民生添益8号年内跌23.33%
即时焦点:云南建投10亿元超短期融资券将于7月3日兑付 利率6.99%
无需购票,刷证或扫码即走!重庆26座高铁车站启用公交化票制 聚焦
苏州银行的利润密码 当前快看
快看:为什么夏天一吹空调就浑身疼?
《偷偷藏不住》桑稚的专业是什么 桑稚考上哪所大学
全球微资讯!诡异的伽马射线爆发揭示了看不见但确实在发生的恒星毁灭过程
动漫神作2020(动漫神作排行榜)
快资讯:数字政府发展指数排名出炉!山东位居优质型行列
世界微动态丨配网改造加速度 供电能力再提升
B站陈睿:将用播放分钟数替代播放次数 消弭视频数据水分 全球快看点
“钱崑”&“迪远”混双零封取胜,赵子豪刘丁硕薛飞顺利晋级|WTT萨格勒布站|环球动态
北京韩美林艺术馆现在开放吗?开放时间一览_最新快讯
天天精选!达美航空(DAL.US)盘初走高 上调Q2业绩指引
焦点日报:行政复议法修订草案二审稿扩大行政复议范围 行政机关作出的赔偿决定被纳入行政复议范围
看过来!这里有“特种”检修人_环球快看点
普京:一年内向“瓦格纳”提供超860亿卢布!
快看:当阳城市品牌推广周各活动正有序筹备中
环球微头条丨天山深读丨优化信贷结构 提升服务质效——前5月新疆金融业运行情况解读
恭喜国足!恭喜青岛海牛!阿兰做出正确决定,扬科维奇武磊安心了
天天快播:赛意信息董秘柳子恒增持1.85万股,增持金额52.24万元
22分大胜!凯尔特人打爆猛龙,布朗27分沃克21+4+7,大比分32!_全球热议
2023奉化人才购房补贴怎么申请?
PTT热议BLG横扫iG:BLG只有BIN选上亚运就离谱|天天热点
浙江单招单考分数线2023年公布了吗?
环球今日报丨林秀晶作品_林秀晶男友
环球速看:6月26日山东汇丰石化集团油品报价上涨
环球动态:免费医学生毕业后去向
十二烷基苯磺酸三乙醇胺盐商品报价动态(2023-06-26)
看点:公司加班是否可以提出解除合同