新版本ffmpeg-2.1.4转换其他音频为AAC格式出现噪音,时间长度也不对,有代码
代码如下,请高手帮忙看看,谢谢啦
src_nb_samples = pSelf->oAcc->codec->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE ? 10000 : oAcc->frame_size;
int ret = av_samples_alloc_array_and_samples(&src_samples_data, &src_samples_linesize, oAcc->channels, src_nb_samples, oAcc->sample_fmt, 0);
if (ret < 0) return;
max_dst_nb_samples = av_rescale_rnd(src_nb_samples, oAcc->sample_rate, aCodecCtx->sample_rate, AV_ROUND_UP);
ret = av_samples_alloc_array_and_samples(&dst_samples_data, &dst_samples_linesize, oAcc->channels,max_dst_nb_samples, oAcc->sample_fmt, 0);
if (ret < 0) return;
while(av_read_frame(ic,&packet)>=0)
if(packet.stream_index==audioindex)
{
AVFrame *decoded_frame = NULL;
int len;
decoded_frame = avcodec_alloc_frame();
ret=avcodec_decode_audio4(aCodecCtx, decoded_frame, &out_size, &packet);
if ((ret>=0)&&(out_size))
{
src_samples_data = (uint8_t **)decoded_frame->data[0];
if(aCodecCtx->sample_rate != oAcc->sample_rate || aCodecCtx->channels != oAcc->channels || aCodecCtx->sample_fmt != oAcc->sample_fmt)
{
if (swr_ctx == NULL)
swr_ctx = swr_alloc();
if (!swr_ctx) {
return;
}
av_opt_set_int(swr_ctx, "in_channel_layout", aCodecCtx->channel_layout, 0);
av_opt_set_int(swr_ctx, "in_sample_rate", aCodecCtx->sample_rate, 0);
av_opt_set_sample_fmt(swr_ctx, "in_sample_fmt",aCodecCtx->sample_fmt , 0);
av_opt_set_int(swr_ctx, "out_channel_layout", oAcc->channel_layout, 0);
av_opt_set_int(swr_ctx, "out_sample_rate", oAcc->sample_rate, 0);
av_opt_set_sample_fmt(swr_ctx, "out_sample_fmt", oAcc->sample_fmt, 0);
int ret;
if ((ret = swr_init(swr_ctx)) < 0) {
return;
}
dst_nb_samples = av_rescale_rnd(swr_get_delay(swr_ctx, aCodecCtx->sample_rate) + src_nb_samples, oAcc->sample_rate,aCodecCtx->sample_rate, AV_ROUND_UP);
if (dst_nb_samples > max_dst_nb_samples) {
av_free(dst_samples_data[0]);
ret = av_samples_alloc(dst_samples_data, &dst_samples_linesize, oAcc->channels,dst_nb_samples, oAcc->sample_fmt, 0);
if (ret < 0)
return;
max_dst_nb_samples = dst_nb_samples;
dst_samples_size = av_samples_get_buffer_size(NULL, oAcc->channels, dst_nb_samples, oAcc->sample_fmt, 0);
}
len = swr_convert(swr_ctx , dst_samples_data, dst_nb_samples, (const uint8_t **)decoded_frame->extended_data, src_nb_samples);
}
AVPacket pkt;
av_init_packet(&pkt);
pkt.data = NULL;
pkt.size = 0;
int got_packet = 0;
decoded_frame->nb_samples = oAcc->frame_size;
int samples_size = av_samples_get_buffer_size(NULL, oAcc->channels, decoded_frame->nb_samples, oAcc->sample_fmt, 0);
avcodec_fill_audio_frame(decoded_frame, oAcc->channels, oAcc->sample_fmt, dst_samples_data[0], samples_size, 0);
avcodec_encode_audio2(oAcc, &pkt, decoded_frame,&got_packet);
if(got_packet > 0){
pkt.stream_index = audio_st->index;
ret = av_interleaved_write_frame(oc, &pkt);
if(ret < 0)
return;
av_free_packet(&pkt);
}
}
}
相关推荐
加密音频转换终极指南:三步法实现DRM音乐到MP3/FLAC的合法转换
数字版权管理(DRM)技术通过加密手段保护音频内容,其核心原理是在播放时进行实时解密验证。这项技术虽然保障了版权安全,但也限制了用户跨设备自由使用已获取内容。从技术价值看,在合法‘空间转移’原则下,通过系统级音频流捕获实现格式转换,能平衡版权保护与个人使用便利。具体到应用场景,音乐爱好者常面临主流平台缓存文件无法在其他播放器使用的困境。本文聚焦于利用虚拟音频电缆和音频路由技术,通过模拟播放环境、捕获解密音频流、编码转换的三步流程,安全地将加密音频转为MP3、FLAC等通用格式,实现个人音乐库的统一管理。
使用粒子群算法估计漂移扩散模型的参数Matlab实现.rar
使用粒子群算法估计漂移扩散模型的参数Matlab实现.rar
复现基于积分滑模与快速终端滑模的三维多弹协同攻击制导律复现与实现-带攻击角约束的高速大机动目标同时攻击(Simulink仿真、Matlab代码实现)
内容概要:本文围绕“基于积分滑模与快速终端滑模的三维多弹协同攻击制导律”的复现与实现展开,重点研究在攻击角约束条件下,针对高速大机动目标实现多枚导弹的同时攻击。方案结合Simulink仿真与Matlab代码实现,综合运用积分滑模控制(ISMC)提升系统鲁棒性与稳态精度,并引入快速终端滑模控制(FTSMC)加快收敛速度,实现有限时间收敛。通过建立三维空间弹目相对运动模型,考虑视线角加速度、相对距离、速度等关键变量,设计具备时间协同与角度约束双重能力的制导律,确保多弹在满足预定攻击角度的前提下实现精确同步打击,适用于复杂战场环境中对高机动目标的精确制导任务。 适合人群:具备一定现代控制理论基础和Matlab/Simulink仿真能力的研究生、科研人员,以及从事飞行器制导、控制算法开发的工程技术人员。 使用场景及目标:① 解决多弹协同攻击中的时间一致性与攻击角度双重约束制导问题;② 掌握积分滑模与快速终端滑模在非线性、强耦合系统中的设计方法与稳定性分析技巧;③ 利用Matlab/Simulink完成复杂动态系统的建模、仿真与性能验证,提升先进控制算法在实际工程中的转化与应用能力。 阅读建议:建议读者结合滑模变结构控制、非线性系统稳定性理论等相关知识进行学习,重点关注制导律的设计思路、李雅普诺夫稳定性证明过程及仿真参数整定,动手运行并调试所提供的Matlab代码与Simulink模型,深入理解各模块之间的协同机制与控制逻辑,从而全面掌握此类先进协同制导算法的核心实现原理与工程细节。
基于人工智能的认知无线电系统,利用MATLAB进行智能射频信号检测与分类。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)
内容概要:本文提出了一种针对多源动态最优潮流问题的分布鲁棒优化方法,并以IEEE118节点系统为案例进行了建模与仿真分析,采用Matlab实现代码求解。该方法旨在应对新能源接入背景下电力系统中存在的不确定性因素,如负荷波动与可再生能源出力间歇性等问题,通过构建分布鲁棒优化模型,在保证系统安全稳定运行的同时,实现经济性与可靠性的协调优化。研究涵盖了动态最优潮流的数学建模、不确定性描述、鲁棒约束处理以及高效求解算法的设计,有效提升了电力系统在复杂运行环境下的调度决策能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事电力系统优化调度工作的工程技术人员。; 使用场景及目标:①应用于含高比例新能源的大型电力系统动态调度中,提升对不确定性的适应能力;②为电力系统运行人员提供一种兼顾经济性与鲁棒性的优化决策工具;③作为学术研究中分布鲁棒优化方法在最优潮流领域应用的参考范例。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注不确定性建模方式与鲁棒约束的处理技巧,同时可尝试将该方法迁移至其他节点系统或扩展至多阶段动态调度场景中进行验证与改进。


多媒体/流媒体开发
