JHHK

欢迎来到我的个人网站
行者常至 为者常成

【MJ】14_编译FFmpeg

参考:【秒懂音视频开发】14_编译FFmpeg

本文是上面文章的摘要,只用于自己快速浏览.

目录

目标

编译出ffmpeg、ffprobe、ffplay三个命令行工具

只产生动态库,不产生静态库

将fdk-aac、x264、x265集成到FFmpeg中

x264、x265会在以后讲解的视频模块中用到

下载源码

Mac编译

一. 依赖项

brew install yasm
#ffmpeg的编译过程依赖yasm
#若未安装yasm会出现错误:nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
brew install sdl2
#ffplay依赖于sdl2
#如果缺少sdl2,就无法编译出ffplay
brew install fdk-aac
#不然会出现错误:ERROR: libfdk_aac not found
brew install x264
#不然会出现错误:ERROR: libx264 not found
brew install x265
#不然会出现错误:ERROR: libx265 not found

其实x264、x265、sdl2都在曾经执行brew install ffmpeg的时候安装过了。

可以通过brew list的结果查看是否安装过

brew list | grep fdk
brew list | grep x26
brew list | grep -E 'fdk|x26'

如果已经安装过,可以不用再执行brew install

二. configure

# 我的源码放在了Downloads目录下
cd ~/Downloads/ffmpeg-4.3.2

#然后执行源码目录下的configure脚本,设置一些编译参数,做一些编译前的准备工作。
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265

–prefix
用以指定编译好的FFmpeg安装到哪个目录
一般放到/usr/local/ffmpeg中即可

–enable-shared
生成动态库

–disable-static
不生成静态库

–enable-libfdk-aac
将fdk-aac内置到FFmpeg中

–enable-libx264
将x264内置到FFmpeg中

–enable-libx265
将x265内置到FFmpeg中

–enable-gpl
x264、x265要求开启GPL License

–enable-nonfree
fdk-aac与GPL不兼容,需要通过开启nonfree进行配置

你可以通过configure –help命令查看每一个配置项的作用。

./configure --help | grep static
 
# 结果如下所示
--disable-static         do not build static libraries [no]

三. 编译

make -j8

Makefile描述了整个项目的编译和链接等规则

四. 安装

#将编译好的库安装到指定的位置:/usr/local/ffmpeg。
make install

五. 配置PATH

为了让bin目录中的ffmpeg、ffprobe、ffplay在任意位置都能够使用,需要先将bin目录配置到环境变量PATH中。

# 编辑.zprofile
vim ~/.zprofile
 
# .zprofile文件中写入以下内容
export PATH=/usr/local/ffmpeg/bin:$PATH
 
# 让.zprofile生效
source ~/.zprofile

如果你用的是bash,而不是zsh,只需要将上面的.zprofile换成.bash_profile。

六. 验证

接下来,在命令行上进行验证。

#自己编译的ffmpeg可以将showBanner信息去掉,也可以通过这个特征来验证使用的是否是自己编译出的ffmpeg
ffmpeg -version

Windows编译

一. 下载安装MSYS2

二. 安装依赖

三. configure

四. 编译、安装

五. bin

六. Path


行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.