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



原作者:倚楼听風雨