编译ffmpeg
ffmpeg的编译,主要是参考了http://soenkerohde.com/tutorials/ffmpeg/上面的编译指南。
有几点要注意的是,上面的教程写得时间比较早,对于最新版的ffmpeg不太适用
1.在Vista好像编译有问题,老是报告权限不够,我只好换到xp上编译。
2.用MSYS1.0.10已经无法编译了,必须更新到1.0.11(包括CoreUtils和Make3.81,bash shell)
3.MP3的编译要使用
./configure --enable-memalign-hack --enable-libmp3lame --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib
旧的编译使用--enable-mp3lame,反正编译不过的时候看一下.configure --help就行了。
4.要输出DLL文件,可以使用--enable-shared编译选项
5.如果需要添加PSP的MP4文件支持,可以参考下面的文章http://www.yogarine.net/2006/11/encoding-psp-compliant-mp4-files-with.html
一个比较简单的转换方法,用Download Helper从youtube上直接下载flv文件,然后用FFMPEG的命令行转换
ffmpeg -i 1.flv -title "Superman: The Mechanical Monsters"
-s 368x208 -b 512k -ar 24000 -ab 64k -r 30000/1001 -f psp M4V12345.MP4
注意标题不能是中文,最好是英文。
- 编译x264
x264的编译需要yasm
下载yasm,然后执行./configure
- 编译libvorbis
编译时遇到下面的问题
*** Could not run Ogg test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means Ogg was incorrectly installed
*** or that you have moved Ogg since it was installed.
configure: error:
添加指定ogg库的位置的语句可以解决这个问题
./configure --with-ogg=/usr/local --enable-static --disable-shared
- 编译libgsm
需要修改makefile,将INSTALL_ROOT和GSM_INSTALL_INC改成下面的样子
INSTALL_ROOT =/usr/local
GSM_INSTALL_INC = $(GSM_INSTALL_ROOT)/include
将 CC = gcc -ansi -pedantic改成CC = gcc -pedantic
- amrnb,mb的编译
这个比较麻烦,因为msys和mingw默认没有安装wget和unzip,我们需要下载一个http://jaist.dl.sourceforge.net/sourceforge/unxutils/UnxUtils.zip,然后将其中的unzip,wget展开到mingw的bin目录下。另外wget其实是用来下载3gp的26104-700.zip,我们也可以直接下载好这个文件,放在对应的目录下。编译amr的时候用gcc4.3.0Alpha版编译,总是报告编译错误,后来换成tdm的gcc4.3.3就可以了(http://jaist.dl.sourceforge.net/sourceforge/tdm-gcc/gcc-4.3.3-tdm-1-core.tar.gz)
- pthreads的编译
好像pthreads最好用cvs的2.9版编译,2.8我没有编译通过。另外我们需要给ffmpeg打补丁,才能正确地编译通过,参考下面的链接
http://ffmpeg.arrozcru.org/wiki/index.php?title=Pthreads
- Libschroedinger
只有将with-thread=none才能编译通过,用pthread好像不行
- libdirac
libdirac是一个C++的库,目前编译时会报告一堆的错误,暂时搁置
- openjpeg
这个库默认不支持mingw的编译,暂时搁置
- libdc1394
编译报错,暂时搁置
- libnut的编译
基于svn的661版本编译,需要将libnut/demuxer.c文件的16行的
return ftello(priv);改成 return ftell(priv);
$ make CC=gcc
$ make install
6.编译FAAC和FAAD2,从http://www.audiocoding.com/downloads.html下载源代码。
为了使用AutoTools,我们需要安装msys 1.0.10的AutoConf 2.59和Automake1.8.2(最新的没有auto4mte)到Msys的目录下,注意sourceforge上下载的包的目录是usr,不要管它,直接将它下面的bin,share目录展开到msys的对应目录下即可。
还要安装msys 1.0.11 preview的perl5.6和crypt,因为autoconf是用perl写的。其次,还要将Libtool安装上,注意要安装到Local目录下,安装包的usr实际上对应于Msys的1.0的目录。
为了在Mingw下编译faad2,我们还需要修改一下代码,
执行下面命令修改换行符
$ mv bootstrap bootstrap.bak
$ tr -d \\r < bootstrap.bak > bootstrap
$ mv configure.in configure.in.bak
$ tr -d \\r < configure.in.bak > configure.in
将common/mp4ff/mp4ff_int_types.h头文件的
#if defined (_WIN32) 改成
#if defined (_WIN32) && !defined (__MINGW32__)
将frontend/main.c文件中的#define off_t __int64删除(如果是基于GCC4以上编译)
FAAD2的编译
cd faad2
$ ./bootstrap
./configure --with-mp4v2 --enable-shared
make
make install
注意·faad2的最新版本需要GCC4才能编译通过,我是升级到了4.3之后编译的
faac的编译
同样先要修改Configure文件的换行符
$ mv bootstrap bootstrap.bak
$ tr -d \\r < bootstrap.bak > bootstrap
$ mv configure.in configure.in.bak
$ tr -d \\r < configure.in.bak > configure.in
然后修改头文件,先下载faac-mp4v2.diff,
然后执行$ patch -p0 < faac-mp4v2.diff
最后执行下面的命令
cd faac
./bootstrap
./configure --with-mp4v2 --enable-shared
make
make install
重新编译ffmpeg
./configure --enable-memalign-hack --enable-gpl --enable-libmp3lame --enable-libfaad --enable-libfaac --enable-shared --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib
另外,下面的编译方法是一个不错的编译选项
These are unofficial FFmpeg Win32 builds made by Ramiro Polla.
These files were originally hosted at: http://arrozcru.no-ip.org/ffmpeg_builds/
The source code they were built with can also be found on the page above.
If you experience any problems with this build, please report them to:
http://arrozcru.no-ip.org/ffmpeg_forum/
FFmpeg revision number: 13712
FFmpeg license: GPL
configuration: --enable-memalign-hack --enable-avisynth --enable-libxvid \
--enable-libx264 --enable-libgsm --enable-libfaac \
--enable-libfaad --enable-liba52 --enable-libmp3lame \
--enable-libvorbis --enable-libtheora --enable-pthreads \
--enable-swscale --enable-shared --disable-static --enable-gpl
Build system:
gcc 4.2.3
nasm 2.02
w32api-3.11
mingw-runtime CVS May 18th, 2008
binutils 2.18.50
Extra libraries included:
zlib 1.2.3
http://www.zlib.net/
$ tar zxfv zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ ./configure --prefix=/mingw
$ make
$ make install
pthreads-win32 2.8.0
ftp://sources.redhat.com/pub/pthreads-win32
$ tar zxfv pthreads-w32-2-8-0-release.tar.gz
$ cd pthreads-w32-2-8-0-release
$ make clean GC-static
$ cp libpthreadGC2.a /mingw/lib
$ cp pthread.h sched.h /mingw/include
libfaac 1.26
http://www.audiocoding.com/
$ tar zxfv faac-1.26.tar.gz
$ patch -p0 < faac_1.26_01_buildsystem.diff
$ cd faac
$ sh bootstrap
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make LDFLAGS="-no-undefined"
$ make install
libfaad2 2.6.1
http://www.audiocoding.com/
$ tar zxfv faad2-2.6.1.tar.gz
$ patch -p0 < faad2_2.6.1_01_buildsystem.diff
$ cd faad2
$ sh bootstrap
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make LDFLAGS="-no-undefined"
$ make install
libmp3lame 3.97
http://www.mp3dev.org/
$ tar zxfv lame-3.97.tar.gz
$ cd lame-3.97
$ patch -p0 < ../lame_3.97_non_pic_objects.diff
$ ./configure --prefix=/mingw --disable-shared --enable-static --disable-frontend --enable-nasm
$ make
$ make install
libogg 1.1.3
http://www.xiph.org/
$ tar zxfv libogg-1.1.3.tar.gz
$ cd libogg-1.1.3
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make
$ make install
libvorbis 1.1.2
http://www.xiph.org/
$ tar zxfv libvorbis-1.1.2.tar.gz
$ cd libvorbis-1.1.2
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make
$ make install
libtheora 1.0beta3
http://www.xiph.org/
$ tar xfvj libtheora-1.0beta3.tar.bz2
$ patch -p0 < theora_1.0beta3_01_sys_types.diff
$ cd libtheora-1.0beta3
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make
$ make install
libgsm 1.0.12
http://kbs.cs.tu-berlin.de/~jutta/toast.html
$ tar zxfv gsm-1.0.12.tar.gz
$ patch -p0 < gsm_1.0-pl12_01_ansi_pedantic.diff
$ cd gsm-1.0-pl12
$ make
$ cp lib/libgsm.a /mingw/lib/
$ cp inc/gsm.h /mingw/include/
libamr-nb 7.0.0.1
http://www.penguin.cz/~utx/amr
$ tar xfvj amrnb-7.0.0.1.tar.bz2
$ cd amrnb-7.0.0.1
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make
$ make install
libamr-wb 7.0.0.2
http://www.penguin.cz/~utx/amr
$ tar xfvj amrwb-7.0.0.2.tar.bz2
$ cd amrwb-7.0.0.2
$ ./configure --prefix=/mingw --enable-static --disable-shared
$ make
$ make install
liba52 0.7.4
http://liba52.sourceforge.net
$ tar zxfv a52dec-0.7.4.tar.gz
$ cd a52dec-0.7.4
$ ./configure --prefix=/mingw
$ make
$ make install
xvidcore 1.1.3
http://www.xvid.org/downloads.html
$ tar xfvj xvidcore-1.1.3.tar.bz2
$ cd xvidcore-1.1.3/build/generic
$ ./configure --prefix=/mingw
$ make
$ make install
$ rm /mingw/lib/xvidcore.dll
$ mv /mingw/lib/xvidcore.a /mingw/lib/libxvidcore.a
x264 r803
http://developers.videolan.org/x264.html
$ tar xfvj x264-803.tar.bz2
$ patch -p0 < x264_01_heap_analysis.diff
$ cd x264-803
$ ./configure --prefix=/mingw
$ make
$ make install
Attachment | Size |
---|---|
faac-mp4v2.diff | 3.76 KB |