Ubuntu下FFmpeg的安装(支持libfdk_acc)

操作系统:Ubuntu 16.04

安装

方法1:软件包安装

sudo apt update
sudo apt install ffmpeg

最初我用的是这种方法,因为比较简单,可以满足视频编码的需求。但是后来在对音频进行编码的时候,需要使用libfdk_aac这个音频编码库,这种方法就行不通了。为了满足需求,最终采用了下面这个方法:

方法2:源码安装


2022.05.08更新:
FFmpeg较为复杂,有条件和经验的建议直接按照官方文档给出的步骤进行环境配置和编译,自选所需要的模块。本文提供的方法较为简单,可能无法满足较复杂的编码需求(如VP9、AV1编码等)。


参考:

步骤:

  1. 安装Yasm
    下载网页:Download - The Yasm Modular Assembler Project
    源码链接:yasm-1.3.0.tar.gz
    安装命令:

    wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    tar -zxvf yasm-1.3.0.tar.gz
    cd yasm-1.3.0/
    sudo ./configure
    sudo make
    sudo make install
    
  2. 安装fdk_aac
    下载网页:fdk-aac-2.0.1
    源码链接:fdk-aac-2.0.1.tar.gz
    安装命令:

    wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz
    tar -zxvf fdk-aac-2.0.1.tar.gz
    cd fdk-aac-2.0.1/
    autoreconf -fiv
    sudo ./configure --prefix=/usr --disable-shared
    sudo make
    sudo make install
    
  3. 安装ffmpeg
    下载网页:Download FFmpeg
    源码链接:ffmpeg-4.2.1.tar.bz2
    安装命令:

    wget https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2
    tar -jxvf ffmpeg-4.2.1.tar.bz2
    cd ffmpeg-4.2.1/
    sudo ./configure --enable-libfdk-aac --enable-nonfree
    sudo make
    sudo make install
    

    *注1:若提示WARNING: pkg-config not found, library detection may fail.,则需先安装pkg-config,参考:pkg-config 编译安装
    下载页面:Index of /releases
    源码链接:pkg-config-0.29.2.tar.gz

    wget https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
    tar -zxvf pkg-config-0.29.2.tar.gz
    cd pkg-config-0.29.2/
    sudo ./configure --with-internal-glib
    sudo make
    sudo make install
    

    *注2:必须要在配置ffmpeg之前先装libfdk-aac,否则会报错:

    ERROR: libfdk_aac not found
    

    若执行时遇到找不到libfdk-aac.so.2的问题,在/etc/ld.so.conf中加入/usr/lib后执行ldconfig即可,参考:ffmpeg执行报.so不存在

    *注3:编译过程比较耗时间,可以考虑在make后加-j 4等选项实现多核编译以提高速度

    *注4:在Win10的Ubuntu子系统中安装成功,但在使用时遇到错误:

    Unknown encoder 'libx264'
    

    经过查询,发现是缺少x264库,参考:
    -解决Ubuntu16.04视频编码出现Unknown encoder 'libx264’问题
    -解决Ubuntu18.04视频编码出现Unknown encoder 'libx264’问题

    解决步骤:
    1.安装nasm(否则后面会报错),参考:ffmpeg开发环境的安装测试和更新的步骤

    wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.xz
    xz nasm-2.13.03.tar.xz
    tar -xvf nasm-2.13.03.tar
    cd nasm-2.13.03/
    sudo ./configure  --prefix=/usr
    sudo make
    sudo make install
    

    2.安装x264库

    git clone http://git.videolan.org/git/x264.git
    cd x264/
    sudo ./configure --enable-shared --enable-static
    sudo make
    sudo make install
    

    3.重新编译ffmpeg

    sudo ./configure --enable-libfdk-aac --enable-nonfree --enable-gpl --enable-libx264
    sudo make -j 4
    sudo make install
    

    4.之后验证时,又遇报错:

    ffmpeg: error while loading shared libraries: libx264.so.159: cannot open shared object file: No such file or directory
    

    解决参考:./ffmpeg: error while…
    修改/etc/ld.so.conf,添加:

    /usr/local/x264/lib
    

    保存并退出后,执行:

    ldconfig
    

验证

ffmpeg -version

正常的话,会输出:
*软件包安装:

ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil      54. 31.100 / 54. 31.100
libavcodec     56. 60.100 / 56. 60.100
libavformat    56. 40.101 / 56. 40.101
libavdevice    56.  4.100 / 56.  4.100
libavfilter     5. 40.101 /  5. 40.101
libavresample   2.  1.  0 /  2.  1.  0
libswscale      3.  1.101 /  3.  1.101
libswresample   1.  2.101 /  1.  2.101
libpostproc    53.  3.100 / 53.  3.100

*源码安装:

ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.11) 20160609
configuration: --enable-libfdk-aac --enable-nonfree
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100

命令格式(基础):

ffmpeg -i input_video output_video

常用选项

-c:v或-vcodec:视频编码器
-c:a或-acodec:音频编码器
-b:v:视频码率,单位为bit
-b:a:音频码率,单位为bit
-s:画面尺寸,即分辨率,如“1920x1080”
-r:帧率,即每秒有多少帧,单位为fps
-g:GOP大小,即关键帧(I帧)间隔
-vn:不处理视频
-an:不处理音频

安装ffmpeg的同时也安装了ffplay和ffrpobe,这里介绍一些关于ffrpobe的使用。

查看关键帧数量

ffprobe -show_frames input.mp4 | grep -c key_frame=1

查看GOP长度

ffprobe -show_frames input.mp4 | grep key_frame

从输出中,数关键帧(key_frame=1)之间有多少非关键帧(key_frame=0),即为GOP的帧数量

*FFmpeg的功能很强大,因此本文不包含具体使用FFmpeg的内容。可以参考一个H.264编码的例子:DSAH视频系统(服务器&播放器)搭建

猜你喜欢

转载自blog.csdn.net/LvGreat/article/details/103528349