02.Linux下安装FFmpeg

目录

一、下载FFmpeg的编译源码

二、编译源码

三、ffmpeg工具结构解析

1、bin目录

2、include库

3、lib库

四、注意事项

五、可能出现的一些问题

1、某些工具未安装/版本过久

2、缺少pkg-config工具

3、缺少ffmplay


        FFmpeg 是一个开源的跨平台音视频处理工具集,它包含了一系列的程序、库和工具,用于录制、转换和流处理音视频文件和流媒体。

一、下载FFmpeg的编译源码

        进入网站:http://ffmpeg.org/download.html

        

        在网站中先择git地址进行下载。如果git下载比较慢,也可以将选择浏览器下载后转移到Linux虚拟机中或直接在Ubuntu的内置浏览器中进行下载。

二、编译源码

        执行下述命令:

./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-ffplay
sudo make -j 4
sudo make install

        如果编译成功,那么将会在安装路径/user/local/ffmpeg下出现如下子目录

三、ffmpeg工具结构解析

        下面我们来看一下安装好的ffmpeg中的这些子目录中我们需要使用到的东西

  • bin:

    • bin 目录一般存放可执行文件(binaries),即程序的二进制文件。在 FFmpeg 中,这个目录存放了 ffmpegffplayffprobe 等命令行工具的可执行文件。当你在终端中输入命令时,系统会在这个目录中查找对应的可执行文件来执行命令。
  • include:

    • include 目录通常存放头文件(header files),这些文件包含了程序接口的声明和定义,供开发者在自己的程序中引用和调用。在 FFmpeg 中,这个目录存放了各个模块的头文件,如 libavcodeclibavformat 等模块的头文件,允许开发者在自己的代码中使用 FFmpeg 的功能。
  • lib:

    • lib 目录一般存放库文件(libraries),这些文件包含了程序在编译时链接的代码和函数。在 FFmpeg 中,这个目录存放了各个模块的静态库文件(如 .a 文件)和动态库文件(如 .so 文件),供开发者在自己的应用程序中链接使用 FFmpeg 提供的功能。
  • share:

    • share 目录通常存放共享文件(shared data),这些文件可以被多个程序或者用户共享使用。在 FFmpeg 中,这个目录可能包含一些共享的配置文件、文档或者其他资源文件,帮助用户更好地使用和理解 FFmpeg 的功能和特性。

1、bin目录

        重点主要在于bin目录下的三个工具

  • ffmpeg:

    • ffmpeg 是 FFmpeg 项目中最主要的命令行工具之一,用于音视频的录制、转换以及流处理。
    • 它支持从多种输入源(文件、摄像头、网络流等)读取音视频数据,然后可以对其进行编解码、过滤、转码等操作,最后将处理后的结果输出到文件或者流媒体服务器中。
  • ffplay:

    • ffplay 是 FFmpeg 提供的一个简单音视频播放器,基于 SDL(Simple DirectMedia Layer)库。
    • 它能够播放多种音视频格式,支持快进、快退、循环播放等基本功能,是调试和测试音视频文件的方便工具。
  • ffprobe:

    • ffprobe 是 FFmpeg 提供的音视频流分析工具,用于分析媒体文件或者流的详细信息。
    • 它可以提取音视频文件的元数据(如分辨率、编码格式、帧率、比特率等),帮助用户了解和分析媒体文件的特性和结构。

2、include库

        用于后续的二次开发

  • libavcodec:

    • 这是 FFmpeg 中最重要的模块之一,包含了各种音视频编解码器。
    • libavcodec 提供了将音频和视频数据编码和解码的功能。例如,它支持将视频从一种格式转换为另一种格式,如将 H.264 编码的视频转换为 MPEG-2 编码的视频。
    • FFmpeg 中的许多命令行工具和应用程序都依赖于 libavcodec 来处理音视频编解码任务。
  • libavdevice:

    • 这个模块包含了各种设备的输入和输出支持代码。
    • libavdevice 允许 FFmpeg 支持不同的音视频输入和输出设备,如摄像头、音频输入设备、视频捕获卡等。
    • 例如,使用 libavdevice 可以从摄像头捕获视频数据或从麦克风捕获音频数据。
  • libavfilter:

    • libavfilter 模块实现了音视频过滤器框架。
    • 这个模块允许用户应用各种音视频过滤器来处理音视频流。过滤器可以用来进行裁剪、缩放、旋转、去噪、水印等操作。
    • FFmpeg 中的 ffmpeg 命令行工具通过 libavfilter 支持将一个或多个过滤器应用到输入音视频流,并将输出写入到文件或者流媒体服务器。
  • libavformat:

    • libavformat 提供了音视频格式的封装和解封装功能。
    • 这个模块允许 FFmpeg 支持从各种音视频格式中读取数据,以及将音视频数据封装为不同的格式,如 MP4、AVI、FLV 等。
    • 通过 libavformat,FFmpeg 能够处理从本地文件到网络流媒体的广泛应用场景。
  • libavutil:

    • libavutil 是一个工具库,提供了各种用于音视频处理的工具函数。
    • 这个模块包含了用于数学运算、数据结构操作、字节操作、日志、时间处理等功能的工具函数。
    • 许多 FFmpeg 的其他模块都依赖于 libavutil 中的函数来实现它们的功能。
  • libswresample:

    • libswresample 提供了音频重采样功能。
    • 这个模块用于将音频数据从一个采样率或格式转换为另一个采样率或格式,以便匹配特定的音频设备或格式要求。
    • FFmpeg 中处理音频流时经常需要使用 libswresample 来进行采样率调整或格式转换。
  • libswscale:

    • libswscale 提供了视频图像缩放和颜色空间转换的功能。
    • 这个模块可以将视频帧从一种像素格式转换为另一种像素格式,以及进行图像大小的缩放和裁剪。
    • FFmpeg 使用 libswscale 来处理视频流中的图像缩放、格式转换以及色彩空间的转换,例如将 RGB 格式的图像转换为 YUV 格式。

3、lib库

  • libavcodec.a:

    • libavcodec.a 是 FFmpeg 中的静态链接库,包含了各种音视频编解码器的实现代码。静态库在编译时会被直接链接到应用程序中,使得应用程序在运行时不再需要动态加载。
  • libavdevice.a:

    • libavdevice.a 是包含各种音视频输入和输出设备支持代码的静态链接库。它允许应用程序通过 FFmpeg 访问和操作音视频设备,如摄像头、音频输入设备等。
  • libavfilter.a:

    • libavfilter.a 包含音视频过滤器框架的实现代码。这个库允许应用程序使用各种过滤器对音视频流进行处理,如裁剪、缩放、旋转、去噪等操作。
  • libavformat.a:

    • libavformat.a 包含音视频格式封装和解封装的实现代码。它允许应用程序读取和写入各种音视频格式的文件和流媒体。
  • libavutil.a:

    • libavutil.a 是 FFmpeg 的实用工具函数库的静态链接库。它包含了各种常用的工具函数,用于数学运算、数据结构操作、日志处理等。
  • libswresample.a:

    • libswresample.a 包含音频重采样功能的实现代码。它允许应用程序将音频数据从一个采样率或格式转换为另一个采样率或格式。
  • libswscale.a:

    • libswscale.a 包含视频图像缩放和颜色空间转换功能的实现代码。它允许应用程序对视频帧进行大小缩放、像素格式转换以及色彩空间转换。
  • pkgconfig:

    • pkgconfig 目录包含了用于 pkg-config 工具的配置文件。这些文件允许开发者在编译和链接应用程序时,通过 pkg-config 查询 FFmpeg 库的编译和链接选项。

四、注意事项

        如果需要关闭静态库,打开动态库,可以在第一条命令的末尾再添加下述命令

--disable-static  --enable-shared

        在编译过程中,如果对于一些参数的意义不太清楚,可以通过下述命令来查看命令的含义

./configure -help | grep "需要查看的参数名"

五、可能出现的一些问题

1、某些工具未安装/版本过久

执行下述命令:

sudo apt update
sudo apt upgrade
sudo apt install nasm

2、缺少pkg-config工具

这里其实和上述问题处理一样

sudo apt install pkg-config

3、缺少ffmplay

如果安装结束发现bin目录下没有ffmplay,那就需要先安装,再重新执行第二部分的内容

sudo apt install libsdl2-dev

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普文:八大排序算法(JAVA实现)+ 自制动画 (袁厨的算法小屋)

我将我仓库里的排序算法给大家汇总整理了一下,写的非常非常细,还对每个算法制作了动画,一定能够对大家有所帮助,欢迎大家阅读。另外我也对 leetcode 上面可以用排序算法秒杀的算法题进行了总结,会在后面的文章中进行发…

Python自动化运维 系统基础信息模块

1.系统信息的收集 系统信息的收集,对于服务质量的把控,服务的监控等来说是非常重要的组成部分,甚至是核心的基础支撑部分。我们可以通过大量的核心指标数据,结合对应的检测体系,快速的发现异常现象的苗头,进…

Golang | Leetcode Golang题解之第208题实现Trie前缀树

题目: 题解: type Trie struct {children [26]*TrieisEnd bool }func Constructor() Trie {return Trie{} }func (t *Trie) Insert(word string) {node : tfor _, ch : range word {ch - aif node.children[ch] nil {node.children[ch] &Trie{…

mac|tableau public 仪表盘使用

对华东地区的利润进行仪表盘可视化 选择下面的功能表的新建仪表盘,把上面的表1表2放入其中 通过下图操作将两个表联合起来,即上图使用筛选器时下面的表随之改变 将上图设置为筛选器,可以通过点击地区查看数据

MySQL之MHA高可用集群及故障切换

一、MHA概述 MHA(MasterHigh Availability)是一套优秀的mysql高可用环境下故障切换和主从复制的软件。MHA的出现就是为了解决mysql单点故障。Mysql故障切换过程中,MHA能做到0-30秒内自动完成故障性切换操作。MHA能在故障切换的过程中最大程度…

特征工程的力量

为什么你应该使用逻辑回归来建模非线性决策边界(使用 Python 代码) 作为一名大数据从业者,复杂的机器学习技术非常具有吸引力。使用一些深度神经网络 (DNN) 获得额外的 1% 准确率,并在此过程中启动 GPU 实例,这让人非常…

了解 ZooKeeper:关键概念和架构

ZooKeeper 是一种分布式协调服务,广泛用于分布式系统中,用于维护配置信息、命名、同步和组服务。它最初由雅虎开发,现在是一个 Apache 项目,已成为许多大型分布式应用程序不可或缺的一部分。本文深入探讨 ZooKeeper 的关键概念和架…

Spark Join优化案例:Join Key 远大于 Payload

在一个案例中,大表 100GB、小表 10GB,它们全都远超广播变量阈值(默认 10MB)。因为小表的尺寸已经超过 8GB,在大于 8GB 的数据集上创建广播变量,Spark 会直接抛出异常,中断任务执行,所…

python-基础篇-选择-是什么

文章目录 定义一:Python 条件语句跟其他语言基本一致的,都是通过一条或多条语句的执行结果( True 或者 False )来决定执行的代码块。1、什么是条件语句2、if 语句的基本形式3、if 语句多个判断条件的形式4、if 语句多个条件同时判…

Golang | Leetcode Golang题解之第205题同构字符串

题目: 题解: func isIsomorphic(s, t string) bool {s2t : map[byte]byte{}t2s : map[byte]byte{}for i : range s {x, y : s[i], t[i]if s2t[x] > 0 && s2t[x] ! y || t2s[y] > 0 && t2s[y] ! x {return false}s2t[x] yt2s[y] …

《昇思25天学习打卡营第6天 | 函数式自动微分》

《昇思25天学习打卡营第6天 | 函数式自动微分》 目录 《昇思25天学习打卡营第6天 | 函数式自动微分》函数式自动微分简单的单层线性变换模型函数与计算图微分函数与梯度计算Stop Gradient 函数式自动微分 神经网络的训练主要使用反向传播算法,模型预测值&#xff0…

建站小记:迁移域名DNS到CloudFlare

CloudFlare一直有赛博菩萨之称,据说用它做DNS解析服务又快又好又免费,还能防DDOS攻击,并且可以提供页面访问统计功能。 正好我博客网页打开略卡顿,所以决定将自己的DNS解析迁移到CloudFlare。 1.登录CF控制台,添加自己…

LeetCode-刷题记录-二分法合集(本篇blog会持续更新哦~)

一、二分查找概述 二分查找(Binary Search)是一种高效的查找算法,适用于有序数组或列表。(但其实只要满足二段性,就可以使用二分法,本篇博客后面博主会持续更新一些题,来破除一下人们对“只有有…

(已解决)Adobe Flash Player已不再受支持

文章目录 前言解决方案 前言 一般来说,很少遇到官方网站使用Adobe Flash Player来进行录用名单公示了。但是,今天就偏偏遇到一次, 用谷歌浏览器打不开, 点了没有反应,用其他的浏览器,例如windows自带的那…

Golang | Leetcode Golang题解之第207题课程表

题目: 题解: func canFinish(numCourses int, prerequisites [][]int) bool {var (edges make([][]int, numCourses)indeg make([]int, numCourses)result []int)for _, info : range prerequisites {edges[info[1]] append(edges[info[1]], info[0]…

数据结构:期末考 第六次测试(总复习)

一、 单选题 (共50题,100分) 1、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为( D ).(2.0) A、 &am…

在node环境使用MySQL

什么是Sequelize? Sequelize是一个基于Promise的NodeJS ORM模块 什么是ORM? ORM(Object-Relational-Mapping)是对象关系映射 对象关系映射可以把JS中的类和对象,和数据库中的表和数据进行关系映射。映射之后我们就可以直接通过类和对象来操作数据表和数据了, 就…

join()方法——连接字符串、元组、列表和字典

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 join()方法用于连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串&#…

喜报 | 极限科技获得北京市“创新型”中小企业资格认证

2024年6月20日,北京市经济和信息化局正式发布《关于对2024年度4月份北京市创新型中小企业名单进行公告的通知》,极限数据(北京)科技有限公司凭借其出色的创新能力和卓越的企业实力,成功获得“北京市创新型中小企业”的…

学会python——在excel中写入数据(python实例十三)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3 .想Excel中写入数据 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的…