2010_3_1最新 完整 FFMPEG 编译详解

时间:2023-03-08 16:45:49

在网上看了很多编译详解,都很零散。经过自己的编译,解决一些BUG,在此分享自己的一些经验... 话不多说了!直接上贴。
第一步:准备编译平台。
需要 一个 MinGW 和 一个 MSYS 安装包 以及 MSYS_DTK.
   当前最新是版本:
   MinGW5.1.6.exe    [url=http://sourceforge.net/projects/mingw/files/]下载[/url]
   msysDTK-1.0.1.exe [url=http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe]下载[/url]
   Msys1.0.11.exe    [url=http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe]下载[/url]
按照以上顺序安装 :
     建议:(可选)
     把 MinGw5.1.6 安装到 F:/MinGw (为了路径简短起见)
     把Msys1.0.11 安装到 F:/MinGw/Msys(为了方便起见)
(有些机器不会在/MinGw/Msys/etc中产生正确的fstab文件,因此确保
/MinGw/Msys/etc中具有一个fstab文件 内容为:F:/MinGw /minwg  前者为你的MinGw安装目录 后面对应MinGw目录)
第二步:准备编译工具
  需要一些编译工具,以便能够编译需要的库。
1.二进制工具(xx.exe文件)
  pr.exe (在coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 包的bin目录中)[url=http://sourceforge.net/projects/mingw/files /MSYS Base System/_obsolete/coreutils-5.97-MSYS-1.0.11-2/coreutils- 5.97-MSYS-1.0.11-snapshot.tar.bz2/download]下载[/url]
  (ffmpeg中 configure执行需要用到)
  复制到 MinGW/bin中
(注意:是MinGW目录中的bin)
  SDL 工具 [url=http://www.libsdl.org/docs.php]下载[/url] (ffmpeg 需要用到)
  在包中的四个目录:bin lib include share 一起复制到 MinGw 目录下
  (bin 中包含 有 SDL.dll 和 sdl-config)
  在sdl-config中修改 第一行为 prefix=/mingw
  ([url=http://www.ffmpeg.com.cn/index.php/Ffplay使用事例]参考[/url])
  unzip.exe 工具 [url=unzip-5.51-1.exe][url=http://sourceforge.net/projects/gnuwin32 /files/unzip/]下载[/url][/url] (安装 libamrnb libamrwb 需要用到)
  解压 unzip-xxx-bin.zip 后在bin 中复制 unzip.exe 到 MinGw/Msys/bin 中
(注意:是 Msys目录中的bin)
  wget.exe 工具 [url=http://ftp.gnu.org/gnu/wget/]下载[/url] (安装 libamrnb libamrwb 需要用到)
  解压后 在 bin 中拷贝 wget.exe 到 MinGw/Msys/bin 中
(注意:是 Msys目录中的bin)
  git.exe 工具 下载(获取x264库需要用到)
  安装:[url=http://msysgit.googlecode.com/files/Git-1.6.5.1-preview20091022.exe]Git-1.6.5.1-preview20091022.exe[/url]
2.源码安装包(需要编译安装的工具包)
  autoconf [url=http://ftp.gnu.org/gnu/autoconf/]下载[/url]
  automake [url=http://ftp.gnu.org/gnu/automake/]下载[/url]
  libtool  [url=http://ftp.gnu.org/gnu/libtool/]下载[/url]
  yasm     [url=http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz]下载[/url]
  下载最新版 然后解压到 Msys目录中的home/Administrator 中
  (说明:以后需要执行 'configure' 'make' 'make install' 命令来安装的xx.tag.gz包 都解压到Administrator里 以便控制台中方面路劲的输入)
包的安装:
举例安装 autoconf 包
  在Msys命令行中:
    cd autoconf 回车 (从 ~ 目录 进入 autoconf 目录)
    configure 回车 (执行配置文件)
    make 回车       (开始编译)
    make install 回车 (安装)
安装 automake包: 动作同上,只是要进入 automake 目录.(cd automake)
第三步:准备一个线程库(不准备编译x264的可以跳过)
  pthread包  [url=ftp://sources.redhat.com/pub/pthreads-win32/pthreads- w32-2-8-0-release.tar.gz]下载[/url] ([url=http://ffmpeg.arrozcru.org/wiki/index.php?title=Pthreads]参考[/url])
  解压到 MinGw/Msys/home/Administrator的pthread中
  在Msys命令行中:
     cd pthread 回车
     make GC 回车
  然后在pthread中找到 pthreadGC.dll 拷贝到 MinGw/bin 和 MinGw/lib 中
  ...............找到 pthread.h 和 sched.h  拷贝到 MinGw/include 中
  (注意有个Bug 打开sched.h line:152 和 line:154 的两个函数的参数类型pid_t 改成 int 这个Bug是自己遇到的,修改并不会影响任何功能,但并没有官方验证)
目前这里就配置好所有的编译环境了!
   以下是支持要编译的编解码库:
//===== Mp3lame [url=http://sourceforge.net/projects/lame/files/lame/]下载[/url]
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 lame
在Msys安装:
   cd lame 回车
   configure --enalbe-shared 回车
   make 回车
   make install 回车
//===== faac 和 faad2 [url=http://www.audiocoding.com/downloads.html]下载[/url] (两个包)
faac 安装:(faac-1.28 需要一个补丁 [url=http://bbs.chinavideo.org/attachment.php?aid=368&k=bdbac83ed608d3697e25e985527c3b9c&t=1267424723&fid=11&sid=ab1ep/jU/kNhVRIt9st/5vPwWJxoQCf7uJGIj3A397qIkfc]faac-1.28.diff[/url] )
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 faac
把补丁放到 faac 目录中
在Msys安装:
   cd faac 回车
   patch -p1 < faac-1.28.diff 回车
   bootstrap 回车
   configure --with-mp4v2 --enalbe-shared 回车
(不需要MP4 则第一个参数用--without-mp4v2 代替)
   make 回车
   make install 回车
faad 安装:(faad2-2.7 需要一个补丁 [url=http://bbs.chinavideo.org/attachment.php?aid=369&k=4624ab33cb734713942aafb25213926c&t=1267427156&fid=11&sid=3fa8T1Vt6ibnc+wFOLP4vp0CkKhIQj1NZ+Hpq3RhVaiUQPw]faad2-2.7.diff[/url] )
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 faad2
把补丁放到 faad2 目录中
在Msys安装:
   cd faad2 回车
   patch -p1 < faad2-2.7.diff 回车
(也可以手动修改,注释掉 faad2/frontend/main.c 中
    line: 34 的 #define off_t __int64 )
   bootstrap 回车
   configure --with-mp4vip --enalbe-shared 回车
(第一个参数可选)
   configure顺利完成之后
     在libfaad/Makefile中修改:
        将AM_CFLAGS = -iquote $(top_srcdir)/include
        改成:AM_CFLAGS = -I $(top_srcdir)/include
     (这个是一个Bug修正 以免出现:
       cc1.exe: error: unrecognized command line option "-iquote")
   make 回车
   make install 回车
//===== amrnb 和 amrwb [url=http://www.penguin.cz/~utx/amr#download]下载[/url]
amrnb安装:
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 amrnb
在Msys安装:
   cd amrnb 回车
   configure --enalbe-shared 回车
   make 回车
   make install 回车
amrwb安装:
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 amrwb
在Msys安装:
   cd amrwb 回车
   configure --enalbe-shared 回车
   make 回车
   make install 回车
//===== xvidcore [url=http://www.xvid.org/Downloads.43.0.html]下载[/url]
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 xvid
在Msys安装:
   cd xvid/build/generic 回车
   configure --enalbe-shared 回车
   make 回车
   make install 回车
//===== H.264
  下载x264库:
   在Windows 的控制台中输入 :
C:/...>  cd F:/mingw/msys/home/Administrator 回车
(切换路径到 Administrator目录)
F:/mingw/msys/home/Administrator > git clone git://git.videolan.org/vlc.git
这时x264包就会下载到mingw/msys/home/Administrator目录中
在Msys安装:
   cd x264 回车
   configure --enalbe-shared 回车
   make 回车
   make install 回车
(有个Bug,安装后 在mingw/msys/local/include/x264.h 中
line:209 中 修改 int i_bframe_pyramid; 为int b_bframe_pyramid; 保存)
//**************到这里 有一些常用的编解码库了  下面来编译FFMPEG
FFMPEG [url=http://www.ffmpeg.org/releases/ffmpeg-0.5.tar.bz2]下载[/url]
解压到 ~ 目录 (MinGw/Msys/home/Administrator)改名目录为 ffmpeg
(注意了,编译x264库 需要修改一下 ffmpeg的configure
  把 line 1996 :中的 x264_encoder_open加上一个x264版本号,可以从F:/MinGw
/msys/local/bin中的libx264-xx.dll 得知,这里编译得到的是libx264-88.dll
所以  把 line 1996 :中的 x264_encoder_open 改为 x264_encoder_open_88,以解决
编译x264后,编译ffmpeg 提示 libx264 not found.)
在ffmpeg目录中 新建一个文本文件 改名为 cml (无扩展名)
编辑 cml :
configure /
[size=3]--enable-ffplay /
--enable-static /
--enable-memalign-hack /
[/size][size=3]--enable-gpl / [/size]
[size=3]--enable-libmp3lame /
--enable-libfaac /
--enable-libfaad /
--enable-libx264 /
[/size][size=3]--enable-nonfree /  [/size][size=3]
--enable-libamr-nb /
--enable-libamr-wb / [/size]
[size=3]--extra-ldflags=-L/usr/local/lib /
--extra-cflags=-I/usr/local/include [/size]
保存.
在Msys中输入:
cml 回车
make 回车
make install 回车
大功告成! 不过xvid不能在ffmpeg编译中使用--enable-shared参数
不然会报错,你可以试试,如果可以,那就是我的机器问题! :-) 愉快

admin 发表于 2010-3-1 03:47 PM

非常完整,不错,谢谢分享!:victory:

lovesai 发表于 2010-3-19 10:29 AM

[b] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=30236&ptid=7837]1#[/url] [i]golocy[/i] [/b]
请问这是在哪个平台上的编译?如果要应用到WIN32怎么编,编译后要能直接被VC调用的那种

wzyzb 发表于 2010-3-24 03:36 PM

给的链接好多东西都下不了

wzyzb 发表于 2010-3-24 04:46 PM

[b] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=30236&ptid=7837]1#[/url] [i]golocy[/i] [/b] wget 和SDL 都不知道怎么下载啊 老兄!!

wzyzb 发表于 2010-3-24 07:21 PM

[b] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=30236&ptid=7837]1#[/url] [i]golocy[/i] [/b] wget下载解压没有/bin目录

wzyzb 发表于 2010-3-26 02:37 PM

[b] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=30236&ptid=7837]1#[/url] [i]golocy[/i] [/b]
autoconf 编译提示perl is not found

mlinmxf 发表于 2010-3-26 07:23 PM

楼主把你的系统环境先介绍一下啊。你是在win平台下编的?linux下要怎么编呢?

gboystal 发表于 2010-3-27 09:16 AM

搞了一下午,终于编完了。。

jcooper 发表于 2010-4-12 04:38 PM

很好,楼主辛苦了,谢谢总结,其实编译ff这个东西熟悉了就容易多了,难点在于如何用VC在win32平台下编译以获得最高性能

xchinasl2008 发表于 2010-4-21 04:26 PM

为什么我的X264下不下来啊

czt151715 发表于 2010-4-21 09:57 PM

可以下的
地址是:git clone git://git.videolan.org/x264.git

hunter104 发表于 2010-5-28 01:01 PM

enalbe 应该是enable吧?

xshzh 发表于 2010-7-16 09:32 AM

在安装libtool的时候出现:
checking for non-GNU ld... no
configure: error: no acceptable ld found in $PATH
请问是咋回事?执行configure的时候。
谢谢

admin 发表于 2010-7-16 10:45 AM

没有找到“ld.exe”

xshzh 发表于 2010-7-16 11:23 AM

“ld.exe”哪里有下载,谢谢

tocute 发表于 2010-7-29 06:36 PM

請問在 win 7 中操作以上的動作
卻一直出現
Permission Denied   
即使用了  chmod 777 結果也是一樣
請問我該如何解決了   謝謝

admin 发表于 2010-7-29 07:24 PM

[quote]Permission Denied[/quote] 这肯定是权限问题了,建议你关闭UAC试试!