ffmpeg 安装libmp3lame 编码集

提醒:要注意红色标注的部分哦
1.下载libmp3lame源码:http://lame.sourceforge.net/download.php (我的版本:lame-3.99.5.tar.gz)

2.解压lame-3.99.5.tar.gz到D:\ffmpeg_bibei\lame-3.99.5,
   然后打开lame-3.99.5/libmp3lame/i386/Makefile.in
   查看下是否包含$(ECHO) "non_pic_object='$*.o'" >>$@
   如果存在,就修改为$(ECHO) "non_pic_object='.libs/$*.o'" >>$@(最新版已经是这个了)

3.下载http://jaist.dl.sourceforge.net/project/nasm/Win32 binaries/2.07/nasm-2.07-installer.exe,
   然后改名为nasm.exe然后复制到../MinGW/msys/bin目录下

4.编译安装libmp3lame编码集:./configure --prefix= /static --disable-shared --enable-static (/static    这个路径要记住,后面我们要用到),然后make,make install ,
   最后在msys.ba同级会出现static这个目录,里面包含bin,include,lib,share文件夹,最后将bin目录下的       libmp3lame-0.dll 复制到ffmpeg文件目录(d:/ffmpeg/),否则后面转码的时候会报找不到libmp3lame-0.dll    的错误提示

5.编译ffmpeg:./configure --enable-memalign-hack   --enable-libmp3lame 
   --extra-cflags=-I/ static/include --extra-ldflags=-L/ static/lib,发现了吗。这里的/static就是上面我    们设置的目录,我这里是只加入了libmp3lame这一种编码集,同时有多编码集的情况由于时间问题本人还没有    测试,(好像是多个extra-cflags和extra-ldflags-_-)

6.make ffmpeg,
7.测试:ffmpeg -i daodai.mp3   -ab 64000 -ar 44100 -acodec libmp3lame ceshi1.mp3

转换中使用libmp3lame编码时提示错误:
lame: output buffer too small
解决办法:
1.找到/ffmpeg/libavcodec/libmp3lame.c这个文件
2.结构体增加一个成员
typedef struct Mp3AudioContext {
      lame_global_flags *gfp;
      int stereo;
      uint8_t buffer[BUFFER_SIZE];
      int buffer_index;
       int flushed;
} Mp3AudioContext;
3.把函数MP3lame_encode_frame里面这几行修改为这样
if(data){
            if (s->stereo) {
                  lame_result = lame_encode_buffer_interleaved(
                        s->gfp,
                        data,
                        avctx->frame_size,
                        s->buffer + s->buffer_index,
                        BUFFER_SIZE - s->buffer_index
                        );
            } else {
                  lame_result = lame_encode_buffer(
                        s->gfp,
                        data,
                        data,
                        avctx->frame_size,
                        s->buffer + s->buffer_index,
                        BUFFER_SIZE - s->buffer_index
                        );
            }
             s->flushed = 0;
      }else{
             if (s->flushed)
            lame_result = 0;
        else {
            s->flushed = 1;
            lame_result= lame_encode_flush(
                        s->gfp,
                        s->buffer + s->buffer_index,
                        BUFFER_SIZE - s->buffer_index
                        );
             }
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值