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