Ubuntu 18.04 手动编译安装 ffmpeg
ffmpeg 是一个由提供对视频、音频和其他多媒体流文件进行处理功能的库和程序构成的自由软件项目,其常被用于适用于不同格式的音频和视频的录影、转换和流处理等场合。这里记录在 Ubuntu 18.04 平台下安装 ffmpeg 的过程。( 注:ffmpeg 目前已经可以通过 apt 直接进行安装,见最后 )
安装过程
a.在 ffmpeg 官网上下载对应的安装压缩包,笔者使用的是 ffmpeg-4.1.tar.bz2 ,将其解压至用户主目录下。
tar -xvjf ffmpeg-4.1.tar.bz2 -C ~ //将文件解压缩至用户主目录
b.简单的安装过程在解压获得的 ffmpeg-4.1 目录中的 INSTALL.md 文件中有一定的描述,首先对编译安装环境进行配置。
./configure //检测当前的编译安装环境
此时可能会产生报错 "nasm/yasm not found or too old" ,这是由于 ffmpeg 中部分优化代码使用汇编编写,对应的编译过程需要使用汇编编译器,这里有两种选择,一种是在 ./configure 时使用 --disable-yasm 选项,最终获得是一个裁剪版本的 ffmpeg 工具集;另外一种是安装对应的汇编编译器,可使用下列命令进行安装。
sudo apt install yasm //安装 yasm 编译器
安装完成后,需要重新执行上述 ./configure 操作,再进行下一步操作。
c.正确的进行环境配置后,ffmpeg 会列出目前已经检测到的环境的情况,包括检测到的外部依赖库和将要生成的应用程序等,完整的应用程序套件包括 ffmpeg( 用于视频的转码 ),ffplay( 用于简单的视频播放和测试 )和 ffprobe( 用于查看文件格式 ),在配置的 programs 字段会有输出。此时可能会出现 ffmpeg 准备生成的应用程序中没有 ffplay 的情况,如下图所示。
这时可以查看一下对应的 External libraries 字段,看其中是否存在 SDL。
SDL是编译 ffplayer 所必须的外部库,而 Ubuntu 环境并不会对其默认安装,故而需要用户手动安装。这里注意,网上的一些大概五六年前的博客记录的是要安装 libsdl1.2-dev 的库,而实际上目前(2018) ffmpeg 已经支持 SDL2,用户可通过如下命令查看可以安装的 sdl 版本。
apt-cache search libsdl | grep libsdl //查看目前可安装的 sdl 库版本
这里选择安装的是 libsdl2-dev,使用 apt-install 安装。
sudo apt install libsdl2-dev //安装所需的 sdl 库
安装完成后,可以查看下 /usr/include 目录下是否含有对应的 SDL2 的库,确认安装过程成功,若上述目录不存在,在后续的编译过程可能会产生报错 "fatal error: SDL.h: No such file or directory" 。完成上述配置后,再进行 ./configure ,就可以在 External libraries 字段中发现对应的 sdl2 字段,对应的 Programs 字段下也会有 ffplay 了。
d.通过 make 执行编译过程,编译完成后,在解压目录下就应该已经存在 ffmpeg 、ffplay 和 ffprobe 的可执行程序了。此时执行 sudo make install 命令完成安装过程。
make //编译产生对应的库文件和应用程序
sudo make install //安装上述编译结果,某些操作需要 root 权限,故而使用 sudo
注意:上述安装过程仅编译了最基本的 ffmpeg 功能,并没有包括所有 ffmpeg 支持的编码格式等内容,用户在编译时需要根据自己的需要对编译时的参数进行调整。
可能问题
(1)手动编译获得的 ffmpeg 在使用时可能出现以下错误
Unrecognized option 'crf'.
Error splitting the argument list: Option not found
以及
Unrecognized option 'preset'.
Error splitting the argument list: Option not found
这常见于在使用 ffmpeg 时使用到了 libx264,但在实际的编译过程中并有指定编译 libx264 参数,默认不会编译这一部分组件,从而产生报错。解决方案可以是直接通过命令行安装最新版本的 ffmpeg 或者通过指定对应参数的方式重新编译 ffmpeg.重新编译的参数具体可以参考 Compile FFmpeg for Ubuntu, Debian, or Mint。
若想要使用 apt 安装 ffmpeg ,可以进入 ffmpeg 源码目录,通过 make uninstall 卸载之前安装的手动编译版本的 ffmpeg.之后通过 apt 命令安装 ffmpeg。
sudo apt install ffmpeg //通过 apt 安装 ffmpeg
参考:ffmpeg: Unrecognized option 'crf'. Error splitting the argument list: Option not found
(2)在通过 apt 安装 ffmpeg 后,在使用时可能会出现报错。这是由于手动编译安装的 ffmpeg 安装在 /usr/local/bin/ 目录下,而通过 apt 安装的 ffmpeg 位于 /usr/bin 目录下。在卸载手动安装的 ffmpeg 后上述应用程序信息并没有直接更新,故而产生了以下报错。
bash: /usr/local/bin/ffmpeg: No such file or directory
解决方式:对于终端或图像界面,均可通过重新启动的方式刷新上述可能的更新信息,从而可以正常使用。在命令行环境下,也可以直接通过命令 hash -r 刷新信息。
参考:why ffmpeg command producing error in Ubuntu terminal?
Ubuntu 18.04 手动编译安装 ffmpeg的更多相关文章
- 记录在Ubuntu 18.04系统中安装Apache, MySQL和PHP环境
虽然我们在Linux VPS.服务器安装WEB环境比较方便,可以选择面板或者一键包,但是有些我们需要深入学习的网友不会选择一键安装,而是会尝试编译安装.这样可以学到一些内在的技术.一般我们较为习惯选择 ...
- Ubuntu 16.04下编译安装Apache2.4和PHP7结合
Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...
- 如何在Ubuntu 18.04 LTS上安装和配置MongoDB
MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...
- 在Ubuntu 18.04系统上安装Systemback的方法(抄)
在Ubuntu 18.04系统上安装Systemback的方法 2018-12-26 21:39:05作者:林莉稿源:云网牛站 本文介绍如何在Ubuntu 18.04或者Ubuntu 18.10系统上 ...
- Ubuntu 18.04 Numix主题安装设置
Ubuntu 18.04 Numix主题安装设置 一.首先安装Numix主题 展现效果如下图 1.安装numix sudo add-apt-repository ppa:numix/ppa 2.安装主 ...
- Ubuntu 18.04 Linux上安装Etherpad,基于Web的实时协作编辑器
介绍 Etherpad是一个开源的,基于Web的实时协作编辑器(http://www.0834nanke.com) 它允许多个人使用他们的Web浏览器同时编辑文档. 它还提供了一些很酷的功能,如富文本 ...
- [笔记] Ubuntu 18.04源码安装caffe流程
虽然Ubuntu 18.04可以通过apt安装caffe,但是为了使用最新的代码,还是值得从源码安装一遍的. 安装环境 OS: Ubuntu 18.04 64 bit 显卡: NVidia GTX 1 ...
- ubuntu 18.04下编译最新版本的KMS
KMS:kurento媒体服务,即 kurento media server 很庞大的一个WEBRTC项目,GIT库主项目:https://github.com/Kurento 基础实现,修改了gst ...
- Ubuntu 18.04 环境下安装 Matlab2018
由于实验环境要求,最近在 Ubuntu 18.04 上安装了 Matlab2018b , 这里简单记录过程. (1) 首先是获取对应的 Matlab2018b 的安装包,这里笔者是在一个外国的网站上获 ...
随机推荐
- Oracle Spatial分区应用研究之五:不同分区粒度+本地空间索引效率对比
1.实验目的 若使用本地空间索引,不同分区粒度将产生不同索引组织,其索引分区个数.大小.R-TREE树结构均不相同.那么,在什么分区粒度下的本地空间索引效率较高呢? 2实验数据 实验数据为全国2531 ...
- 【问题】Could not locate PropertySource and the fail fast property is set, failing
这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务 ...
- 【记录】【java】JDK8新特性Stream方式遍历集合
由于是以流方式,所以怎么操作也不改变原来的集合 1.普通遍历forEach List<String> list = new ArrayList(); list.add("a&qu ...
- 2019广东外语外贸大学CTF新手赛-密码学-RSA题解
题面 n=100000463700003241 e=17 密文: 分析: 题面已明示是RSA加密,已公开n与公钥e,n为1e18内的数字(64位).要爆破RSA,显然是先分析n的值. n的值是由两个素 ...
- SpringBoot2.x+Redis+nginx实现session共享和负载均衡
1.创建SpringBoot项目添加依赖 <dependency> <groupId>org.springframework.session</groupId> & ...
- 【洛谷】P1308 统计单词数-全AC题解(易理解
弟弟的混乱代码(易理解 大概 思路: 循环b(被找的字符串),遇空格比较两空格间的长度是否与a(需要查找的字符)相等:不相等继续循环:相等比较内容是否相同(倒数比较,不一样直接退出 ,直到比较到第一个 ...
- C语言开发中常见报错的解决方案
C语言开发中常见报错的解决方案 整理来源于网络,侵权请通知删除.*禁止转载 ---- fatal error C1003: error count exceeds number; stopping c ...
- ExtractFileDir 与 ExtractFilePath 的区别
ExtractFileDir 从文件名中获取目录名(文件不在根目录下时取得的值后没有“/”,在根目录时一样,都是盘符,例如“C:/”) ExtractFilePath 从文件名中获取路径名(文件不在根 ...
- SSO实现机制
引言 单点登录有许多开发商提供解决方案,本文以yale大学SSO开源项目CAS为例,介绍单点登录实现机制. 术语解释 SSO-Single Sign On,单点登录 TGT-Ticket Granti ...
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...