【FFMPEG】从视频文件中抽取aac数据写成文件
admin
2024-02-06 14:29:05
0

这篇博客主要记录的是

  • 如何打开视频文件
  • 如何写文件
  • 如何从AVFormatContext中抽取aac数据
  • 如何写出AAC数据
  • 如何生成AAC Header
extern "C" {#include #include #include #include }#include #include int buildAdtsHeader(char *const header, const int dataLength, const int profile, const int samplerate, const int channels) {//采样率编号std::map samplerateMap;samplerateMap.insert(std::make_pair(96000, 0x0));samplerateMap.insert(std::make_pair(88200, 0x1));samplerateMap.insert(std::make_pair(64000, 0x2));samplerateMap.insert(std::make_pair(48000, 0x3));samplerateMap.insert(std::make_pair(44100, 0x4));samplerateMap.insert(std::make_pair(32000, 0x5));samplerateMap.insert(std::make_pair(24000, 0x6));samplerateMap.insert(std::make_pair(22050, 0x7));samplerateMap.insert(std::make_pair(16000, 0x8));samplerateMap.insert(std::make_pair(12000, 0x9));samplerateMap.insert(std::make_pair(11025, 0xa));samplerateMap.insert(std::make_pair(8000, 0xb));int samplerateCode = samplerateMap.find(samplerate)->second;//生成Headerint frameLength = dataLength + 7;header[0] = 0xff;  //syncword:0xffheader[1] = 0xf0;header[1] |= (0 << 3);  //MPEG Version: 0 MPEG-4, 1 MPEG-2, 1bitheader[1] |= (0 << 1);  //Layer: 0, 2bitheader[1] |= 1;  //protection absent: 1, 1bitheader[2] = (profile) << 6;  //profile: aac profile, 2bitheader[2] |= (samplerateCode & 0x0f) << 2;  //samplerate, 4bitheader[2] |= (0 << 1);  //private bit: 0, 1bitheader[2] |= (channels & 0x04) >> 2;  //channels, 1bitheader[3] = (channels & 0x03) << 6;  //channels, 2bitheader[3] |= (0 << 5);  //original: 0, 1bitheader[3] |= (0 << 4);  //home: 0, 1bitheader[3] |= (0 << 3);  //copyright id bit: 0, 1bitheader[3] |= (0 << 2);  //copyright id start: 0, 1bitheader[3] |= ((frameLength & 0x1800) >> 11);  //frame length part1, 2bitheader[4] = (uint8_t)((frameLength & 0x7f8) >> 3);  //frame length part2, 8bitheader[5] = (uint8_t)((frameLength & 0x7) << 5);  //frame length part3, 3bitheader[5] |= 0x1f;  //buffer fullness part1, 5bitheader[6] = 0xfc;  //‭buffer fullness part2, 6bitreturn 0;}int main() {char *inputFile = "G:/src.mp4";char *outputFile = "G:/dst.aac";FILE *aacFile = fopen(outputFile, "wb+");//打开视频文件AVFormatContext *avFormatContext = NULL;avformat_open_input(&avFormatContext, inputFile, NULL, NULL);//探测流信息avformat_find_stream_info(avFormatContext, NULL);//获取音频流int audioStreamIndex = av_find_best_stream(avFormatContext, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);AVStream *audioStream = avFormatContext->streams[audioStreamIndex];//创建并初始化AVPacketAVPacket *packet = av_packet_alloc();av_init_packet(packet);//读取文件,把aac数据写入文件while (av_read_frame(avFormatContext, packet) >= 0) {if (packet->stream_index != audioStreamIndex)continue;//创建AVPacket对应的头部char header[7] = {};buildAdtsHeader(header, packet->size, audioStream->codecpar->profile, audioStream->codecpar->sample_rate, audioStream->codecpar->channels);//写入AVPacket的Header和Body//如果是TS流的数据话,AVPacket本身已经携带Header了,不需要再写入fwrite(header, 1, 7, aacFile);fwrite(packet->data, 1, packet->size, aacFile);//解除一个引用计数av_packet_unref(packet);}//关闭和释放资源av_free_packet(packet);if (avFormatContext)avformat_close_input(&avFormatContext);if (aacFile)fclose(aacFile);return 0;}

相关内容

热门资讯

原创 全... 全球都在用美元? 中国偷偷搞了个大动作! 美元占全球支付50%时人民币干了啥? 你可能不知道的是,当...
我国银行理财市场规模突破33万... 银行业理财登记托管中心1月23日发布的《中国银行业理财市场年度报告(2025年)》显示,截至2025...
最高分红率35%!上市银行春节... 随着春节临近,上市银行2025年中期分红逐渐进入尾声。 1月23日,华夏银行、渝农商行迎来2025年...
蔡英丽医生:帕金森患者麻醉注意... 帕金森病是中老年人常见的神经系统退行性疾病,随着病情进展,不少患者可能需要接受各类手术,而麻醉环节的...
原创 利... 朋友们,今天A股发生了一件挺有意思的事:在地面光伏行业不少公司还在为亏损发愁的时候,一个叫做“太空光...
二游王战之局,鹰角先下一城 2026二游王战的启幕来了。1月22日,鹰角《明日方舟:终末地》(以下简称终末地)正式公测,和我们预...
大润发首次跨界合作蛋仔派对,以... 2026年春节前夕,高鑫零售旗下核心品牌大润发与国民级游戏IP《蛋仔派对》正式达成深度跨界合作,共同...
2025年基金4季报重仓股全扫... 随着基金2025年4季报基本披露完毕,记者注意到,截至去年底,基金的重仓股发生了比较明显的变化,有5...
昔日“疫苗之王”科兴控股大消息... 让科兴控股小股东忐忑两个多月的退市事项,迎来新进展。 1月22日晚间,科兴控股生物技术有限公司(以下...
视频丨“片场”成打卡新去处 解... 最近,多个因电影而火热的城市持续收获关注,并积极筹备春节文旅服务。在河南安阳,电影《封神2》对殷商文...
东方新能源汽车主题混合:202... AI基金东方新能源汽车主题混合(400015)披露2025年四季报,第四季度基金利润8586.66万...
数字人民币生态日趋成熟,服贸会... 2025年中国国际服务贸易交易会(以下简称“服贸会”)正在北京举行。作为服贸会九大专题之一,本届金融...
证监会进一步扩大期货市场开放品... 近日,证监会根据《境外交易者和境外经纪机构从事境内特定品种期货交易管理暂行办法》(证监会令第116号...
医保搭台、产业唱戏 多部委协同... 党的二十届四中全会对“十五五”时期扩大高水平对外开放作出了顶层设计和战略擘画,强调了与世界各国共享机...
合众财险2025年揽收保费7.... (图片来源:视觉中国) 蓝鲸新闻1月23日讯(记者 陈晓娟)今日,合众财产保险股份有限公司(下称“合...
仕佳光子:公司高度重视全体股东... 证券日报网讯 1月23日,仕佳光子在互动平台回答投资者提问时表示,公司高度重视全体股东的合法权益,始...
透视行业变革 共话ETF未来—... 1月23日下午,2026年第四届基金生态大会在杭举办。本届大会由同花顺(300033.SZ)与财闻传...
原创 3... 32岁程序员高先生在周六处理工作时突发不适,经抢救无效离世,这起事件引发了关于周末居家加班猝死能否认...
原创 别... 小毋今天想给大家好好聊一聊,1月21日,国际金价突破4850美元/盎司的消息刷了屏,可评论区里全是犹...