15

Ubuntu 16.04下载 FFmpeg 3.1.11版本源码,并且编译安装到指定目录

 4 years ago
source link: https://blog.popkx.com/Ubuntu-16-04%E4%B8%8B%E8%BD%BD-FFmpeg-3-1-11%E7%89%88%E6%9C%AC%E6%BA%90%E7%A0%81-%E5%B9%B6%E4%B8%94%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Ubuntu 16.04下载 FFmpeg 3.1.11版本源码,并且编译安装到指定目录

发表于 2019-12-01 14:12:00   |   已被 访问: 889 次   |   分类于:   FFmpeg   |   暂无评论

FFmpeg 的视音频编解码功能非常强大,几乎囊括了现存所有的视音频编码标准,因此只要做视音频开发,几乎离不开它。例如,它可以用于做各种格式转换,视音频编解码,Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音等视频频播放器的内核就是 FFmpeg。

FFmpeg 是开源的,由C语言开发,因此语法方面很简单,非常适合研究学习。要学习和使用 FFmpeg,首先需要编译和安装它,本文将介绍如何在Ubuntu上编译并安装它。

使用 apt 命令安装

大都数 Ubuntu 中都可使用 apt 命令安装相应的程序,例如执行下面这条命令即可安装 FFmpeg:

$ apt install ffmpeg

但是,这样安装的 FFmpeg 不太利于控制版本,其环境作用域也是用户全局的,我个人不喜欢这样。下文将介绍如何从官网下载源代码编译安装到指定的目录,而且有了源代码,在之后的学习和使用中遇到问题,也方便排查。

下载过程很简单,使用 wget 命令即可,下面这条命令从官网下载了 FFmpeg 的 3.1.11 版本,-c选项让 wget 具备断点续传的能力,避免中途意外中断导致需要完全重新下载。

wget -c http://ffmpeg.org/releases/ffmpeg-3.1.11.tar.xz

下载完毕后,使用 tar 命令解压,进入解压后的目录,建立 build 目录,之后编译和安装的临时中间过程都在 build 目录中进行:

$ tar xf ffmpeg-3.1.11.tar.xz 
$ cd ffmpeg-3.1.11
$ mkdir build
$ cd build
$ ../configure --prefix=<安装目录的绝对路径> --enable-shared

通过 configure 可以生成编译过程使用的 makefile,--prefix后可指定安装目录。

我不太喜欢将软件安装到系统目录,避免其污染系统环境,同时,将软件安装到指定目录,也方便部署,和指定使用的软件版本。

不过,在执行 ../configure 命令时,我遇到了下面这样的错误:

yasm/nasm not found or too old. Use --disable-yasm for a crippled build.

其实原因很明显,系统找不到yasm/nasm库或者这两个库的版本太旧而已,而 FFmpeg 给出了相应的解决方法:在 configure 时指定--disable-yasm禁止yasm即可。但是我不想禁止,于是执行下面的命令:

$ sudo apt update
$ sudo apt install yasm

此时再执行../configure --prefix=...就可以生成 makefile 了,输入 make -j 命令使用可用 cpu 参与编译:

$ ../configure --prefix=<安装目录的绝对路径> --enable-shared
$ make -j

稍后片刻,即可编译完毕,得到类似于下面这样的输出:

FFmpeg编译完毕

FFmpeg编译完毕

之后便可输入

$ make install

将 FFmpeg 安装到之前我们指定的目录中:

安装后的FFmpeg

安装后的FFmpeg

测试从源码编译安装的FFmpeg-3.1.11

进入安装目录的bin目录,执行可执行程序ffmpeg

$ cd <安装目录>/bin
$ ./ffmpeg

发现报错,提示找不到相应的库libavdevice.so.57

./ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

出现这样的错误原因很简单——因为我们没有把相应的 ffmpeg 库安装到系统目录,自定义的目录并不在系统搜索范围内。事实上,使用 ldd 命令能够找出ffmpeg程序需要链接的所有库:

$ ldd ffmpeg 
    linux-vdso.so.1 =>  (0x00007ffcc03ad000)
    libavdevice.so.57 => not found
    libavfilter.so.6 => not found
    libavformat.so.57 => not found
    libavcodec.so.57 => not found
    libswresample.so.2 => not found
    libswscale.so.4 => not found
    libavutil.so.55 => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4ac74cf000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4ac72b2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4ac6ee8000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f4ac77d8000)

可见,FFmpeg 的库都是“not found”。要解决这样的问题很简单,只需将库导入到相应的环境变量即可:

$ export LD_LIBRARY_PATH=<ffmpeg安装目录>/lib:$LD_LIBRARY_PATH

再次执行./ffmpeg命令,发现正常了:

正常执行ffmpeg命令

正常执行ffmpeg命令

至此,在Ubuntu16.04 上从源码编译和安装FFmepg-3.1.11就完成了。

阅读更多:   FFmpeg


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK