程序员开发实例大全宝库

网站首页 > 编程文章 正文

Mac OS环境下的FFmpeg的安装编译(ffmpeg的安装和使用教程)

zazugpt 2024-09-08 11:32:38 编程文章 27 ℃ 0 评论

MAC平台上的FFmpeg的安装方式有三种,分别是通过ffmpeg静态库下载安装、通过Homebrew安装和下载源码编译安装,大家可以选择自己喜欢的方式来实现MAC平台的FFmpeg安装。

1、ffmpeg静态库下载安装

打开FFmpeg官网,如下图所示。

解压下载完成的压缩文件,可以看到一个可执行文件,在终端执行它即可。

当然也是可以配置一个环境链接指向该可执行文件,这样便可以在任何地方执行该文件。

这种方式虽然简单快捷,但是很不利于我们对于ffmpeg的学习研究。

【更多音视频学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

C++程序员必看,抓住音视频开发的大浪潮!冲击年薪60万

2、通过Homebrew方式安装

2.1、安装Homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

根据提示输入密码,就可以一步一步安装成功,如果电脑上之前没有安装xCode,在命令行输入 xcode-select --install 安装 CLT for Xcode 即可,之后我们需要再次重新执行上述命令进行安装。

以上是官方的安装方式,为避免翻墙受限的不必要问题,我们也可以通过设置镜像的方式来安装。

export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"

export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/$homebrew-core.git"

git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install /bin/bash brew-install/install.sh

rm -rf brew-install

如果你之前有安装过Homebrew,也没有关系,同样可以设置镜像配置,具体的参见这个网站。

2.2、安装FFmpeg

如果有通过Homebrew安装过ffmpeg,请预先执行brew uninstall ffmpeg指令卸载FFmpeg。

执行如下指令

brew install ffmpeg

或者

brew install ffmpeg --HEAD

两个指令都可以安装ffmpeg,两个都会检测ffmpeg的依赖包并自动安装上,安装需要一定的时间,请耐心等候。这里存在一个问题,就是homebrew从2.0版本开始,便不再提供针对ffmpeg的options的关联安装,如需要将options和ffmpeg关联起来的话,需要采用第三方的options仓库。所以如果你的homebrew版本是2.0后的话,上面两个指令是关联不了诸如x264,fdk-aac等音视频编解码器的。所以我们可以依靠三方仓库homebrew-ffmpeg来实现options和ffmpeg的关联安装。

(1)执行如下指令:

brew tap homebrew-ffmpeg/ffmpeg

brew install homebrew-ffmpeg/ffmpeg/ffmpeg

(2)执行如下命令,看此仓库支持哪些options。

brew options homebrew-ffmpeg/ffmpeg/ffmpeg

(3)根据第2步获取的options,替换如下指令中option,然后执行。

brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-<option1> --with-<option2> ...

也可以执行如下指令安装所有的options。

brew install homebrew-ffmpeg/ffmpeg/ffmpeg $(brew options homebrew-ffmpeg/ffmpeg/ffmpeg --compact)

通过Homebrew的方式安装FFmpeg同样是一种非常简洁方式,但同样也不是一种值得推荐的方式,因为我们无法查看和调试源码来学习研究FFmpeg。


3、源码编译安装

3.1、下载源码

从官网下载源码,可以直接下载源码包,也可以通过git指令来克隆代码仓库。

git clone git://source.ffmpeg.org/ffmpeg.git

#或者码云的链接

git clone https://gitee.com/mirrors/ffmpeg.git

cd ffmpeg

# 查看版本

git branch -a

# 选择版本

git checkout remotes/origin/release/xxx

3.2、编译源码

在下载的源码目录下执行如下指令

./configure --prefix=/usr/local/ffmpeg \

--enable-gpl \

--enable-version3 \

--enable-nonfree \

--enable-postproc \

--enable-libass \

--enable-libcelt \

--enable-libfdk-aac \

--enable-libfreetype \

--enable-libmp3lame \

--enable-libopencore-amrnb \

--enable-libopencore-amrwb \

--enable-libopenjpeg \

--enable-openssl \

--enable-libopus \

--enable-libspeex \

--enable-libtheora \

--enable-libvorbis \

--enable-libvpx \

--enable-libx264 \

--enable-libxvid \

--disable-static \

--enable-shared

该指令是为了配置编译,其中--prefix=/usr/local/ffmpeg表示的是编译后的库文件存放地方,大家可以设置自己喜欢的路径。

执行编译安装命令

make &&sudo make install

这个编译过程可能会出现类似于libfdk_aac not found或者x264 not found的错误,那是没有安装相关的依赖,这里我们可以通过homebrew来安装这些依赖。

brew install fdk-aac

brew install x264

当然,如果你的电脑环境配置不全的话,编译过程可能遇到的需要安装的错误会比较多,也没关系,出现什么样的依赖需要安装的,执行对应的指令便可以了。

【更多音视频学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

音视频开发基础知识和资料包

3.3、配置环境变量

上面的配置编译指令中,我们将编译后的库文件存放在了/usr/local/ffmpeg,执行指令open /usr/local/ffmpeg进入到该路径下,可以看到编译后的相关头文件和库文件,如下图所示。

执行如下指令

touch .bash_profile

open .bash_profile

在打开的bash_profile文件中,添加如下语句。

export FFMPEG_HOME=/usr/local/ffmpeg

export PATH=$FFMPEG_HOME/bin:$PATH

到此为止,在Mac端上的FFmpeg安装便完成了。

这种安装的方式虽然较为复杂,但是我们可以修改调试源码,很方便我们学习研究FFmpeg源码。


4、iOS平台库编译

上面的几种安装方式,只是让我们在Mac OS平台实现了FFmpeg的开发能力,但是作为一个iOS开发人员的话,我们还需要编译出iOS平台下的库文件,以提供移动平台开发使用。

4.1、编译FFmpeg

从下面地址下载编译的脚本。

https://github.com/kewlbear/FFmpeg-iOS-build-script

需要修改的内容有

  • FF_VERSION 指定ffmpeg的版本号。
  • CONFIGURE_FLAGS 修改ffmpeg的编译配置,去掉不必要的编译内容,减小包体的大小。
  • ARCHS 指定编译的cpu架构,对iOS开发而言,有真机和模拟器。
  • X264 编译好的libx264的路径,如果需要将libx264编译进去。
  • FDK_AAC 编译好的libfdk-aac的路径,如果需要将libfdk-aac编译进去。 在终端执行命令 ./build-ffmpeg.sh,编译完成后会有如下的文件结构。

4.2、编译libfdk-aac

从官网下载稳定版本的FDK-AAC

https://sourceforge.net/p/opencore-amr/fdk-aac/ci/v2.0.2/tree/

在同级目录下创建build_aac.sh脚本文件,文件内容如下:

CONFIGURE_FLAGS="--enable-static --with-pic=yes --disable-shared"

#指定编译平台

ARCHS="arm64 armv7"

# 源码位置

SOURCE="fdk-aac-2.0.2"

FAT="fdk-aac-ios"

SCRATCH="scratch"

# must be an absolute path

THIN=`pwd`/"thin"

COMPILE="y"

LIPO="y"

if [ "$*" ]

then

if [ "$*" = "lipo" ]

then

COMPILE=

else

ARCHS="$*"

if [ $# -eq 1 ]

then

# skip lipo

LIPO=

fi

fi

fi

if [ "$COMPILE" ]

then

CWD=`pwd`

for ARCH in $ARCHS

do

echo "building $ARCH..."

mkdir -p "$SCRATCH/$ARCH"

cd "$SCRATCH/$ARCH"

CFLAGS="-arch $ARCH"

if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]

then

PLATFORM="iPhoneSimulator"

CPU=

if [ "$ARCH" = "x86_64" ]

then

CFLAGS="$CFLAGS -mios-simulator-version-min=7.0"

HOST="--host=x86_64-apple-darwin"

else

CFLAGS="$CFLAGS -mios-simulator-version-min=7.0"

HOST="--host=i386-apple-darwin"

fi

else

PLATFORM="iPhoneOS"

if [ $ARCH = arm64 ]

then

HOST="--host=aarch64-apple-darwin"

else

HOST="--host=arm-apple-darwin"

fi

CFLAGS="$CFLAGS -fembed-bitcode"

fi

XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`

CC="xcrun -sdk $XCRUN_SDK clang -Wno-error=unused-command-line-argument-hard-error-in-future"

AS="$CWD/$SOURCE/extras/gas-preprocessor.pl $CC"

CXXFLAGS="$CFLAGS"

LDFLAGS="$CFLAGS"

$CWD/$SOURCE/configure \

$CONFIGURE_FLAGS \

$HOST \

$CPU \

CC="$CC" \

CXX="$CC" \

CPP="$CC -E" \

AS="$AS" \

CFLAGS="$CFLAGS" \

LDFLAGS="$LDFLAGS" \

CPPFLAGS="$CFLAGS" \

--prefix="$THIN/$ARCH" || exit 1

make -j8 install || exit 1

cd $CWD

done

fi

#合并各个架构平台的库文件

if [ "$LIPO" ]

then

echo "building fat binaries..."

mkdir -p $FAT/lib

set - $ARCHS

CWD=`pwd`

cd $THIN/$1/lib

for LIB in *.a

do

cd $CWD

lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB

done


cd $CWD

cp -rf $THIN/$1/include $FAT

fi

在终端执行该脚本,编译完成后的库文件在文件夹fdk-aac-ios中。

在这里,新创建的脚本文件,可能会存在权限问题,执行chmod -R 777 build_aac.sh命令即可。

4.3、编译libx264

下载x264的源码

访问 http://www.videolan.org/developers/x264.html

或者

git clone git://git.videolan.org/x264.git

在同级目录下创建build_x264.sh脚本文件,文件内容如下:

【更多音视频学习资料,点击下方链接免费领取↓↓,先码住不迷路~】

音视频开发基础知识和资料包

CONFIGURE_FLAGS="--enable-static --enable-pic --disable-cli --disable-shared"

# 指定架构平台

ARCHS="arm64 armv7"

#源码位置

SOURCE="x264-master"

FAT="x264-iOS"

SCRATCH="scratch-x264"

THIN=`pwd`/"thin-x264"

COMPILE="y"

LIPO="y"

if [ "$*" ]

then

if [ "$*" = "lipo" ]

then

COMPILE=

else

ARCHS="$*"

if [ $# -eq 1 ]

then

LIPO=

fi

fi

fi

if [ "$COMPILE" ]

then

CWD=`pwd`

for ARCH in $ARCHS

do

echo "building $ARCH..."

mkdir -p "$SCRATCH/$ARCH"

cd "$SCRATCH/$ARCH"

CFLAGS="-arch $ARCH"

ASFLAGS=

if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]

then

PLATFORM="iPhoneSimulator"

CPU=

if [ "$ARCH" = "x86_64" ]

then

CFLAGS="$CFLAGS -mios-simulator-version-min=9.0"

HOST=

else

CFLAGS="$CFLAGS -mios-simulator-version-min=9.0"

HOST="--host=i386-apple-darwin"

fi

else

PLATFORM="iPhoneOS"

if [ $ARCH = "arm64" ]

then

HOST="--host=aarch64-apple-darwin"

XARCH="-arch aarch64"

else

HOST="--host=arm-apple-darwin"

XARCH="-arch arm"

fi

CFLAGS="$CFLAGS -fembed-bitcode -mios-version-min=9.0"

ASFLAGS="$CFLAGS"

fi


XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`

CC="xcrun -sdk $XCRUN_SDK clang"

if [ $PLATFORM = "iPhoneOS" ]

then

export AS="$CWD/$SOURCE/tools/gas-preprocessor.pl $XARCH -- $CC"

else

export -n AS

fi

CXXFLAGS="$CFLAGS"

LDFLAGS="$CFLAGS"

CC=$CC $CWD/$SOURCE/configure \

$CONFIGURE_FLAGS \

$HOST \

--extra-cflags="$CFLAGS" \

--extra-asflags="$ASFLAGS" \

--extra-ldflags="$LDFLAGS" \

--prefix="$THIN/$ARCH" || exit 1


make -j8 install || exit 1

cd $CWD

done

fi

if [ "$LIPO" ]

then

echo "building fat binaries..."

mkdir -p $FAT/lib

set - $ARCHS

CWD=`pwd`

cd $THIN/$1/lib

for LIB in *.a

do

cd $CWD

lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB

done

cd $CWD

cp -rf $THIN/$1/include $FAT

fi

在终端执行该脚本,编译完成后的库文件在文件夹x264-iOS中。

4.4、使用

1、创建工程,导入编译好的库文件

2、添加依赖libbz2.tbd、libiconv.tbd、libz.tbd

3、在工程的Build Settings选项中修改Header Search Paths添加头文件引用,修改Library Search Paths添加库文件的路径引用。

如果你对音视频开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表