购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2
Linux系统安装FFmpeg

本节介绍在Linux系统搭建FFmpeg开发环境的具体步骤,包括FFmpeg开发对于Linux系统的软硬件要求、如何在Linux上安装已编译的FFmpeg套件、如何在Linux上自行编译与安装FFmpeg等。

1.2.1 Linux开发机配置要求

FFmpeg本身就在Linux系统下开发,而且C代码向来以高效著称,因此对硬件方面的配置要求较低,主要对软件环境有要求。对Linux服务器的基本要求如下:

(1)编译器要求GNU Make 3.81及以上版本。

(2)GCC要求4.8及以上版本。

(3)磁盘剩余空间在5GB以上,越大越好。

由于个人计算机较少安装Linux系统,因此建议读者在云服务环境上实践FFmpeg编程。

以上服务器配置要求很低,国内的云服务提供商都能满足。以华为云的最低档配置为例,编译器为GNU Make 4.3,GCC版本为10.3.1,磁盘空间为40GB,完全能够满足入门FFmpeg开发的环境要求。本书配套的C代码在华为云的EulerOS(欧拉系统,兼容CentOS)上调试通过。

1.2.2 安装已编译的FFmpeg及其SO库

对于初学者来说,搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能为FFmpeg集成编译好的第三方库。

考虑到初学者刚开始仅仅调用FFmpeg的函数,不会马上修改FFmpeg的源码,因此只要给系统安装编译好的FFmpeg动态库,即可着手编写简单的FFmpeg程序。比如这个网站:https://github.com/BtbN/FFmpeg-Builds/releases提供了已经编译通过的FFmpeg开发包,囊括Linux、Windows等系统环境的开发版本。对该网站提供的Linux版FFmpeg安装包而言,需要事先安装不低于2.22版本的glibc库,否则编译FFmpeg程序会报错:undefined reference to'_ZGVdN4vv_pow@GLIBC_2.22'。下面介绍在Linux系统安装已编译的FFmpeg的详细步骤。

1.安装glibc

因为GitHub编译好的FFmpeg依赖于glibc库,所以要在Linux环境安装版本号不低于2.22的glibc库。首先执行以下命令查看当前已安装的glibc版本。

    rpm -qa | grep glibc

如果上面的命令返回的版本号不低于2.22,就无须再安装新版的glibc。只有返回的版本号低于2.22,才需要安装新版的glibc库。在华为云上实测发现,欧拉系统(Huawei Cloud EulerOS)自带的glibc版本号大于2.22,因此无须另外安装glibc库。

glibc库的安装步骤说明如下。

01 到https://ftp.gnu.org/gnu/glibc/下载2.23版本的glibc源码包。注意:虽然要求glibc版本不低于2.22,但是不宜安装过高版本的glibc,因为较高版本的glibc依赖于Python,安装Python环境又得费一番功夫,所以安装比2.22稍高一点的2.23版本就够了,也就是在https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz下载压缩包。

02 先解压glibc源码包,再进入glibc源码目录,然后创建build目录并进入该目录,也就是依次执行以下命令:

    tar zxvf glibc-2.23.tar.gz
    cd glibc-2.23
    mkdir build
    cd build

03 在build目录下依次执行以下命令配置、编译与安装glibc。

    ../configure --prefix=/usr
    make
    make install

安装成功后,会在/usr/lib64目录下找到新的libc.so(还有libc.so.6和libc-2.23.so)和libmvec.so(还有libmvec.so.1和libmvec-2.23.so)等库文件。

2.安装FFmpeg

安装glibc库后,再来安装已编译的FFmpeg,详细的安装步骤说明如下。

01 到https://github.com/BtbN/FFmpeg-Builds/releases下载Linux环境编译好的FFmpeg安装包,比如ffmpeg-master-latest-linux64-gpl-shared.tar.xz,注意区分32位系统和64位系统。

02 把下载好的FFmpeg安装包解压到/usr/local/ffmpeg目录,也就是依次执行以下命令:

    cd /usr/local
    tar xvf ffmpeg-master-latest-linux64-gpl-shared.tar.xz
    mv ffmpeg-master-latest-linux64-gpl-shared ffmpeg

03 输入cd命令回到当前用户的初始目录,使用vi打开该目录下的.bash_profile,也就是依次执行以下命令:

    cd
    vi .bash_profile

04 把光标移动到文件末尾,按a键进入编辑模式,然后在文件末尾添加下面两行环境变量的配置:

    export PATH=$PATH:/usr/local/ffmpeg/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib

接着保存并退出文件,也就是先按Esc键退出编辑模式,再按“:”键,接着输入wq再按回车键,即可保存修改后的内容。

05 执行以下命令加载新的环境变量:

    source .bash_profile

接着运行下面的环境变量查看命令:

    env | grep PATH

发现控制台回显的PATH串包含/usr/local/ffmpeg/bin,同时LD_LIBRARY_PATH串包含/usr/local/ffmpeg/lib,说明FFmpeg的bin目录和lib目录的路径都已经加载到环境变量中了。

3.运行测试命令

运行以下命令查看FFmpeg的版本信息:

    ffmpeg -version

发现控制台回显如下的FFmpeg版本号,以及编译时的配置参数信息,说明FFmpeg程序成功运行起来了。

    ffmpeg version N-110091-g261fb55e39-20230326 Copyright (c) 2000-2023 the FFmpeg
developers
    built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf)

1.2.3 自行编译与安装FFmpeg

由于别人编译的FFmpeg不可控,因此最好自己编译FFmpeg。尽管编译过程有点麻烦,但是整个安装过程都是受控的,更加符合开发者的定制需求。不过要在Linux系统编译FFmpeg,读者需要具备一定的Linux命令基础,Linux环境的FFmpeg编译与安装过程说明如下。

1.安装NASM

NASM是一款汇编工具,因为x264库和x265库都依赖于该库,所以要给Linux系统安装NASM库。它的安装方式有两种,一种是使用yum直接安装,另一种是通过编译源码来安装。使用yum安装NASM的命令如下:

    yum install nasm

如果使用yum安装NASM失败,就要通过编译源码来安装,源码方式的安装步骤说明如下。

01 到https://www.nasm.us/pub/nasm/releasebuilds/下载最新的NASM源码,比如2022年12月发布的nasm-2.16,该版本的源码下载地址是https://www.nasm.us/pub/nasm/releasebuilds/2.16/nasm-2.16.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    tar zxvf nasm-2.16.tar.gz
    cd nasm-2.16

02 进入解压后的NASM目录,运行下面的命令配置NASM:

    ./configure

03 运行下面的命令编译NASM。

    make

04 编译完成后,运行下面的命令安装NASM。

    make install
2.安装x264库

H.264格式的视频编解码用到了x264库,它的安装步骤说明如下。

01 到https://www.videolan.org/developers/x264.html下载最新的x264源码,比如新版的源码下载地址是https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    tar zxvf x264-master.tar.gz
    cd x264-master

02 进入解压后的x264目录,运行下面的命令配置x264:

    ./configure --enable-shared --enable-static

03 运行下面的命令编译x264:

    make

04 编译完成后,运行下面的命令安装x264:

    make install
3.安装CMake

H.265视频的编解码用到了x265库,因为x265库使用CMake编译,所以要事先在Linux下安装CMake工具。它的安装方式有两种,一种是使用yum直接安装,另一种是通过编译源码来安装。使用yum安装CMake的命令如下:

    yum install cmake git

如果使用yum安装CMake失败,就要通过编译源码来安装,源码方式的安装步骤说明如下。

01 运行下面的命令,分别安装g++、openssl-devel和curl-devel,因为CMake依赖于这三个工具包。在安装过程中会提示[Y/n]确认是否继续安装,此时输入Y确定安装即可。

    yum install g++ openssl-devel curl-devel

另外,还需执行下面的命令安装Git,虽然CMake不依赖于Git,但是只有安装了Git才能正常编译x265的动态库。

    yum install git

02 到https://cmake.org/files/下载最新的CMake源码,比如2023年8月发布的cmake-3.27.3,该版本的源码下载地址是https://cmake.org/files/v3.27/cmake-3.27.3.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    tar zxvf cmake-3.27.3.tar.gz
    cd cmake-3.27.3

03 进入解压后的CMake目录,运行下面的命令配置CMake。

    ./bootstrap  --system-curl
    ./configure

04 运行下面的命令编译CMake。

    make

05 编译完成后,运行下面的命令安装CMake。

    make install

注意以上是通过源码方式安装CMake,如果发现源码编译失败,就只能直接安装编译好的CMake程序。详细步骤说明如下:

01 到https://cmake.org/files/下载最新的CMake安装包,比如2023年8月发布的cmake-3.27.3,Linux 64位x86环境的安装包下载地址是https://cmake.org/files/v3.27/cmake-3.27.3-linux-x86_64.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    mv cmake-3.27.3-linux-x86_64.tar.gz /usr/local/
    cd /usr/local/
    tar zxvf cmake-3.27.3-linux-x86_64.tar.gz
    mv cmake-3.27.3-linux-x86_64 cmake

02 给环境变量PATH添加CMake解压后的bin目录。输入cd命令回到当前用户的初始目录,使用vi打开该目录下的.bash_profile,也就是依次执行以下命令:

    cd
    vi .bash_profile

把光标移动到文件末尾,按a键进入编辑模式,然后在文件末尾添加下面一行环境变量的配置:

    export PATH=$PATH:/usr/local/cmake/bin

接着保存并退出文件,也就是先按Esc键退出编辑模式,再按“:”键,接着输入wq再按回车键,即可保存修改后的内容。然后执行以下命令加载最新的环境变量:

    source .bash_profile

03 运行以下命令检查CMake的版本号:

    cmake -version
4.安装x265库

H.265格式的视频编解码用到了x265库,它的安装步骤说明如下。

01 到https://bitbucket.org/multicoreware/x265_git/downloads/下载最新的x265源码,比如2021年3月发布的x265_3.5,该版本的源码下载地址是https://bitbucket.org/multicoreware/x265_git/downloads/x265_3.5.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    tar zxvf x265_3.5.tar.gz
    cd x265_3.5

02 进入解压后的x265目录的build目录,运行以下命令配置x265库:

    cd build
    cmake ../source

03 运行以下命令编译x265:

    make

04 编译完成后,运行以下命令安装x265:

    make install
5.加载环境变量PKG_CONFIG_PATH

在前面的安装步骤中,x264和x265的.pc文件都安装到了/usr/local/lib/pkgconfig目录,因为FFmpeg正是根据这些.pc文件来查找对应的第三方配置,所以需要把该路径添加到环境变量PKG_CONFIG_PATH中,方便FFmpeg自动查找.pc文件,详细的加载步骤说明如下。

01 输入cd命令回到当前用户的初始目录,使用vi打开该目录下的.bash_profile,也就是依次执行以下命令:

    cd
    vi .bash_profile

02 把光标移动到文件末尾,按a键进入编辑模式,然后在文件末尾添加下面一行环境变量的配置:

    export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

接着保存并退出文件,也就是先按Esc键退出编辑模式,再按“:”键,接着输入wq再按回车键,即可保存修改后的内容。

03 执行以下命令加载最新的环境变量:

    source .bash_profile

接着运行下面的环境变量查看命令:

    env | grep PKG_CONFIG_PATH

发现控制台回显的PKG_CONFIG_PATH串包含/usr/local/lib/pkgconfig,说明pkgconfig目录的路径已加载到环境变量中了。

6.安装FFmpeg

以上工具都安装之后,再来安装FFmpeg,详细的安装步骤说明如下。

01 到https://github.com/FFmpeg/FFmpeg/tags下载指定版本的FFmpeg源码包,比如2022年9月发布的FFmpeg-5.1.2,该版本的源码下载地址是https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n5.1.2.tar.gz。将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令:

    tar zxvf FFmpeg-n5.1.2.tar.gz
    cd FFmpeg-n5.1.2s

02 进入解压后的FFmpeg目录,运行以下命令配置FFmpeg:

    ./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc
--enable-zlib --enable-libx264 --enable-libx265 --enable-iconv --enable-gpl
--enable-nonfree

注意configure后面的配置选项中,enable表示开启某项功能,disable表示关闭某项功能,常见的配置选项说明见表1-1。

表1-1 FFmpeg的配置命令选项说明

03 运行以下命令编译FFmpeg:

    make

如果觉得make命令编译得太慢,可改成执行以下命令编译FFmpeg,“-j4”表示启动4个编译进程。在系统资源紧张的时候,多进程编译可能报错,此时再改回make命令即可。

    make -j4

04 编译完成后,运行以下命令安装FFmpeg:

    make install

05 把/usr/local/ffmpeg/bin添加到环境变量PATH中,把/usr/local/lib和/usr/local/ffmpeg/lib都添加到环境变量LD_LIBRARY_PATH中。也就是依次执行以下命令:

    cd
    vi .bash_profile

把光标移动到文件末尾,按a键进入编辑模式,然后在文件末尾添加下面三行环境变量的配置:

    export PATH=$PATH:/usr/local/ffmpeg/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib

接着保存并退出文件,也就是先按Esc键退出编辑模式,再按“:”键,接着输入wq再按回车键,即可保存修改后的内容。

然后执行以下命令加载最新的环境变量:

    source .bash_profile

接着运行下面的环境变量查看命令:

    env | grep PATH

发现控制台回显的PATH串包含/usr/local/ffmpeg/bin,同时LD_LIBRARY_PATH串包含/usr/local/lib和/usr/local/ffmpeg/lib,说明FFmpeg的bin目录和lib目录的路径都已经加载到环境变量中了。

06 运行以下命令查看FFmpeg的版本信息:

    ffmpeg –version

发现控制台回显如下的FFmpeg版本号,以及编译时的配置参数信息,说明FFmpeg程序成功运行起来了。 ChvT28mdcEjIOeM3lz7o8KK5CcyjpnFQUlaJq6K8a6ucVUgpTs4rL8pUvQPMWzsL

    ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers
    built with gcc 10.3.1 (GCC)
    configuration: --prefix=/usr/local/ffmpeg --enable-shared --disable-static
--disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-iconv --enable-gpl
--enable-nonfree
点击中间区域
呼出菜单
上一章
目录
下一章
×