02.Linux下安装FFmpeg

news2025/1/18 11:48:03

目录

一、下载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.coloradmin.cn/o/1881252.html

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

相关文章

QListView自定义item(结合QSqlQueryModel)

QListView:绘制自定义List(一)——设置ItemDelegate_qt_繁星执着-开放原子开发者工作坊 (csdn.net) QListView自定义Item_qlistview 自定义item-CSDN博客 结合我写的上一篇文章: QTableView与QSqlQueryModel的简单使用-CSDN博客 这次尝试…

[数据集][目标检测]桥梁检测数据集VOC+YOLO格式1116张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1116 标注数量(xml文件个数):1116 标注数量(txt文件个数):1116 标注…

zfile文件共享系统使用

1.简介 zfile是一款基于java开源的文件共享软件,有两种部署(jar包和war包),非常适合广大的Java开发人员使用(当然其他人员也可使用),或者你也可以称它为网盘,可以在Windows、MacOS、Linux上部署…

C#串口通信Seriaport和页面传值

串口通信 串口COM:是一种用于连接计算机和外设设备的接口,也叫串行接口,简称com,常见的串口有一半电脑应用的RS-232(使用25针或9针的 连接器)通俗来讲串口就是usb接口、鼠标串口。键盘串口 串口通讯:是指外…

【MySQL】Linux下MySQL的目录结构、用户、权限与角色

一、Linux下MySQL的目录结构 1、MySQL相关目录 数据库文件存放路径:/var/lib/mysql数据库命令存放路径:/user/bin和/user/sbin配置文件目录:/usr/share/mysql-8.0/、/usr/share/mysql/和/etc/my.cnf 2、假设我们创建了一个数据库dbtest1&a…

uniapp 安卓、IOS、H5、微信小程序实现PDF在线预览

在使用uniapp开发移动端时,微信开发者工具里webview能正常打开后端接口返回的pdf文件流。正式发布后,在配置了业务域名和服务器域名的前提下,预览pdf文件却只能看到白屏,因此我猜测微信小程序不能通过webview读取文件流。这个想法…

论文阅读_基于嵌入的Facebook搜索

英文名称:Embedding-based Retrieval in Facebook Search 中文名称:基于嵌入式检索的Facebook搜索 时间:Wed, 29 Jul 2020 (v2) 地址:https://arxiv.org/abs/2006.11632 作者:Jui-Ting Huang, Ashish Sharma, Shuying …

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

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

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

LeetCode题练习与总结:重排链表--143

一、题目描述 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进…

centos 7.9 离线环境安装GPU服务环境

文章目录 centos 7.9 离线环境安装GPU服务环境系统配置更新 gcc更新内核安装显卡驱动安装cuda安装docker 和 nvidia-container-runtime验证 centos 7.9 离线环境安装GPU服务环境 基于centos 7.9 离线安装gpu 服务基础环境,用于在docker 中运行算法服务 系统配置 …

python open函数中文乱码怎么解决

首先在D盘下新建一个html文档,接着在里面输入含有中文的Html字符,使用中文格式对读取的字符进行解码,再用utf-8的模式对字符进行编码,然后就能正确输出中文字符。 代码如下: # -*- coding: UTF-8 -*- file1 open(&quo…

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

题目: 题解: class Solution:def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:edges collections.defaultdict(list)indeg [0] * numCoursesfor info in prerequisites:edges[info[1]].append(info[0])indeg[info[…

【Web3项目案例】Ethers.js极简入门+实战案例:实现ERC20协议代币查询、交易

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 目录 简介 前景科普-ERC20 Ethers极简入门教程:HelloVitalik(非小白可跳) 教程概览 开发工具 V…

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

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

44 - 50题高级字符串函数 / 正则表达式 / 子句 - 高频 SQL 50 题基础版

目录 1. 相关知识点2.例子2.44 - 修复表中的名字2.45 - 患某种疾病的患者2.46 - 删除重复的电子邮箱2.47 - 第二高的薪水2.48 - 按日期分组销售产品2.49 - 列出指定时间段内所有的下单产品2.50 - 查找拥有有效邮箱的用户 1. 相关知识点 相关函数 函数含义concat()字符串拼接upp…

[AIGC] Shell脚本在工作中的常用用法

Shell脚本是一种为 shell 编写的脚本程序。商业上的 Unix Shell 一般都配备图形界面,主要包括:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh&…

专题三:Spring源码中新建module

前面我们构建好了Spring源码,接下来肯定迫不及待来调试啦,来一起看看大名鼎鼎ApplicationContext 新建模块 1、基础步骤 1.1 自定义模块名称如:spring-self 1.2 选择构建工具因为spring使用的是gradle,所以这边需要我们切换默认…

KV260视觉AI套件--PYNQ-DPU

目录 1. 简介 2. DPU 原理介绍 2.1 基本原理 2.2 增强型用法 3. DPU 开发流程 3.1 添加 DPU IP 3.2 在 BD 中调用 3.3 配置 DPU 参数 3.4 DPU 与 Zynq MPSoC互联 3.5 分配地址 3.6 生成 Bitstream 3.7 生成 BOOT.BIN 4. 总结 1. 简介 在《Vitis AI 环境搭建 &…

爬虫中如何创建Beautiful Soup 类的对象

在使用 lxml 库解析网页数据时,每次都需要编写和测试 XPath 的路径表达式,显得非常 烦琐。为了解决这个问题, Python 还提供了 Beautiful Soup 库提取 HTML 文档或 XML 文档的 节点。 Beautiful Soup 使用起来很便捷,…