从ffmpeg中提取mp3播放器

从ffmpeg中提取mp3播放器   -[ 音频研究 ]

 

mp3 和 mp2 的核心实现在 mpegaudiodec.c 里。

如果不需要其它解码只要mpeg声音的解码的话,其接口相当简单。一个是初始化函数 decode_init,另一个是真正的帧解码函数 decode_frame.

int decode_init(AVCodecContext * avctx)
int decode_frame(AVCodecContext * avctx,void *data, int *data_size,uint8_t * buf, int buf_size)

可以看得出来,用户只要定义一个 AVCodecContext 的变量,然后将指针传给这两个函数就可以了。另外特别值得注意的是 decode_init中第一行代码是
MPADecodeContext *s = avctx->priv_data;

由于AVCodecContext结构体的priv_data是一个数据空间的指针,如果没有分配空间那它是指向NULL的,所以你可以选择malloc一个空间,也可以定义一个全局变量MPADecodeContext MPDctx,然后将指针赋值给avctx->priv_data.我选择后者,对于管理内存,太麻烦,也不是俺的强项。

decode_frame 的功能就是解码完一帧就返回,返回值表明使用了缓冲区中多少数据。当然如果传入的数据不够解码一帧也会返回,但是data_size为0。这里介绍一下decode_frame的后面几个参数,buf和buf_size是指传入的mpeg声音压缩码流的缓冲区地址和缓冲区大小,而data和是指解码出来的pcm数据要存放的地址,*data_size是解码出的pcm数据大小,一般为0或者1152x4. 除了data_size,decode_frame的另外四个参数都为输入型参数.

据此,我们可以写一个main.c来实现一个播放器了。

AVCodecContext t_avcc;
MPADecodeContext t_mpadc;
int main(int argc,char *argv[]){
     t_avcc.priv_data=&t_mpadc;

     decode_init(&t_avcc);

     此处加入打开mp3文件的指针file_mp3;

  while(!feof(file_mp3)){
    int len;
    unsigned char buf[4096],*buf_ptr;
    int buf_size;
    unsigned char data[1152*8];
    int data_size;
    /* 这个read函数不保证正确,凭感觉写的:(*/
    buf_size=read(buf,file_mp3,4096);
    while(buf_size>0){
      buf_ptr=buf;
      len=decode_frame(&t_avcc,data,&data_size,buf_ptr,buf_size);
      if(len<0)
        break;
      此处加入对data的处理代码,写入文件或者写到声卡,随便
      buf_optr+=len;
      buf_size-=len;
   }
  }
}

//-------------------------------------------------------------------------------

http://ffmpeg.blogbus.com/s50891/

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用 ffmpeg 可以将 MP4 文件提取MP3 文件。使用命令如下: ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -b:a 192k output.mp3 -i input.mp4:指定输入文件 -vn:表示不输出视频流 -ar 44100:采样率为 44.1kHz -ac 2:立体声 -b:a 192k:码率为 192kbps output.mp3:输出文件名称 如果你想要更改输出文件的格式,可以更换后缀名。 ### 回答2: 要使用 ffmpeg 提取一个 MP4 文件MP3 音频,你需要使用以下命令行: ffmpeg -i input.mp4 -vn output.mp3 在这个命令,input.mp4 是你想要提取音频的 MP4 文件的名称,output.mp3提取得到的 MP3 文件的名称。 -i 选项指定输入文件,-vn 选项表示提取视频文件的音频部分,省略该选项则会提取整个音视频流。因此,通过指定 -vn 选项,ffmpeg 将只提取音频部分,并将其保存为输出的 MP3 文件。 执行上述命令后,ffmpeg 将对输入的 MP4 文件进行解码,并将音频流提取到输出的 MP3 文件提取过程可能会花费一些时间,具体取决于输入文件的大小和计算机性能。 一旦提取完成,你就可以使用任何支持 MP3 格式的播放器来播放或处理输出的 MP3 文件。 请确保已经正确安装并设置了 ffmpeg 环境,以便能够在命令行使用该命令。 希望这能帮助你成功地使用 ffmpeg 提取 MP4 文件MP3 音频! ### 回答3: FFmpeg是一款常用的音视频转码工具,我们可以使用它来提取MP4文件的音频部分并转换为MP3格式。 要提取MP4文件的音频部分,我们首先需要确保FFmpeg已经安装并配置正确。然后我们可以打开命令行窗口,使用以下命令来进行提取操作: ffmpeg -i input.mp4 -vn -acodec copy output.mp3,input.mp4代表要提取的MP4文件的路径和文件名,output.mp3代表将提取的音频保存为MP3文件的路径和文件名。 在命令,-i选项指定了输入文件,-vn选项表示只提取音频部分,-acodec copy表示直接复制音频流而不进行编码。 执行命令后,FFmpeg提取MP4文件的音频部分,并保存为MP3格式的文件。 需要注意的是,提取MP3文件的音质和大小会受到原始MP4文件音频质量和码率的限制。如果需要调整输出MP3文件的音质,可以在命令指定其他音频编码器和码率选项。 总之,使用FFmpeg提取MP4文件的音频部分并转换为MP3格式只需简单的命令行操作,非常方便实用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值