关于 ffmpeg 音频重采样和编解码的疑问。
现在有这样一种场景,一个进程接收8khz 2通道的 aac 音频,将其解码成并重采样为48khz 2通道 s16le采样格式的 pcm 数据,此时经过 swr_convert 重采样出来的实际样本数第一帧是6048,帧大小是24192字节,后续的帧样本数是6144,帧大小是24576字节。另外一个进程接收这个进程重采样的数据并再次重采样为48khz 2通道 fltp采样格式的 pcm 并编码为 aac ,此时这个进程调用 swr_convert 的输入参数帧缓冲是24192字节帧大小的数据、样本数是6048吗?目标样本数是固定填1024还是用 av_rescale_rnd 来计算。
ffmpeg音视频重采样和编解码的疑问
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!
对于第一个进程重采样得到的数据,后续的帧样本数是6144,帧大小是24576字节,这是因为在重采样过程中需要保持音频数据的完整性,使其不损失信息。在第二个进程中,如果要再次重采样为48khz 2通道 fltp采样格式的pcm并编码为aac,需要根据目标样本数来计算输入参数帧缓冲的样本数。 在进行第二次重采样时,需要根据目标采样率和通道数计算目标样本数,可以使用av_rescale_rnd函数来计算。av_rescale_rnd函数可以将原始样本数按比例转换为目标样本数,并进行四舍五入等处理,以保证转换后的样本数符合目标要求。 下面是可能的实现代码示例://计算目标样本数 int targetSamples = av_rescale_rnd(frame->nb_samples, targetSampleRate, frame->sample_rate, AV_ROUND_UP); //进行重采样 swr_convert(swr_ctx, &output_buffer, targetSamples, ...)在上面的代码中,targetSampleRate是目标采样率,frame->nb_samples是输入帧中的样本数,frame->sample_rate是输入帧的采样率。通过av_rescale_rnd函数计算出目标样本数后,再调用swr_convert函数进行重采样即可。 希望这个回答能对你有所帮助。
解决 无用评论 打赏 举报