如何用ffmpeg将mp3解码成pcm

如何用ffmpeg将mp3解码成pcm,c,ffmpeg,mp3,decoding,libav,C,Ffmpeg,Mp3,Decoding,Libav,我需要将mp3音频数据解码到pcm。我有以mp3头开始的数据。Api example.c不起作用,输出很奇怪: 命令ffmpeg-i input.mp3 output.wav 太好了,这就是我需要的。但我找不到在代码中如何做到这一点的方法。有人知道ffmpeg库的教程在哪里吗?谢谢 编辑2.7.13: 你好, 我从ffmpeg重建了音频解码示例方法,我的问题可能是: len = avcodec_decode_audio4(avCodecContext,avFrame, &got_fra

我需要将mp3音频数据解码到pcm。我有以mp3头开始的数据。Api example.c不起作用,输出很奇怪:

命令
ffmpeg-i input.mp3 output.wav
太好了,这就是我需要的。但我找不到在代码中如何做到这一点的方法。有人知道ffmpeg库的教程在哪里吗?谢谢

编辑2.7.13:

你好, 我从ffmpeg重建了音频解码示例方法,我的问题可能是:

len = avcodec_decode_audio4(avCodecContext,avFrame, &got_frame,&avPacket);    
int data_size = av_samples_get_buffer_size(NULL,avFrame->channels,avFrame->nb_samples,AV_SAMPLE_FMT_S16P,1);
data_size是来自解码器的数据帧的大小,它取决于通道数、数据样本数和数据类型(我的数据是16位PCM立体声编码为mp3到1152个mp3帧样本)

如果我在audacity中打开一个输出文件,给出正确输出的正确参数是立体声(右)、8位pcm(错误)和半采样率(也错误),会发生什么

编码前的数据: 16位PCM 44100Hz,立体声

解码后的数据: 8比特PCM 22050Hz,立体声-->


我已经厌倦了……

一种方法是在代码中调用可执行文件:

system("ffmpeg -i input.mp3 output.wav"); //assuming the executable name is ffmpeg and its location is in PATH environment variable
另一种方法是使用API。例如,请参阅该文件中的
audio\u decode\u Example()
函数

一些教程:

  • 德朗格:(有点过时)
  • 代码项目:
  • 将样本数据提取到双精度数组中的函数:

是的,但我需要将此方法重新构建到缓冲区处理中,并添加一些特定的细节…以及我尝试过的API。此示例api的输出如上图所示。@Meph-代码有一些缓冲区处理(但我不能100%确定您是否需要这种处理)。如果要使用代码,可能应该将参数从
avcodec\u find\u decoder(AV\u CODEC\u ID\u MP2)
更改为
AV\u CODEC\u ID\u MP3
。感谢tuturial。我已经把编解码器改成了mp3。我还尝试了对示例代码的一些修改,但结果并不理想。