最近要做到有关于x264相关的项目,需要用到FFmpeg
来使用x264
的编码以及解码,网上的一些关于FFmpeg支持x264的文档不完全对,我几乎都试了一遍,都会出现libx264 not found的错误提示,最终还是在z_muyangren这位博主的博客中找到了答案。
接下来我将记录从MSYS安装到FFmpeg支持x264的整个过程。一来为了后面遇到同样问题的同行少走点弯路。二来是当做笔记本,以免时间长了忘记掉。
MSYS安装到FFmpeg成功支持x264
MinGw+MSYS安装配置
首先下载MSYS:传送门下载可执行文件.exe
,如下图所示,
接下来按照这位博主的流程从头到尾实践就行了。但需要注意的是:
- 第二条我发现不去做它也行,因为文件里存在着指定的Server。
- 第7条中会安装其中比较重要的MinGw,这里不要全装,要区分64位还是32位的,别装错了,具体如下图所示:
安装过程也很简单,照着来就行了,结果如下图所示:
这三个终端都是指向同一个的,所以一般打开哪个都行,不过好想听说打开第二个比较好,不太会出问题。
MSYS是仿生UNIX操作系统的window工具集,UNIX成立比较早,后续的windows和Linux都是参照它来的,其指令也和linux差不多。
FFmpeg简单安装与检测
FFmpeg的编译环境配置好了,接下来可以去官网下载最新的FFmpeg源码
了—传送门(FFmpeg官网有提供编译好的,但是官方建议用户自行编译最新版本,因为一些编译好的版本普遍比较老,有些新功能并不支持)
接下来就是正式编译FFmpeg了:
- 进入FFmpeg源码目录输入
./configure
生成Makefile文件。(这里建议将FFmpeg和x264下载后解压的源码放入msys64/home/Administer/下,这是每次启动终端的默认初始访问地点,这样就不用了每次都cd到相关目录下了) - 执行
make
进行编译。 - 执行
make install
进行安装。 - 使用
./ffmpeg.exe -h
来验证。
这样依赖FFmpeg的简易
编译以及安装就完成了,结果是在源码目录生成3个可执行文件ffmpeg.exe、ffprobe.exe、ffplay.exe以及在MSYS默认安装路径usr/local/下安装了lib、a、dll、h等相关文件。但这只是简易的FFmpeg,并没有H.264、加字幕的编码支持。如需要支持这些,比如H.264,则需要安装以及通过额外参数定制来进行支持。可以使用./configure --help来查找所需要的第三方库(比如libx264、libass)。
x264安装
- 首先要到x264官网下载最新版本的源码—传送门。然后解压到msys64/home/Administer/下。
- 进入到x264源码目录,执行
./configure --enable-shared --enable-static
。 make
。make install
。- 成功执行后会在默认安装路径usr/local/下安装相应的库文件。
- cd到usr/local/bin下,执行x264.exe来验证是否安装成功。出现下图即成功:
FFmpeg配置支持x264
接下来这里就是困扰我多时的,用了很多命令,都是libx264 not found的错误提示,最终还是在z_muyangren这位博主的博客中找到了答案。
- 进入FFmpeg源码目录,执行
./configure --enable-gpl --enable-nonfree --enable-libx264 --enable-shared --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
。关键在于–extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib这里。
成功的结果如下:
编译ffmpeg时会出现WARNING:using libx264 without pkg-config tection may fail,不影响编译结果。 make
编译。make install
。- 重新打开终端,输入
ffmpeg -h encoder=libx264
来验证FFmpeg是否成功支持H.264。输出是一些x264的参数:
至此,FFmpeg成功支持H.264,可以实现工程的基本需要了!!!
参考资料
- 一些关于MinGw命令的知识
- enable参数的认识以及如何把库发给他人
- 全网最详细msys2编译libx264库。虽然他的方法没有给我成功解决问题,但是也有一定参考意义。
- FFmpeg安装第三方库
- .dll文件和.so文件。.so是Linux下的动态库,文件结构与.dll不一样的。所以在windows一般是不可以直接生成.so的。
- linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
- FFmpeg_编译支持h264编码的ffmpeg,并验证。真正成功帮助解决x264安装与支持。
- 有关pkg_config
- WARNING:using libx264 without pkg-config