利用ffmpeg进行音频转码

在进行音频转码前,首先需要查看我们原始音频中的编码格式以及一些重要的音频参数,包括:采样率,采样格式,通道类型等。

通过将原始的编码格式,采样率,采样格式,通道类型与目标编码格式,采样率,采样格式,通道类型进行对比,只有其中有一项不符合,我们就可以通过重采样操作,转换为所需要的类型。

查看原始音频的编码格式,采样率,采样格式,通道类型方法。

最简单的是通过av_dump_format()函数进行查看

不难看出,输入流中音频编码格式为aac,采样率为16k,通道类型为mono,采样格式为fltp,这些参数中部分是可以通过摄像机进行设置的。

音频转码过程

不同音频编码格式中,一帧音频的nb_samples不相同,G711为320,AAC为1024,如果将G711转为AAC则需要借助于额外的空间,直到采样数量为1024时,开始进行编码。

在此次转码中,需要用到SwrContext进行音频重采样。

首先设置目标音频格式参数和源音频格式参数

SwrContext *swr = swr_alloc_set_opts(NULL,  // we're allocating a new context
                        AV_CH_LAYOUT_STEREO,  // out_ch_layout
                        AV_SAMPLE_FMT_S16,    // out_sample_fmt
                        44100,                // out_sample_rate
                        AV_CH_LAYOUT_5POINT1, // in_ch_layout
                        AV_SAMPLE_FMT_FLTP,   // in_sample_fmt
                        48000,                // in_sample_rate
                        0,                    // log_offset
                        NULL);                // log_ctx

设置完后,调用swr_init()进行初始化。通过swr_convert()进行重采样。

关于此部分详细介绍可以参考:

https://blog.csdn.net/BrookIcv/article/details/52464505

https://blog.csdn.net/timesir/article/details/52904024

下面将结合代码进行此部分详细介绍(此部分代码可参考ffmpeg 官方给出的AAC转码源码)

猜你喜欢

转载自blog.csdn.net/unfound/article/details/81205740