c - 如何通过ffmpeg将mp3解码为pcm

标签 c ffmpeg mp3 decoding libav

我需要将 mp3 音频数据解码为 pcm。我有以 mp3 标题开头的数据。 Api-example.c 不工作,输出很奇怪:

enter image description here

命令 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 是来自解码器的数据帧的大小,它取决于 channel 数、数据样本数和数据类型(我的数据是 16 位 PCM 立体声编码为 mp3 到 1152 mp3 帧样本)

如果我在 audacity 中打开一个输出文件,给出正确输出的正确参数是立体声(正确)、8 位 pcm(错误)和半采样率(同样错误),这是怎么回事?

编码前的数据: 16bit 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。示例 here ,请参阅该文件中的 audio_decode_example() 函数。

一些教程:

关于c - 如何通过ffmpeg将mp3解码为pcm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17027062/

相关文章:

java - 如何在Javasound中删除LOOP_CONTINUOUSLY? [里面的代码]

c - C 中的结构成员排序优势

Checknullarray 结构

java - 使用 ffmpeg 编辑后的视频未显示在手机图库中

python - 过滤视频中的掌声

android - 如何强制 Android MediaPlayer 只使用一个连接来下载音乐?

c - Linux C 标准 I/O - 为什么双重复制

c - VS2013 C99——为什么可以编译?

delphi - 使用 FFMPEG 减慢视频的音频速度

ffmpeg - 在 MP3 中创建 Xing 或 Info 标签时,我可以使用任何 MP3 header 还是必须匹配其他帧?