简介
本文主要介绍Mac环境下FFMpeg的编译方法,同时还会简单介绍FFMpeg。
FFmpeg是用于处理多媒体内容(例如音频,视频,字幕和相关元数据)的库和工具的集合。它包含的库有:
- libavcodec,提供了多种编解码器的实现;
- libavformat,实现流协议,容器格式和基本I / O访问;
- libavutil,包括哈希,解压缩器和其他实用程序功能;
- libavfilter,提供了一种通过滤波器链来更改解码的音频和视频的方法;
- libavdevice,提供采用硬件设备进行图片补货和视频播放的抽象封装;
- libswresample,实现了音频混合和重采样工作;
- libswscale,实现了色彩转换和缩放等工作;
它包含的工具有:
- ffmpeg,处理,转换和流式传输多媒体内容的命令行工具箱。
- ffplay,mini多媒体播放器;
- ffprobe,检查多媒体内容的简单分析工具;
- 其他小工具,例如aviocat,ismindex和qt-faststart
- [x] 音视频基础0——目录
- [x] 音视频基础1——AudioTrack、AudioRecorder、MediaRecorder音频数据采集播放处理
- [ ] 音视频基础2——Android Camera API及Camera2 API的使用
- [ ] 音视频基础3——Android Camera API及Camera2 采集视频数据
- [ ] 音视频基础4——Android MediaCodec API学习
- [ ] 音视频基础5——Android 实现rtmp推流
- [x] 音视频基础6——交叉编译动态库
- [ ] 音视频基础7——MacOs下编译FFMpeg4.2.2
FFmpeg编译
在Mac上获取FFmpeg,有以下三种方式(CompilationGuide on MacOs):
- 采用包管理器Homebrew或MacPorts安装ffmpeg。这种安装会自动保持FFmpeg保持最新;
- 下载Mac平台的静态编译版本。这种方式只要解压并运行下载下来的二级制文件即可。缺点是需要手动更新,并且可能不包含你想要的编码库和滤镜库;
- 手动编译。下载源码,以合适的flag运行./configure,再运行make和make install。同样的需要手动指定编译的配置选项并且手动配置第三方库。
利用Homebrew安装
利用Homebrew安装通用步骤:
- 没有安装Homebrew的,先运行如下明龙安装Homebrew: - 1 - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 
- Homebrew安装好后,运行如下命令安装ffmpeg: - 1 - brew install ffmpeg - 如果需要获取最新的master版本,运行如下命令: - 1 - brew install ffmpeg --HEAD 
Homebrew安装额外选项的配置方法
由于从2.0版本后开始,Homebrew不在提供核心功能以外的选下支持,要想通过Homebrew来编译支持额外库选下的FFmpeg,需要使用第三方库来实现。这个库就是homebrew-ffmpeg,(可参考该项目的readme文件)具体运行命令如下:
| 1 | brew tab homebrew-ffmpeg/ffmpeg | 
FFMPEG 依赖库
| 1 | Fetching dependencies for ffmpeg: giflib, highway, imath, jpeg-turbo, libpng, xz, lz4, zstd, libtiff, little-cms2, openexr, webp, jpeg-xl, libvmaf, aom, aribb24, dav1d, freetype, fontconfig, frei0r, ca-certificates, gmp, libunistring, gettext, libidn2, libtasn1, nettle, p11-kit, openssl@3, libevent, libnghttp2, unbound, gnutls, pcre2, mpdecimal, readline, sqlite, python@3.12, glib, xorgproto, libxau, libxdmcp, libxcb, libx11, libxext, libxrender, lzo, pixman, cairo, graphite2, icu4c, harfbuzz, lame, fribidi, libunibreak, libass, libbluray, cjson, libmicrohttpd, mbedtls, librist, libsoxr, libssh, libvidstab, libogg, libvorbis, libvpx, opencore-amr, openjpeg, opus, rav1e, libsamplerate, flac, mpg123, libsndfile, rubberband, sdl2, snappy, speex, srt, svt-av1, leptonica, libb2, libarchive, pango, tesseract, theora, x264, x265, xvid, libsodium, zeromq and zimg | 
ffmpeg的更新
运行如下命令可以将ffmpeg更新只最新版本:
| 1 | brew update && brew upgrade ffmpeg | 
如果安装的是HEAD版本,运行如下命令:
| 1 | brew upgrade --fetch-HEAD ffmpeg | 
手动安装
- 安装XCode,安装好后,然后安装Command Line Tools,命令如下: - 1 - xcode-select --install 
- 利用Homebrew安装编译ffmpeg以来所需要的库,命令如下: - 1 
 2- brew install automake fdk-aac git lame libass libtool libvorbis libvpx \ 
 opus sdl shtool texi2html theora wget x264 x265 xvid nasm- 这一步也可以借助其他工具安装,需要下载并编译如下工具: - Pkg-config & GLIb
- NAsm
- Additional libraries (具体可通过./configure —help查看)- x264 encodes H.264 video. Use --enable-gpl --enable-libx264.
- fdk-aac encodes AAC audio. Use --enable-libfdk-aac.
- libvpx is a VP8 and VP9 encoder. Use --enable-libvpx.
- libvorbis encodes Vorbis audio . Requires libogg. Use --enable-libvorbis.
- libopus encodes Opus audio.
- LAME encodes MP3 audio. Use --enable-libmp3lame.
- libass is a subtitle renderer. Use --enable-libass.
 
- x264 encodes H.264 video. Use 
- Freetype
 
- 编译 - 在必要的编码库和依赖库编译完成后,就可以下载ffmpeg源码,下载源码后,切换至ffmpeg目录,运行 - ./configure --help,查看支持的选项,打开需要包含的选项,示例如下:- 1 
 2
 3
 4
 5
 6
 7- git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 
 cd ffmpeg
 ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass \
 --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame \
 --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libopus --enable-libxvid \
 --samples=fate-suite/
 make- 在编译成功后,运行 - sudo make install(需要超级用户权限验证情形) 或- make install(不需要超级用户权限验证情形),这样就完成了ffmpeg的编译了。
个人建议采用Homebrew方式安装。
注意:上面是FFmpeg 官方文档上介绍的年内容,结果我实际操作时发现,并不能通过homebrew直接安装,如实就通过下载FFmpeg自己编译了。
最近重新安装时,发现已经可以直接通过 brew install ffmpeg 安装了,安装过程有点慢,主要是FFMpeg 依赖的包太多了;
FFMpeg简单使用
可能的问题
FFMpeg支持HTTPS
参考文章: