在MacOS上下载并编译FFmpeg

不同的机器上编译FFmpeg可能会有一定的差异,这里先贴一下我的机器配,如果你在编译过程中遇到一些问题,可能需要针对你的机器做一些调整或在网上搜索答案解决问题。

芯片:Apple M2
内存:16GB
磁盘:256GB
系统版本:13.5 macOS Ventura

下载源码

打开 FFmpeg下载界面 并选择其中的其中的某个版本点击下载,这样你就得到了FFmpeg源码的压缩包。

解压这个压缩包,就可以看到FFmpeg的几个模块以及开源协议等内容。

erlang 复制代码
.
├── CONTRIBUTING.md
├── COPYING.GPLv2
├── COPYING.GPLv3
...
├── libavdevice
├── libavfilter
├── libavformat
├── libavutil
├── libpostproc
├── libswresample
├── libswscale
├── presets
├── tests
└── tools

配置 ./configure

在命令行中进入ffmpeg文件夹,执行./configure,可以看到下面的输出,这些输出显示了我要将ffmepg安装在什么路径、使用的什么编译器以及支持了哪些编码器等等,内容太多,就不在这里一一列举了。

yaml 复制代码
└─[$]> ./configure
install prefix            /usr/local
source path               .
C compiler                gcc
C library
ARCH                      aarch64 (generic)
big-endian                no
runtime cpu detection     yes
NEON enabled              yes
...
... 太多内容了省略


Enabled outdevs:
audiotoolbox            sdl2

License: LGPL version 2.1 or later

WARNING: pkg-config not found, library detection may fail 

最终还得到了一个警告WARNING: pkg-config not found, library detection may fail,这个意思是FFmpeg的编译过程中将使用pkg-config这个工具,它将用来检测FFmpeg编译过程中一些依赖库是否存在。但是在我的电脑中没有找到这个工具,管它三七二十一,直接brew install pkg-config梭一把,看看效果,果然,还是很容易安装的嘛~

dart 复制代码
┌─[sunlulu@sunluludeMac-mini] - [~/Downloads/ffmpeg-5.1.4] - [六  1 20, 22:03]
└─[$]> brew install pkg-config
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/api/formula.jws.json
##################################################################################################################################################################################################################################### 100.0%
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/api/cask.jws.json
##################################################################################################################################################################################################################################### 100.0%
==> Fetching pkg-config
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/pkg-config-0.29.2_3.arm64_ventura.bottle.tar.gz
##################################################################################################################################################################################################################################### 100.0%
==> Pouring pkg-config-0.29.2_3.arm64_ventura.bottle.tar.gz
🍺  /opt/homebrew/Cellar/pkg-config/0.29.2_3: 11 files, 676KB
==> Running `brew cleanup pkg-config`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> `brew cleanup` has not been run in the last 30 days, running now...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.

既然安装了pkg-config这个工具,那么现在我们也就拥有了编译前置检测能力,这时候再运行一把./configure,输出如下:

bash 复制代码
┌─[sunlulu@sunluludeMac-mini] - [~/Downloads/ffmpeg-5.1.4] - [六  1 20, 22:10]
└─[$]> ./configure
install prefix            /usr/local
source path               .
C compiler                gcc
C library
... 太多省略

libavformat/demuxer_list.c is unchanged
libavformat/muxer_list.c is unchanged
libavdevice/outdev_list.c is unchanged
libavformat/protocol_list.c is unchanged

这次输出已经没有警告信息了,并且最后显示xx.c is unchanged,表明我们这次是增量配置,./configure可以多次执行,没有任何问题。

当然,我们还可以在配置阶段指定编译哪些库,通过./configure --help查询配置阶段支持哪些选项。

编译 make

在FFmpeg文件夹下,执行make开始编译,整个编译过程很顺利,大概持续了一两分钟,中间时不时跳出一些warning,比如下面这些,不过我想这些应该没什么关系,我们继续下一步。

bash 复制代码
libavcodec/videotoolboxenc.c:380:9: warning: variable 'status' set but not used [-Wunused-but-set-variable]
    int status;
        ^
libavcodec/videotoolboxenc.c:1626:9: warning: variable 'sei_payload_type' set but not used [-Wunused-but-set-variable]
    int sei_payload_type = 0;
        ^
2 warnings generated.
CC	libavcodec/vima.o
CC	libavcodec/vlc.o
CC	libavcodec/vmdaudio.o
CC	libavcodec/vmdvideo.o
CC	libavcodec/vmnc.o
CC	libavcodec/vorbis.o
CC	libavcodec/vorbis_data.o
CC	libavcodec/vorbis_parser.o
CC	libavcodec/vorbisdec.o
libavcodec/vorbisdec.c:1904:8: warning: 'channel_layouts' is deprecated [-Wdeprecated-declarations]
    .p.channel_layouts = ff_vorbis_channel_layouts,
       ^
libavcodec/codec.h:225:5: note: 'channel_layouts' has been explicitly marked deprecated here
    attribute_deprecated

安装 make install

编译完成之后,是时候将产物和头文件安装到对应目录,在FFmpeg文件夹下执行make install,很不幸,我这里得到一个Error,如下:

bash 复制代码
└─[$]> make install
INSTALL	doc/ffmpeg.1
INSTALL	doc/ffplay.1
INSTALL	doc/ffprobe.1
INSTALL	doc/ffmpeg-all.1
INSTALL	doc/ffplay-all.1
INSTALL	doc/ffprobe-all.1
INSTALL	doc/ffmpeg-utils.1
INSTALL	doc/ffmpeg-scaler.1
INSTALL	doc/ffmpeg-resampler.1
INSTALL	doc/ffmpeg-codecs.1
INSTALL	doc/ffmpeg-bitstream-filters.1
INSTALL	doc/ffmpeg-formats.1
INSTALL	doc/ffmpeg-protocols.1
INSTALL	doc/ffmpeg-devices.1
INSTALL	doc/ffmpeg-filters.1
INSTALL	doc/libavutil.3
INSTALL	doc/libswscale.3
INSTALL	doc/libswresample.3
INSTALL	doc/libavcodec.3
INSTALL	doc/libavformat.3
INSTALL	doc/libavdevice.3
INSTALL	doc/libavfilter.3
install: /usr/local/share/man/man1/ffmpeg.1: Permission denied
make: *** [install-man] Error 71

显然,是因为我们之前在配置阶段的安装路径(默认的),当前用户执行时并没有权限(安装其实就是往这里文件夹里面拷贝一些文件)。

bash 复制代码
install prefix            /usr/local

修改命令为sudo make install,用root权限执行,没有任何错误。

bash 复制代码
┌─[sunlulu@sunluludeMac-mini] - [~/Downloads/ffmpeg-5.1.4] - [六  1 20, 22:27]
└─[$]> sudo make install
Password:
INSTALL	doc/ffmpeg.1
INSTALL	doc/ffplay.1
INSTALL	doc/ffprobe.1
INSTALL	doc/ffmpeg-all.1
INSTALL	install-progs-yes
INSTALL	ffmpeg
INSTALL	ffplay
INSTALL	ffprobe
...
INSTALL	presets/libvpx-1080p.ffpreset
INSTALL	presets/libvpx-1080p50_60.ffpreset
INSTALL	presets/libvpx-360p.ffpreset
INSTALL	presets/libvpx-720p.ffpreset
INSTALL	doc/examples/filtering_audio.c
INSTALL	doc/examples/filtering_video
...
INSTALL	libavutil/video_enc_params.h
INSTALL	libavutil/xtea.h
INSTALL	libavutil/tea.h
INSTALL	libavutil/tx.h
INSTALL	libavutil/film_grain_params.h
INSTALL	libavutil/avconfig.h
INSTALL	libavutil/ffversion.h
INSTALL	libavutil/libavutil.pc

可以看到make install安装的内容主要包括:

  • 文档类doc/** :FFmpeg的一些说明和一些示例代码
  • 可执行程序:包括ffmpeg、ffprobe以及ffplay
  • 头文件:写程序时include使用
  • 其他的:.preset文件 .pc文件

由于我们安装的路径前缀是/usr/local,进入这个目录看下

css 复制代码
┌─[sunlulu@sunluludeMac-mini] - [/usr/local] - [六  1 20, 22:40]
└─[$]> cd /usr/local
┌─[sunlulu@sunluludeMac-mini] - [/usr/local] - [六  1 20, 22:40]
└─[$]> ls
bin      corplink etc      include  lib      share
┌─[sunlulu@sunluludeMac-mini] - [/usr/local] - [六  1 20, 22:40]
└─[$]> ls bin
2to3             corepack         ffplay           hexo             mbox             npx              pydoc            python-32        python2-config   pythonw          pythonw2.7       smtpd2.py
2to3-2           easy_install     ffprobe          idle             mdev             pip              pydoc2           python-config    python2.7        pythonw-32       pythonw2.7-32    vue
2to3-2.7         easy_install-2.7 gitx             idle2            node             pip2             pydoc2.7         python2          python2.7-32     pythonw2         smtpd.py
cnpm             ffmpeg           gitx-server      idle2.7          npm              pip2.7           python           python2-32       python2.7-config pythonw2-32      smtpd2.7.py
┌─[sunlulu@sunluludeMac-mini] - [/usr/local] - [六  1 20, 22:40]
└─[$]> ls include
libavcodec    libavdevice   libavfilter   libavformat   libavutil     libswresample libswscale    node

最终,可执行程序被安装在了/usr/local/bin目录,头文件被安装在了usr/local/include目录。

相关推荐
cuijiecheng20184 分钟前
音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
ffmpeg·音视频
叶余6 小时前
FFmpeg命令行选项
ffmpeg
从后端到QT7 小时前
音视频采集推流时间戳记录方案
ffmpeg·音视频
悠着,大嘟嘟20 小时前
FFmpeg音频解码详解
ffmpeg·音视频
-Mr_X-20 小时前
FFmpeg在python里推流被处理过的视频流
python·ffmpeg
jbjhzstsl20 小时前
lv_ffmpeg学习及播放rtsp
学习·ffmpeg
0点51 胜1 天前
[ffmpeg]编译 libx264
ffmpeg
神仙别闹1 天前
基于C#实现的(WinForm)模拟操作系统文件管理系统
java·git·ffmpeg
Fre丸子_2 天前
ffmpeg之播放一个yuv视频
ffmpeg·音视频
yinqinggong2 天前
从源码编译支持FFmpeg的OpenCV
opencv·ffmpeg