Ubuntu下FFmpeg的安装方式

2023-11-17

FFmpeg介绍

音视频的广泛应用

  • 直播类:音视频会议(腾讯会议、Zoom)、娱乐直播(斗鱼、虎牙)

  • 音视频通话:QQ、微信

  • 网络视频:腾讯视频、爱奇艺

  • 短视频:抖音、快手

  • 视频监控:海康

  • 人工智能:人脸识别、智能音箱

    

概念

  FFMPEG全称为fast forward moving picture expert group,是领先的多媒体框架,提供了音视频的编码、解码、转码、封装、解封装、流、滤镜、播放等功能。几乎支持所有的音视频格式,高度可移植,跨平台:Linux、Mac、Windows等,采用LGPL\GPL发布。

  

影响范围

作为内核的播放器:暴风影音、QQ影音等

作为内核的转码工具:格式工厂等

  

提供的应用程序

  • ffmpeg:音视频转码、编解码工具
  • ffplay:音视频播放器
  • ffprobe:多媒体分析器(查看码流信息、帧率)
  • ffserver:多媒体实时广播流服务器

  

内部构成

  • AVCodec:编解码模块
  • AVFormat:封装模块
  • AVFilter:滤镜模块
  • AVUtil:基本工具模块
  • AVDevice:采集与渲染输入输出模块
  • swscale:视频图像转换模块
  • swresample:音频转换计算模块

  

  

环境安装

  • 前期准备

安装有Ubuntu系统的主机或者设备

一些相关软件包,已打包整理好。如需最新版可根据文中提示到官网下载。

  • 编译安装

创建安装目录 sudo mkdir -p /usr/local/ffmpeg/lib

解压源码 tar -jxf ffmpeg-4.3.2.tar.bz2

到指定ffmpeg目录进行配置 cd ffmpeg-4.3.2/

配置:会报错很多次,过程中需反复执行此步,下述皆简称 配置,注意这步要在ffmpeg-4.3.2下运行

./configure --prefix="/usr/local/ffmpeg/" \
--enable-gpl \
--enable-nonfree \
--enable-ffplay \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-libspeex \
--enable-shared \
--enable-pthreads \
--enable-version3 \
--enable-hardcoded-tables \
--extra-ldflags=-L/usr/local/ffmpeg/lib
如果报错:C compiler test failed.
解决:
sudo apt install g++
sudo apt install gcc

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

解决:  `sudo apt-get install yasm`

配置

报错 ERROR: libfdk_aac not found

解决:
①官⽹下载fdk-aac源码:https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/
②解压fdk-aac:
tar -zxf fdk-aac-2.0.1.tar.gz
并到指定目录:
cd fdk-aac-2.0.1
③进行配置
./configure --prefix=/usr/local/ffmpeg --enable-shared
④源码编译再安装
make -j8
sudo make install

添加环境变量:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig/

配置

如果依旧是  ERROR: libfdk_aac not found
可能是缺少pkg-config
解决方案:sudo apt install pkg-config 

报错 ERROR: libmp3lame >= 3.98.3 not found

解决:
①官⽹下载mp3lame源码:https://sourceforge.net/projects/lame/
②解压lame文件并到指定目录下
tar -zxf lame-3.100.tar.gz
cd lame-3.100/
③进行配置
./configure --prefix=/usr/local/ffmpeg --enable-shared
④编译及安装
make -j8
sudo make install

配置

报错 ERROR: speex not found using pkg-config

解决:
https://www.speex.org/downloads/   下载Speex Source Code
tar -zxf speex-1.2.0.tar.gz 
cd speex-1.2.0/
./configure --prefix=/usr/local/ffmpeg
make -j8
sudo make install

配置

报错 ERROR: libx264 not found

解决:
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
tar jxf x264-master.tar.bz2
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --disable-asm
make -j8
sudo make install

配置

报错 ERROR: x265 not found using pkg-config

解决:
http://ftp.videolan.org/pub/videolan/x265/
tar -zxf x265_3.2.tar.gz 
cd x265_3.2/build/linux
sudo apt-get install cmake
./make-Makefiles.bash
make -j8
sudo make install

配置

如果没有报错再执行(ffmpeg目录下)

make -j8
sudo make install

============================================================

安装完成后,发现/usr/local/ffmpeg/bin目录下,没有ffplay等应用程序,需要安装SDL

解决:
tar -zxf SDL2-2.0.12.tar.gz
cd SDL2-2.0.12/
./configure --prefix=/usr/local/ffmpeg/ --enable-shared
make -j8
sudo make install

再重新运行"ffmpeg配置命令",重新编译安装ffmpeg,并

make -j8
sudo make install

会发现/usr/local/ffmpeg/bin目录下已经有ffmpeg、ffplay、ffprobe等应用程序。

============================================================

执行ffmpeg,错误提示:The program ‘ffmpeg’ is currently not installed.You can install it bytyping: sudo apt install ffmpeg

解决方法:
1、修改系统环境变量: sudo vim /etc/profile文件最后加上export PATH="/usr/local/ffmpeg/bin:$PATH"

2、sudo vim /etc/ld.so.conf 文件最后加上 /usr/local/ffmpeg/lib

3、再执行命令 : sudo ldconfig

再运行ffmpeg命令有如下信息∶(还报错尝试重启机器)

ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
  configuration: --prefix=/usr/local/ffmpeg/ --enable-gpl --enable-nonfree --enable-ffplay --enable-libfdk-aac --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --extra-ldflags=-L/usr/local/ffmpeg/lib
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

============================================================

执行ffplay命令后,提示错误:Could not initialize SDL-No available video device(Did you set theDISPLAY variable?)

1、安装依赖包
sudo apt-get install libasound2-dev
sudo apt-get install libpulse-dev
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev

2、重新编译安装SDL(cd SDL2-2.0.12/)
./configure --prefix=/usr/local/ffmpeg/ --enable-shared --enable-video-x11 --enable-x11-shared --enable-video-x11-vm
make -j8
sudo make install

3、重新配置、编译、安装ffmpeg,再运行ffplay命令,即可正常运行输入ffmpeg -version,得到如下信息,说明ffmpeg安装成功。
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/usr/local/ffmpeg/ --enable-gpl --enable-nonfree --enable-ffplay --enable-libfdk-aac --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --extra-ldflags=-L/usr/local/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100

  

最后测试一下ffplay testVideo.mkv(随便找个视频看是否可以播放成功)

在这里插入图片描述

  

FFmpeg源码目录的介绍

FFmpeg支持的工具:

  • FFmpeg编码支持与定制:configure --help
  • FFmpeg编码器支持:configure --list-encoders
  • FFmpeg解码器支持:configure --list-decoders
  • FFmpeg封装支持:configure --list-muxers
  • FFmpeg解封装支持:configure --list-demuxers
  • FFmpeg通信协议支持:configure --list-protocols

当前环境支持的工具:

  • FFmpeg封装格式支持:ffmpeg -muxers / ffmpeg -demuxers / ffmpeg -formats
  • FFmpeg编码格式支持:ffmpeg -encoders / ffmpeg -codecs
  • FFmpeg解码格式支持:ffmpeg -decoders / ffmpeg -codecs
  • FFmpeg滤镜支持:ffmpeg -filters

  

FFmpeg音视频处理流程

在这里插入图片描述

不同的封装格式就是用不同容器将不同排列方式的音频和视频流(帧)进行盛放。

编码的本质——压缩,像H264/H265/AAC这种可以理解为是压缩格式(编码格式)。

视频编码一定是有损的。

  

FFprobe工具介绍

  • 查看帮助信息:ffprobe --help

命令格式 : ffprobe [OPTIONS] [INPUT_FILE]

  • 查看多媒体数据包:ffprobe -show_packets -show_data testVideo.flv
  • 查看封装格式:ffprobe -show_format testVideo.flv
  • 查看视频文件的帧信息:ffprobe -show_frames testVideo.flv
  • 查看视频文件的流信息:ffprobe -show_streams testVideo.flv
  • 格式化显示:
    ffprobe -of json -show_format testVideo.flv
    ffprobe -print_format csv -show_packets out.mp4 > outMp4.csv

  

FFplay工具介绍

  • 查看帮助信息:ffplay --help

命令格式:ffplay [options] input_file

  • 播放本地流:ffplay -window_title "Testwindow" testVideo.flv
  • 播放网络流:ffplay http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu下FFmpeg的安装方式 的相关文章

  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 将 ffmpeg 编译为独立二进制文件

    我正在尝试编译ffmpeg作为独立的二进制文件 因为我想在 AWS lambda 中使用它 我可以让事情在我正在编译的服务器上正常工作 但是如果我复制二进制文件并从另一台服务器运行它 我会得到 ffmpeg error while load
  • XAMPP Windows 上的 Php Cron 作业

    嗯 我是这个词的新手CRON 据我所知 这是一个Unix安排特定操作在定义的时间间隔后执行的概念 我需要运行一个php文件 每小时更新一次数据库 但我的困惑在于安排执行 我在用XAMPP用于 Windows 7 上的本地开发测试 我发现了什
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 裸机交叉编译器输入

    裸机交叉编译器的输入限制是什么 比如它不编译带有指针或 malloc 的程序 或者任何需要比底层硬件更多的东西 以及如何才能找到这些限制 我还想问 我为目标 mips 构建了一个交叉编译器 我需要使用这个交叉编译器创建一个 mips 可执行
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 如何在google colab中安装ffmpeg包

    我正在尝试使用 Google Colab 来做一些事情 我特别想用ffmpeg打包到从图像创建视频 https stackoverflow com a 44951066 6890234 但 ffmpeg 似乎工作得不太好 这个 在最后一个块
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • FFmpeg av_read_frame 无法正确读取帧?

    好吧 我已经下载了一些 yuv 格式的原始 UHD 序列 并在 mp4 容器中使用 ffmpeg 对其进行编码 h264 4 4 4 100 质量 25fps 当我使用 ffprobe 找出编码了多少帧时 我得到 600 所以这是 24 秒
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 使用 --prof 选项创建多个日志文件而不是一个 v8.log 的节点

    我正在尝试使用 prof 选项来分析我的 Node 应用程序 但我发现不是一个单一的 v8 log 文件 而是使用诸如isolate 0x9582b40 v8 log isolate 0xa1cab78 v8 6049 等前缀创建的多个文件
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve

随机推荐

  • 全球公链进展

    一周速览 过去一周 明星项目动态如下 以太坊ACDE会议更新 Devnet 9 预计将于9月19日启动 以太坊编程语言 Vyper 发布 v0 3 10 候选版本 Conflux v2 3 0 网络硬分叉升级已完成 Cosmos Hub宣布
  • 微信小程序动态修改数据 list展示

    前沿 我想实现一个动态修改data内数据的功能 试验了几种方式 感觉下面的这种方式最实用 所以记录一下 方便后面的小伙伴来学习 代码 js文件代码 Page data artlist 页面加载时候出发的方法 onLoad function
  • 租房信息采集并做数据分析

    郑州常住人口1260 1万人 跃居中部第一 2020年郑州吸纳的省内其他城市流出人口达368万人 郑州户籍总人口数量为881 6万人 采集分区 二七区 中原区 管城回族区 惠济区 金水区 郑东新区 荥阳市 新郑市 上街区 巩义市 新密市 登
  • AndroidStudio 开发中字符串国际化string.xml与Excel表格的互相导入

    在Android 的开发中有时需要适配国际化 需要将string xml中的字符串导出翻译 然后再将翻译后的字符串导入至AndroidStudio中相应的string xml中 关于国际化的实现 可参考Android适配国际化的三种方式 应
  • DP++转HDMI1.4

    CS5216AN 一 主要特征 符合 VESA 双模式 DisplayPort 标准 版本 1 适用于 2 类电缆适配器应用 包括所需的 2 类电缆适配器标识和控制寄存器以及 I2C over AUX 转换 符合 HDMI 1 4b 规范
  • 2.1 目标检测简介

    目录 2 1 目标检测简介 1 2 1 1 传统的目标检测方法 2 1 2 深度学习时代的目标检测 2 1 目标检测简介1 目标检测是另一项非常重要的计算机视觉任务 图像分类的目的是辨别图片中所包含的主体对象是什么 而目标检测的目标是检测图
  • Prometheus 远程读写 Influxdb

    Prometheus 远程读写 Influxdb Influxdb InfluxDB 是一款开源的时序数据库 是InfluxData 是一个公司 提供时序平台 下的一个产品 使用Go语言开发 时序数据库 Time Series Databa
  • Django2 提示:TemplateDoesNotExist

    编写简单Django2 页面 查询后台数据在前端页面展示 但总是提示TemplateDoesNotExist 资源不存在 第一步 创建资源模板文件夹template 第二步 编辑项目的资源配置setting py TEMPLATES BAC
  • C++ NOIP普及组2017初赛答案版

    CCF NOIP2017 初赛普及组C 语言试题第1 页 共7 页第二十三届全国青少年信息学奥林匹克联赛初赛普及组C 语言试题竞赛时间 2017 年10 月14 日14 30 16 30选手注意 试题纸共有7 页 答题纸共有2 页 满分10
  • 数组实例解析3(杨辉三角)

    根据用户输入的行数n输出对应行数的杨辉三角 具体如下 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 public class ArrayTraingleTest public static void
  • SpringMVC+ElementUl+Vue实现增、删、改、查、多条件搜索、分页功能(前端后端分离)

    使用vue element springMVC来实现增 删 改 查 搜索 分页这几个功能 对于今天老师留的作业小张与小红对话 一班小红同学对二班小张同学说 今天我们班里学了ElementUl组件可是我学没明白 老师还留了个基于vue Ele
  • HTTP和HTTPS协议的区别

    HTTP 超文本传输协议 和HTTPS 安全超文本传输协议 是用于在客户端和服务器之间传输数据的两种不同的协议 它们之间的主要区别如下 1 安全性 HTTP是明文传输协议 数据在传输过程中是以明文形式发送的 容易被第三方窃取和篡改 而HTT
  • cloudstack 创建与删除VM流程

    创建VM时 用户将命令发给ApiServlet处理 通过调度执行DeployVMCmd的execute方法 它的顺序图如下 删除VM调度执行DestroyVMCmd的execute方法 它的流程图如下 在DestroyVMCmd在执行exe
  • springboot修改默认8080端口

    springboot自带的Tomcat端口是8080 有时候项目多了就会引起端口占用的问题 所以我们需要修改其中的端口或者杀掉8080端口 1 修改springboot端口方法 我们只需要在 application properties 中
  • angularjs中state的参数4_AngularJS路由系列(四)- UI-Router的$state服务、路由事件、获取路由参数...

    http www myexception cn javascript 2041588 html ngularJS路由系列 4 UI Router的 state服务 路由事件 获取路由参数 项目文件结构 node modules public
  • 华为OD机试 - 计算误码率(Java)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • python语法:多线程同时处理大量文件

    先写在前面 thread模块 简单来说 cpu的反复横跳而已 要写并发机制 还得用多进程multiprocessing模块 想要快速实现的朋友可以看看我这篇文章 是枝裕和 内 python中的多进程 zhuanlan zhihu com 当
  • conda activate激活虚拟环境时报错:Your shell has not been properly configured to use ‘conda activate‘.的解决方法

    场景 ubuntu系统 问题描述 使用conda activate pytorch想激活虚拟环境pytorch时报错 CommandNotFoundError Your shell has not been properly configu
  • 电脑注册表误删恢复办法:系统文件和设置还原法

    一 起因 为了修改电脑字体一不小心把Control Panel整个注册表给删除了 导致电脑界面变的锯齿 界面变形等各种问题 网上找了许多方法都没成功或者难度较大 最终使用系统恢复还原点将系统变成几个小时前的各种设置 包括浏览器记录 系统设置
  • Ubuntu下FFmpeg的安装方式

    FFmpeg介绍 音视频的广泛应用 直播类 音视频会议 腾讯会议 Zoom 娱乐直播 斗鱼 虎牙 音视频通话 QQ 微信 网络视频 腾讯视频 爱奇艺 短视频 抖音 快手 视频监控 海康 人工智能 人脸识别 智能音箱 概念 FFMPEG全称为