FFmpeg编译无坑版(Windows篇)

admin 6141次浏览

摘要:1 前言 FFmpeg在Linux/Mac下编译比较简单,但是在Windows平台下编译确是一步一个坑,稍不注意就会掉进去,费时费力。之前4月份的时候在公司没编

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,此时该目录是这样的:

image

另配置的环境变量:

image

3 Windows下编译FFmpeg

①首先编译x264:以管理员方式启动MSYS2 MinGW 64-bit,MSYS2是Windows下的Linux模拟器,支持绝大多数的Linux命令,软件包管理器是pacman,首先安装mingw工具链:

pacman -S mingw-w64-x86_64-toolchain

按下Enter默认全部安装,如果速度慢的话可以切换中科大镜像源。

其他需要的还有:

pacman -S base-deve1

#下面的可能需要,还是前面两句已经集成了,反正装也不费事

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静态库已经编译得到了:

截图 (4).png

③编译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,得到的库如下:

截图 (5).png

截图 (6).png

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等

截图 (7).png

截图 (8).png

经过漫长的等待,编译好后的文件夹如图:

截图 (9).png

截图 (10).png

成功有了.a和.so文件!可以开始我们的ffmpeg之旅啦!

以上项目见https://github.com/Ivan-lsq/ffmpeg

相关文章
友情链接