编译步骤
1 安装 mingw 和 msys
执行下载文件:mingw-get-inst-xxxxxx.exe,
在第3步选择“Download latest repository catalogues”
选择安装路径:C:\MinGW(我直接采用默认路径,未做修改)
在“Select Components”步骤中选择:
√ C Compiler (默认且一定选择)
√ C++ Compiler
√ MSYS Basic System(选择此项将会安装msys,msys则不需要另外安装)
√ MinGW Developer ToolKit
等待安装完成!(需要等待一定的时间,因为安装过程需要下载文件,可想而知,网速越快,安装越快)
安装完成后,在C:\MinGW目录下可以看到 msys 文件夹,msys也已经安装。
2 配置 msys.bat 批处理文件
为了方便VS200X以及VS2010调用ffmpeg的动态库,可以通过配置让ffmpeg编译时产生windows下调用dll对应的lib,当然,如果你没有这个需要,那么就可以省略以下处理,直接进入步骤3。
进入:C:\MinGW\msys\1.0\文件夹,使用UltraEdit打开msys.bat文件,在文件的最最前面加入如下一行:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
添加后效果如下:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
@echo off
rem Copyright (C): 2001, 2002, 2003, 2004, 2005 Earnie Boyd
rem mailto:earnie@users.sf.net
rem This file is part of Minimal SYStem
rem http://www.mingw.org/msys.shtml
rem
rem File: msys.bat
rem Revision: 2.4
rem Revision Date: December 8th, 2005
rem ember to set the "Start in:" field of the shortcut.
rem A value similar to C:\msys\1.0\bin is what the "Start in:" field needs
rem to represent.
3 系统整合
使用UltraEdit修改C:\MinGW\msys\1.0\etc目下的fstab文件,如果不存在fstab,请复制一份fstab.sample,然后改名为:fstab,再修改其内容为:C:/MinGW /mingw,也即为MinGW的安装路径。
4 配置 yasm
为了减少配置环境变量的麻烦,本处直接把 yasm-xxxx-win32.exe 文件名修改成:yasm.exe,并放到系统目录下:C:\WINDOWS\system32。
5 编译 mp3lame(可选项)
lame-3.100.tar.gz 接压到:C:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到lame目录:C:\ffmpeg\lame-3.100
$ cd /c
$ cd ffmpeg
$ cd lame-3.100
再执行以下命令:
$./configure --disable-shared (首选)
或: $./configure --disable-static --enable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
如果提示
parse.c:74:22: fatal error: langinfo.h: No such file or directory
则下载 http://abechin.sakura.ne.jp/sblo_files/k-tai-douga/ffmpeg/lame-3.100-parse_c.diff
$ patch -p1 < lame-3.100-parse_c.diff
$ CPPFLAGS=-msse ./configure --prefix=/mingw --disable-shared --enable-nasm
$ make
$ make install
6 编译 x264(可选项)
X264 自从2015年以后,默认的汇编器从 yasm 改成了nasm, 下一步需要下载nasm.exe
找到MinGW的安装目录,把下载后的nasm.exe 放在MinGW\bin 目录下
last_x264.tar.bz2 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到x264目录
再执行以下命令:
$./configure --enable-shared --disable-asm
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
7 编译 Xvid(可选项)
xvidcore-1.3.2.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到xvidcore目录:D:\ffmpeg\xvidcore\build\generic
$ cd /d
$ cd ffmpeg
$ cd xvidcore/build/generic
再执行以下命令:
$./configure --prefix=C:/MinGW/msys/1.0/local
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下。
需要注意的就是:此处编译加上了路径
如果make时出现:cc1.exe: error: unrecognized command line option '-mno-cygwin' 错误,请在./configure后make之前修改xvidcore\build\generic里的 platform.inc文件,直接删除里面的“-mno-cygwin”。
具体可以参考:http://ffmpeg.zeranoe.com/forum/viewtopic.php?f=5&t=111里2楼的回答,如果按他说的:I recommend re running ./bootstrap.sh after you do this.,我发现不太行,一运行bootstrap.sh后,platform.inc文件会被还原,并且./configure时也会还原该文件,所以我选择在./configure后make前修改,可以编译通过,目前没检验Xvid是否可用。
8 编译 faad2(可选项)
faad2-2.7.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到faac2目录:D:\ffmpeg\faad2-2.7
$ cd /d
$ cd ffmpeg
$ cd faad2-2.7
再执行以下命令:
$./bootstrap
$./configure --disable-static --enable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
9 编译faac(可选项)
faac-1.28.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到faac2目录:D:\ffmpeg\faac-1.28
$ cd /d
$ cd ffmpeg
$ cd faac-1.28
再执行以下命令:
$./bootstrap
$./configure --disable-static --enable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
10 编译vo-aacenc (可选项)
vo-aacenc-0.1.1.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到vo-aacenc目录:D:\ffmpeg\vo-aacenc-0.1.1
$ cd /d
$ cd ffmpeg
$ cd vo-aacenc-0.1.1
再执行以下命令:
$./configure --disable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
11 编译amr-nb和amr-wb (早期ffmpeg版本,可选项)
在编译amrnb和amrwb之前还需要做点其它的准备工作:
A 先到网上搜索下载wget工具,解压后放到C:\MinGW\bin目录下,此工具是个网络下载工具,用来在编译时自动下载3gpp源码。
B 再先到Download GnuWin from SourceForge.net 下载unzip-5.51-1-bin.zip后进行解压,并把unzip-5.51-1-bin\bin中的unzip.exe拷贝到C:\MinGW\bin目录下,此工具用来在编译时自动解压3gpp源码。
amrnb-7.0.0.2.tar.tar 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到amrnb目录:D:\ffmpeg\amrnb-7.0.0.2
$ cd /d
$ cd ffmpeg
$ cd amrnb-7.0.0.2
再执行以下命令:
$./configure --disable-static --enable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
amrwb-7.0.0.4.tar.tar 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到amrwb目录:D:\ffmpeg\amrwb-7.0.0.4
$ cd /d
$ cd ffmpeg
$ cd amrwb-7.0.0.4
再执行以下命令:
$./configure --disable-static --enable-shared
$ make
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
12 编译opencore-amr 和vo-amrwbenc (可选项)
opencore-amr-0.1.2.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。
如果是opencore-amr-0.1.1.tar.gz请注释掉以下Makefile中的几行
文件: ./opencore-amr/amrnb/Makefile
install: libopencore-amrnb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
endif
文件: ./opencore-amr/amrwb/Makefile
install: libopencore-amrwb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
endif
切换到opencore-amr目录:D:\ffmpeg\ opencore-amr-0.1.2
$ cd /d
$ cd ffmpeg
$ cd opencore-amr-0.1.2
再执行以下命令:
$./configure --disable-shared
$ make CC=gcc
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
vo-amrwbenc-0.1.1.tar.gz 接压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,已经启动的话就不用再重新启动了。切换到vo-amrwbenc目录:D:\ffmpeg\ vo-amrwbenc-0.1.1
$ cd /d
$ cd ffmpeg
$ cd vo-amrwbenc-0.1.1
再执行以下命令:
$./configure --disable-shared
$ make CC=gcc
$ make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
13 编译SDL(可选项)
SDL-1.2.14.tar.tar 解压到:D:\ffmpeg\ 目录下, 双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到SDL目录:D:\ffmpeg\SDL-1.2.14,切换方法如下:
$ cd /d
$ cd ffmpeg
$ cd SDL-1.2.14
再执行以下命令:
./configure
make
make install
编译结果在:C:\MinGW\msys\1.0\local 目录下
注意:如果是使用编译好的SDL-devel-1.2.14-mingw32.tar.tar,那么就可以省掉上面的编译工作,直接解压SDL-devel-1.2.14-mingw32.tar.tar文件即可。自己编译或直接使用编译好的都需要做下面的修改和拷贝工作。
使用UltraEdit打开C:\MinGW\msys\1.0\local\bin下的 sdl-config文件
把 prefix=/usr 该成: prefix=c:/mingw
其中:c:/mingw 为 mingw的安装路径,请根据你的安装进行修改。为了编译时msys能识别sdl并开启 SDL support yes 进行编译,请把C:\MinGW\msys\1.0\local编译结果bin、include和lib中有关sdl的拷贝一份到C:\MinGW\的对应目录中。
14 拷贝编译结果
C:\MinGW\msys\1.0\local 到 D:\ffmpeg\ffmpeg-0.8.6
bin拷贝到 bin中
include拷贝到 include中
lib拷贝到 lib中
当然该拷贝过程你可以不做,只要在编译的时候把路径指到:C:\MinGW\msys\1.0\local里面。
15 编译 ffmpeg
ffmpeg-0.8.6.tar.bz2 解压到:D:\ffmpeg\ 目录下,双击“C:\MinGW\msys\1.0\msys.bat”,启动“MinGW32”,切换到ffmpeg目录:D:\ffmpeg\ffmpeg-0.8.6,切换方法如下:
$ cd /d
$ cd ffmpeg
$ cd ffmpeg-0.8.6
如果你的“MinGW32”没有关闭,可以直接切换路径到:D:\ffmpeg\ffmpeg-0.8.6。
再执行以下命令:
$ ./configure --enable-shared --disable-static --enable-ffplay
--enable-nonfree --enable-memalign-hack
--enable-libmp3lame
--enable-gpl--enable-libx264
--enable-libxvid
--enable-faad --enable-libfaac
--enable-libvo-aacenc
--enable-version3 --enable-libopencore-amrnb
--enable-libopencore-amrwb --enable-libvo-amrwbenc
--extra-cflags=-Id:/ffmpeg/ffmpeg-0.8.6/include
--extra-ldflags=-Ld:/ffmpeg/ffmpeg-0.8.6/lib
请耐心等待一段时间,以上命令不能直接换行哦并且根据ffmpeg的版本不同有所变化,具体看./configure --help,你知道的。。。
$ make
需要等待很长一段时间,等待编译结束。
为了汇总编译结果,请继续执行以下命令:
$ make install
等待完成,在C:\MinGW\msys\1.0\local中将会生成 bin、include、lib等文件夹,其中包含了ffmpeg.exe、ffplay.exe、ffprobe.exe、dll、lib和头文件等。
16 运行测试
直接双击运行”ffplay.exe”,如果提示没有“pthreadGC2.dll”文件,你可以包“pthreadGC2.dll”直接拷贝到当前目录,也可放到系统目录C:\WINDOWS\system32中。
ffplay f:/xxx.mp4
本文详细指导如何在Windows 10环境下,通过MSYS2和MinGW编译器实现VS2017兼容的FFmpeg动态库和静态库,涉及多个可选组件如MP3LAME、x264、Xvid等的编译配置。
493

被折叠的 条评论
为什么被折叠?



