提醒:要注意红色标注的部分哦
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
);
}
}