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的更多相关文章

  1. 记录在Ubuntu 18.04系统中安装Apache, MySQL和PHP环境

    虽然我们在Linux VPS.服务器安装WEB环境比较方便,可以选择面板或者一键包,但是有些我们需要深入学习的网友不会选择一键安装,而是会尝试编译安装.这样可以学到一些内在的技术.一般我们较为习惯选择 ...

  2. Ubuntu 16.04下编译安装Apache2.4和PHP7结合

    Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...

  3. 如何在Ubuntu 18.04 LTS上安装和配置MongoDB

    MongoDB是一款非关系型数据库,提供高性能,高可用性和自动扩展企业数据库. MongoDB是一个非关系型数据库,因此您不能使用SQL(结构化查询语言)插入和检索数据,也不会将数据存储在MySQL或 ...

  4. 在Ubuntu 18.04系统上安装Systemback的方法(抄)

    在Ubuntu 18.04系统上安装Systemback的方法 2018-12-26 21:39:05作者:林莉稿源:云网牛站 本文介绍如何在Ubuntu 18.04或者Ubuntu 18.10系统上 ...

  5. Ubuntu 18.04 Numix主题安装设置

    Ubuntu 18.04 Numix主题安装设置 一.首先安装Numix主题 展现效果如下图 1.安装numix sudo add-apt-repository ppa:numix/ppa 2.安装主 ...

  6. Ubuntu 18.04 Linux上安装Etherpad,基于Web的实时协作编辑器

    介绍 Etherpad是一个开源的,基于Web的实时协作编辑器(http://www.0834nanke.com) 它允许多个人使用他们的Web浏览器同时编辑文档. 它还提供了一些很酷的功能,如富文本 ...

  7. [笔记] Ubuntu 18.04源码安装caffe流程

    虽然Ubuntu 18.04可以通过apt安装caffe,但是为了使用最新的代码,还是值得从源码安装一遍的. 安装环境 OS: Ubuntu 18.04 64 bit 显卡: NVidia GTX 1 ...

  8. ubuntu 18.04下编译最新版本的KMS

    KMS:kurento媒体服务,即 kurento media server 很庞大的一个WEBRTC项目,GIT库主项目:https://github.com/Kurento 基础实现,修改了gst ...

  9. Ubuntu 18.04 环境下安装 Matlab2018

    由于实验环境要求,最近在 Ubuntu 18.04 上安装了 Matlab2018b , 这里简单记录过程. (1) 首先是获取对应的 Matlab2018b 的安装包,这里笔者是在一个外国的网站上获 ...

随机推荐

  1. idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”

    <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artif ...

  2. 安装cnpm出现问题

    安装cnpm: 命令行中输入   npm install -g cnpm --registry=http://registry.npm.taobao.org 报:cnpm不是内部命令 解决方法:设置环 ...

  3. JVM Server与Client运行模式

    JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升.原因是: 当虚拟机运行在-client模式的时候,使用的 ...

  4. Forbidden (CSRF token missing or incorrect.):

    CSRF令牌失效或丢失,Ajax请求页面报错(403 Forbidden ) csrftoken存在 页面响应为CSRF验证失败请求被中断,经过测试,该错误并非是没有在表单中加入{% csrf_tok ...

  5. python ---socket初识

    python网络编程(初识) 一些概念 套接字: 套接字(socket)也叫通信端点,最初用于计算机内部进程之间的通信,而随着网络的发展,套接字被用于计算机之间的通信.举个例子,你(是一台计算机)要打 ...

  6. sqlite 安装与编译

    本文简述了SQLite的概念,并详细描述了SQLite在Linux和Windows平台下的编译方法 关于 SQLite SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 ...

  7. mysql5.7新增加用户和授权

    迁移mysql数据库,运行项目的时候发现nginx和uWSGI都配置正确,可就是网站打不开,看了log文件,发现错误: django.db.utils.OperationalError: (1044, ...

  8. robotframework_接口自动化

    我们在使用rebotframework的时候,不只是能做UI自动化,接口自动化也是可以的. 那么这里就整理一下rebotframework_接口自动化的应用: 一.编写接口测试 由上图可知,该接口如下 ...

  9. [cf 1236 E] Alice and the Unfair Game

    题意: 给定一个长度为m的序列$A$,你有一个长度为n的棋盘,可以任选一个位置x作为起点. 在时刻$[1,m+1]$你可以向左或向右移动一格. 设时刻i你移动后所在的位置为$B_i$,你需要满足对于任 ...

  10. Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新)

    原文:Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新) 程序如何自己更新自己呢?你可能会想到启动一个新的程序或者脚本来更新自己.然而 Windows 操作系统允许一个应 ...