FFmpeg编译无坑版(Windows篇)--转载
1 前言
FFmpeg在Linux/Mac下编译比较简单,但是在Windows平台下编译确是一步一个坑,稍不注意就会掉进去,费时费力。之前4月份的时候在公司没编译出来,直接用的别人编译好了的库做的开发,现在有时间了,花了半天的时间编译成功,包括Windows下.lib和.dll,使用Android NDK编译生成的静态库.a和动态库.so。
2 准备工作
这应该是所需要的最少的软件和配置:
image
①MSYS2(重要!):https://www.msys2.org/, 傻瓜式安装,但是要自己配置环境变量,下载后在开始菜单能看到如下4个程序,我们使用的是MSYS2 MinGW 64-bit,我的安装目录是E:\msys64
image
②FFmpeg源码:http://ffmpeg.org/download.html,直接下载最新的就可以,解压后放到E:\msys64\home\ivan(如果你是C盘就放C:\msys64\home\你的用户名)
③Git:https://git-scm.com/download/win ,下载安装下一步就行,会自动配置环境变量
④x264源码:https://www.videolan.org/developers/x264.html,为了支持ffmpeg的H264编解码必须先编译这个,也是放在E:\msys64\home\ivan,此时该目录是这样的:
另配置的环境变量:
3 Windows下编译FFmpeg
①首先编译x264:以管理员方式启动MSYS2 MinGW 64-bit,MSYS2是Windows下的Linux模拟器,支持绝大多数的Linux命令,软件包管理器是pacman,首先安装mingw工具链:pacman -S mingw-w64-x86_64-toolchain
按下Enter默认全部安装,如果速度慢的话可以切换中科大镜像源。
其他需要的还有:
原创的base-deve1 写错了,应该是base-devel。 字母l被写成数字1了,被纠正了下。
pacman -S base-devel #下面的可能需要,还是前面两句已经集成了,反正装也不费事 pacman -S yasm nasm gcc
②编写编译脚本build.sh,用一个系统变量来代替路径比较好些:
touch build.sh
脚本内容如下:
basepath=$(cd `dirname $0`;pwd) echo ${basepath} cd ${basepath}/x264-master pwd ./configure --prefix=${basepath}/x264_install --enable-static make make install
执行脚本:
sh build.sh
经过一段时间的等待,安装完成,进入E:\msys64\home\Ivan\x264_install\lib,发现libx264.a静态库已经编译得到了:
③编译FFmpeg源码:
basepath=$(cd `dirname $0`;pwd) echo ${basepath} cd ${basepath}/x264-master pwd cd ${basepath}/ffmpeg-4.4 pwd ./configure --prefix=${basepath}/ffmpeg_install --enable-static --disable-shared \ --extra-cflags=-l${basepath}/x264_install/include --extra-ldflags=-L${basepath}/x264_install/lib make make install
这样执行脚本得到的是静态库,如果要得到动态库,
就把--enable-static --disable-shared改成--disable-static --enable-shared,得到的库如下:
4 用Android NDK编译FFmpeg
①准备工作同上面所讲,额外下载Android NDK:https://developer.android.google.cn/ndk/downloads/,下载后解压到E:\msys64
②编写编译脚本:这里我新建了个ffmpeg解压后的文件夹,所以安装的目录写为ffmpeg2_install
basepath=$(cd `dirname $0`;pwd) echo ${basepath} cd ${basepath}/x264-master pwd cd ${basepath}/ffmpeg pwd ./configure --prefix=${basepath}/ffmpeg2_install --enable-static --enable-shared \ --enable-cross-compile --target-os=android --arch=arm \ --cc=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/armv7a-linux-androideabi21-clang \ cross-prefix=/e/msys64/android-ndk-r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/arm-linux-androideabi- \ make make install
编译过程可以看到主要的7个库,还有编码格式,如音频的aac,opus等,视频的h263,h264,vp8,vp9等
经过漫长的等待,编译好后的文件夹如图:
成功有了.a和.so文件!可以开始我们的ffmpeg之旅啦!
以上项目见https://github.com/Ivan-lsq/ffmpeg