ffmpeg 安装libmp3lame 编码集

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

2.解压lame-3.99.5.tar.gz  到lame-3.99.5,

3.编译安装libmp3lame编码集:./configure --prefix=/static --disable-shared --enable-static (/static   这个路径要记住,后面我们要用到),然后make,make install ,

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

5.make ffmpeg,
6.测试: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
                );
        }
    }

你可能感兴趣的:(ffmpeg 安装libmp3lame 编码集)