

Ubuntu 16.04下载 FFmpeg 3.1.11版本源码,并且编译安装到指定目录
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.

Ubuntu 16.04下载 FFmpeg 3.1.11版本源码,并且编译安装到指定目录
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
稍后片刻,即可编译完毕,得到类似于下面这样的输出:
之后便可输入
$ make install
将 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
命令,发现正常了:
至此,在Ubuntu16.04 上从源码编译和安装FFmepg-3.1.11就完成了。
阅读更多: FFmpeg
Recommend
-
103
介绍如何编译出iOS或Android平台使用的FFmpeg链接库
-
13
本教程/笔记,意在指导在Ubuntu及其他Linux系统上如何通过源码安装Octave。 Octave简介 Octave是GNU旗下代替matlab的数学工具软件,语法与matlab高度兼容,并且支持一些独有的更清晰更符合Linux社区习惯的语法。虽然在一些具体工具包和部分特...
-
18
Ubuntu 16.04 从 GitHub下载 caffe 源码,并且编译安装,Caffe 的依赖库都有什么作用? 发表于...
-
11
最近几年,人工智能发展迅速,很多领域已经开始商用,最为有名的当属语音识别,和以人脸识别为代表的机器视觉。如果读者和我一样爱折腾,相信也会对这些有兴趣,希望打造一款自己的人脸识别应用。OpenCVOpenCV是一个基于BSD许可(开源)发行的...
-
36
ubuntu 设置虚拟内存(增加swap),并且加入开机项,开机启动 发表于 2018-07-...
-
15
ubuntu下制作动态链接库 so 文件并且调用 发表于 2018-07-14 21:07:16...
-
9
LWPC项目可以采用以下编译方法: 在linux系统编译和运行(需要安装cmake软件的linux版本,也可用apt安装) 在windows系统编译和运行(需要安装
-
4
因为vue指令很多,功能也很多,所以会有很多针对一些情况的特殊处理,这些逻辑如果不是对vue很熟悉的话一时间是看不懂的,所以我们只看一些基本逻辑。compile创建vue实例时当传递了参数el...
-
9
Ubuntu环境编译OpenJDK11源码 原创 欢迎访问我的GitHub 这里分...
-
6
使用dnSpy对无源码EXE或DLL进行反编译并且修改 背景 总有一些特殊情况,我...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK