通过windows + Cygwin编译:
首先安装Cygwin, 通过以下连接获取:
http://www.cygwin.com/setup.exe
这种方式的安装过程,最复杂,和最耗时的就在安装Cygwin上了。setup.exe下载非常简单也很快,都不到1M. 但是这只是下载了安装的包的客户端。接下来的安装是通过setup.exe从官方网站下载安装包。速度会很慢,并且根据你所选的包种类,大小不一样。如果全部选中那么你将要下载的总大小在六七百M以上。也许你觉得不大,但是当我告诉你速度下载的速度很慢时,并且经常会出现下载到半截就死活不动了。(至少在中国很慢,不光是我有这种感受,在网上看到很多人都有这个问题,甚至有位网友为了解决这个网速慢和下载不动的情况,自己研究一套方案)。并且如果全选安装后会吃掉你两三个G的空间。我们只是编译ffmpeg,所以没有必要全选,只选devel这个就可以了(忘了说怎么进行安装,由于安装向导做的不错,所以你只要按照向导说的一步一步往下走ok ,我这里只说其中关键的步骤)。另外在选mirror site的时候请选ftp://mirrors.kernel.org(如果你在中国这个网站可能会快一些)。为了下载我试过里面几乎所有的网站,当然如果你选用我推荐的这个网站,速度仍然很慢,你可以选用美国的那些镜像。也许你会问我怎么知道那个是美国的镜像,问得好,打开www.cygwin.com这个网站,这是cygwin的官方网站。在主页的右面请点击mirror site,那么现在你可以看到那些是美国的了。
好了,让我们继续。
假设你现在已经安装完成了cygwin的安装。打开cygwin的命令窗口, 进入ffmpeg 的目录,cygwin进入windows的方式为
cd /cygdrvie/[盘符]/…
例如进入d:\test\ffmpage,那么命令就是:
cd /cygdrive/d/test/ffmpeg
进入目录后,键入 ./configure –enable-memalign-hack –disable-debug 然后回车
等待几分钟后,看到执行成功,祝贺你。接下来我们要执行的命令是make.
但是当你输入make后发现,提示你make不认识。好,去 cygwin的bin目录看看有没有这个make.exe存在, 结果不存在,那我们去找个一个最新的make.
这里有2个方法来解决这个问题,
重新启动cygwin的setup, 在安装组件选择界面中, 在最上方的文本框中输入make, 下面就会相应的显示包,然后选择安装这个包,继续完 成安装.
在网络上找一个最新的make, 要求版本是3.81. 然后直接拷贝到 /cygwin/bin目录.
好,现在再一次执行命令make, 你会看到CC xxx, CC xxx之类的东西.说明已经用gcc开始编译了.
如果没有什么编译错误, 你可以在命令行的最后几行看到ffmpeg.exe, ffserver.exe, ffprobe.exe
这说明成功了.
但是你会发现你没有看到ffplay.exe
那是因为要编译ffplay必须依赖于sdl库,这同样是一个opensource 的东西, 对应的官网是http://www.libsdl.org. 这个库负责一些输入设备的事件以及界面的事情. 若想了解更多,请参看官网.
接下来我们要做的是下载对应的源代码,编译,安装.
首先下载源代码:
http://www.libsdl.org/release/SDL-1.2.14.tar.gz
下载完毕后拷贝到 /cygwin/home/下面.然后cygwin的窗口中进入home目录, 接着输入tar -xf sdl-1.2.14.tar.gz 这个命令是用来解压我们刚才下载的文件的. 解压完毕后, cd sdl-1.2.14进入sdl的源代码目录. 执行sh autogen.sh, 大约一分钟后, 你会看到 you are ready to run confingure. 这个表示刚才那条命令执行成功了. 并且告诉你下一条命令是configure. 好接下来我们输入./configure命令.
这个需要几分钟的时间. 我在执行这条命令时出错,
***Your compiler (gcc) does not produce Win32 executables
google了一下, 找到一个解决办法:
是在一个老外的网站看到的, 他是这样写的
chmod755/usr/bin/set−gcc−default−3.sh /usr/bin/set-gcc-default-3.sh
但是当输入第一条命令后, 错了, 说找不到set-gcc-default-3.sh. 我们去对应目录找找, 果然没有. 并且usr目录下竟然没有bin这个目录. 我猜是不是在/cygwin/bin下面, 果然在那里找到了. 从这个可以看到开源代码一个很大的问题, 版本很稳定. 变化很大. 也许我的这个编译文档过几个月可能就不能用了.好了回到主题.
当编译完毕后需要将gcc的版本切换回来, 切换回4的命令如下:
chmod755/usr/bin/set−gcc−default−4.sh /usr/bin/set-gcc-default-4.sh
这个命令是的作用是将gcc的版本转换为3, 当前版本是4. 因为sdl要求的环境是3的.
接下来就是
make
make install
如果上面的命令执行都没有错误的话, 接下来我们要做的就是重来编译我们的ffmpeg, 就是进入ffmpeg的目录,执行
./configure –enable-memalign-hack –disable-debug
make
这里有个小技巧, 可以帮助我们在不执行make命令的情况下, 判断执行make命令后我们能不能得到ffplay. 毕竟make需要超过10分钟的时间. 就是在configure命令执行完毕后查看结果的最初20行左右, 找到sdl support, 如果它的右边写的是yes, 那就说明我们可以得到ffplay,如果是no, 那就得不到ffplay.
我的结果是yes, 接下来执行make, 还是有错误, __assert 没有定义之类的错误.有人说把对应的libavformat等文件下 .a文件删除.然后用
./configure –enable-memalign-hack –disable-debug –enable-shared –disable-static
如果要编译出ffserver,还需要加上–enable-network –enable-protocols –enable-muxers
到这里在cygwin下面的编译就通过了.
顺便解释一下,如果你要编译出动态库,就要加上
–enable-shared
–enable-static
另外, –enable-memalign-hack是指编译时,使用内存对齐方式,这样以便编译时用mmx或者sse指令对代码进行优化。
make install
在这种编译方式下是把编译出来的文件拷贝到C:\cygwin\usr\local\bin目录,要看你的cygwin安装到什么地方,我的安装在c盘,所以是C:\cygwin\。如果是后面的一种编译方式,则是将编译出来的文件拷贝到msys的安装目录,如我的是安装到c盘,就是c:\msys\local\bin
ffmpeg编译时,还可以根据你cpu 核心的个数,进行编译时间的优化,也就是说当你指定你的cpu为双核时,比你不指定编译要快。例如指定2核心时:
make -j2