编译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
 

AttachmentSize
faac-mp4v2.diff3.76 KB