Android 音视频基础7——MacOs下编译FFMpeg 4.2.2

简介

本文主要介绍Mac环境下FFMpeg的编译方法,同时还会简单介绍FFMpeg。

FFmpeg是用于处理多媒体内容(例如音频,视频,字幕和相关元数据)的库和工具的集合。它包含的库有:

  • libavcodec,提供了多种编解码器的实现;
  • libavformat,实现流协议,容器格式和基本I / O访问;
  • libavutil,包括哈希,解压缩器和其他实用程序功能;
  • libavfilter,提供了一种通过滤波器链来更改解码的音频和视频的方法;
  • libavdevice,提供采用硬件设备进行图片补货和视频播放的抽象封装;
  • libswresample,实现了音频混合和重采样工作;
  • libswscale,实现了色彩转换和缩放等工作;

它包含的工具有:

  • ffmpeg,处理,转换和流式传输多媒体内容的命令行工具箱。
  • ffplay,mini多媒体播放器;
  • ffprobe,检查多媒体内容的简单分析工具;
  • 其他小工具,例如aviocat,ismindex和qt-faststart

FFmpeg编译

在Mac上获取FFmpeg,有以下三种方式(CompilationGuide on MacOs):

  1. 采用包管理器HomebrewMacPorts安装ffmpeg。这种安装会自动保持FFmpeg保持最新;
  2. 下载Mac平台的静态编译版本。这种方式只要解压并运行下载下来的二级制文件即可。缺点是需要手动更新,并且可能不包含你想要的编码库和滤镜库;
  3. 手动编译。下载源码,以合适的flag运行./configure,再运行makemake install。同样的需要手动指定编译的配置选项并且手动配置第三方库。

利用Homebrew安装

利用Homebrew安装通用步骤:

  1. 没有安装Homebrew的,先运行如下明龙安装Homebrew:

    1
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  2. Homebrew安装好后,运行如下命令安装ffmpeg:

    1
    brew install ffmpeg

    如果需要获取最新的master版本,运行如下命令:

    1
    brew install ffmpeg --HEAD

Homebrew安装额外选项的配置方法

由于从2.0版本后开始,Homebrew不在提供核心功能以外的选下支持,要想通过Homebrew来编译支持额外库选下的FFmpeg,需要使用第三方库来实现。这个库就是homebrew-ffmpeg,(可参考该项目的readme文件)具体运行命令如下:

1
2
3
4
brew tab homebrew-ffmpeg/ffmpeg
brew install homebrew-ffmpeg/ffmpeg/ffmpeg
// 在运行下面命令就可以配置选项了
brew options homebrew-ffmpeg/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

手动安装

  1. 安装XCode,安装好后,然后安装Command Line Tools,命令如下:

    1
    xcode-select --install
  2. 利用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.
    • Freetype
  3. 编译

    在必要的编码库和依赖库编译完成后,就可以下载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

参考文章: