FFmpeg 编译安装和静态安装

简介

FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有人类和机器创建的格式。本指南将详细介绍如何在 CentOS 8.5.2111 系统上从源代码编译并安装 FFmpeg 6.1.1 版本。从源代码编译安装可以确保您获得最新版本的功能,并可以根据您的特定需求进行定制。本博客主要依赖于 manus 生成,我通过 manus 给出的方案逐步运行并安装成功,并且我也对比了下预编译静态安装和编译安装的差别。

1. 预编译静态安装(新手推荐)

预编译静态安装是普通用户的首选,速度快操作少,只需要按照自己机器的型号和需要安装的版本进行选择,1分钟即装即用,但是缺点是有些动态库不支持,速度慢等等,但是我不是CV方向的深度用户,所以我没有卡到静态安装造成的瓶颈上

首先,我们要去官方预编译库中选择自己需要的版本,https://github.com/BtbN/FFmpeg-Builds/releases

其次,依次执行下面的命令就可以成功安装了,耗时取决于你的网速

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-6.1.1-amd64-static.tar.xztar xf ffmpeg-6.1.1-amd64-static.tar.xzcd ffmpeg-n6.1-latest-linux64-gpl-6.1/bin# 或者你可以选择添加路径的方式
sudo install -m 755 ffmpeg ffprobe /usr/local/binffmpeg -version

2. 编译安装

编译安装版本选择更多,功能选择更多,对依赖包的使用更加极致,但是缺点就是安装的慢且复杂。不同的机器在编译配置的时候所需要的依赖包不同,我这里也是基于 manus 给出的建议进行罗列的,但在配置 ffmpeg configure 的时候一定不能报错,哪个包缺少或者版本依赖不对都要修改,否则在 make 编译的时候是通不过的

1. 更新系统

首先,更新您的系统,确保所有已安装的软件包都是最新版本。这有助于避免潜在的依赖问题。

sudo dnf update -y

2. 安装开发工具

安装编译 FFmpeg 所需的开发工具和库。Development Tools 组包含了 GCC、make 等基本编译工具。

sudo dnf groupinstall "Development Tools" -y
sudo dnf install epel-release -y
sudo dnf install git nasm yasm autoconf automake cmake libtool -y

3. 安装必要的依赖库

FFmpeg 依赖于许多第三方库来支持不同的音视频格式和功能。以下是一些常用的、推荐安装的库。您可以根据需要选择性安装。

重要提示: CentOS 8 已经停止维护,其官方仓库可能不再更新。您可能需要启用 PowerTools 或 CodeReady Linux Builder (CRB) 仓库来获取一些依赖。

启用 PowerTools 仓库 (如果尚未启用):

sudo dnf config-manager --set-enabled PowerTools

或者,对于某些较新的 CentOS 8 版本,可能需要启用 CodeReady Linux Builder (CRB) 仓库:

sudo dnf config-manager --set-enabled codeready-builder

安装依赖库:

sudo dnf install \ SDL2-devel \ zlib-devel \ bzip2-devel \ libXext-devel \ libXfixes-devel \ libXrandr-devel \ libXrender-devel \ libXv-devel \ libva-devel \ libvdpau-devel \ alsa-lib-devel \ pulseaudio-libs-devel \ libwebp-devel \ openjpeg2-devel \ lame-devel \ libvorbis-devel \ libtheora-devel \ libvpx-devel \ x264-devel \ x265-devel \ opus-devel \ v4l-utils-devel \ frei0r-devel \ libass-devel \ libbluray-devel \ libbs2b-devel \ libcaca-devel \ libcdio-paranoia-devel \ libdrm-devel \ libiec61883-devel \ libmodplug-devel \ libopenmpt-devel \ librtmp-devel \ libssh-devel \ libv4l-devel \ libxml2-devel \ openal-soft-devel \ openssl-devel \ speex-devel \ teem-devel \ twolame-devel \ vid.stab-devel \ vo-amrwbenc-devel \ wavpack-devel \ yasm-devel \ zimg-devel \ -y

请注意,上述列表包含了很多可选的库。如果您不需要所有功能,可以只安装您需要的库。例如,如果您不需要 H.264 编码,可以不安装 x264-devel

编译和安装 FFmpeg 6.1.1

1. 下载 FFmpeg 源代码

从 FFmpeg 官方网站下载 6.1.1 版本的源代码。您可以使用 wget 命令下载。

cd /usr/local/src
sudo wget https://ffmpeg.org/releases/ffmpeg-6.1.1.tar.bz2
sudo tar -xf ffmpeg-6.1.1.tar.bz2
cd ffmpeg-6.1.1

2. 配置编译选项

进入 FFmpeg 源代码目录后,运行 ./configure 命令来配置编译选项。您可以根据需要启用或禁用特定的组件和编解码器。以下是一个常用的配置示例,包含了许多常用功能。

sudo ./configure \ --prefix=/usr/local/ffmpeg \ --enable-shared \ --enable-gpl \ --enable-nonfree \ --enable-libmp3lame \ --enable-libopus \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-libwebp \ --enable-libtheora \ --enable-libvorbis \ --enable-libass \ --enable-libfreetype \ --enable-libfribidi \ --enable-libharfbuzz \ --enable-libfontconfig \ --enable-libspeex \ --enable-libv4l2 \ --enable-libxvid \ --enable-opencl \ --enable-opengl \ --enable-pthreads \ --enable-version3 \ --enable-hardcoded-tables \ --enable-avfilter \ --enable-postproc \ --enable-runtime-cpudetect \ --disable-debug \ --disable-static

配置选项说明

  • --prefix=/usr/local/ffmpeg: 指定 FFmpeg 的安装路径。建议安装到 /usr/local/ 下的独立目录,以便于管理。
  • --enable-shared: 编译共享库,这对于其他程序调用 FFmpeg 库非常有用。
  • --enable-gpl: 启用 GPL 许可下的组件。如果您计划分发您的应用程序,请注意 GPL 许可的限制。
  • --enable-nonfree: 启用非自由许可下的组件,例如 x264x265。同样,请注意许可限制。
  • --enable-libmp3lame, --enable-libopus, --enable-libvpx, --enable-libx264, --enable-libx265, --enable-libwebp, --enable-libtheora, --enable-libvorbis, --enable-libass, --enable-libfreetype, --enable-libfribidi, --enable-libharfbuzz, --enable-libfontconfig, --enable-libspeex, --enable-libv4l2, --enable-libxvid: 启用对特定外部库的支持。只有安装了相应的 *-devel 包,这些选项才能成功启用。
  • --disable-debug: 禁用调试信息,可以减小编译后的文件大小。
  • --disable-static: 禁用静态库编译,只编译共享库。

如果 configure 命令执行成功,它会显示一个总结,列出将要编译的组件和启用的功能。如果出现错误,通常是缺少某个依赖库,您需要根据错误信息安装相应的 *-devel 包。

3. 编译和安装

配置完成后,使用 make 命令编译 FFmpeg,然后使用 make install 进行安装。

sudo make -j$(nproc)
sudo make install

make -j$(nproc) 会利用所有可用的 CPU 核心进行并行编译,从而加快编译速度。

配置环境变量

为了让系统能够找到 FFmpeg 命令和库,需要配置环境变量。

1. 配置动态链接库路径

创建或编辑 /etc/ld.so.conf.d/ffmpeg.conf 文件,添加 FFmpeg 库的路径。

sudo echo "/usr/local/ffmpeg/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig

ldconfig 命令会更新动态链接库缓存。

2. 配置 PATH 环境变量

将 FFmpeg 的可执行文件路径添加到系统的 PATH 环境变量中,这样您就可以在任何位置直接运行 ffmpeg 命令。

sudo echo 'export PATH="/usr/local/ffmpeg/bin:$PATH"' | sudo tee /etc/profile.d/ffmpeg.sh
source /etc/profile.d/ffmpeg.sh

为了使 PATH 环境变量永久生效,您可能需要重新登录或重启终端会话。

验证安装

安装完成后,验证 FFmpeg 是否已成功安装并可正常使用。

ffmpeg -version

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

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

相关文章

人大BABEC地平线高效率具身导航!Aux-Think:探索视觉语言导航中数据高效的推理策略

作者: Shuo Wang1,3^{1,3}1,3, Yongcai Wang1^{1}1, Wanting Li1^{1}1 , Xudong Cai1^{1}1, Yucheng Wang3^{3}3, Maiyue Chen3^{3}3, Kaihui Wang3^{3}3, Zhizhong Su3^{3}3, Deying Li1^{1}1, Zhaoxin Fan2^{2}2单位:1^{1}1中国人民大学,2^…

01. maven的下载与配置

1.maven的下载与初步配置a.下载并配置仓库地址下载maven压缩包,并解压,解压后应有如下几个文件点击conf,打开settings.xml(我用的VScode打开的),我们需要声明一下内部仓库的地址,以及私服的一些…

1701. 请输出所有的3位对称数

问题描述请输出所有的 33 位对称数,对称数指的是一个整数 nn 正过来和倒过来是一样的,比如:101、121、282…101、121、282…请从小到大输出符合条件的3位对称数,每行 11 个。输入无。输出从小到大按题意输出符合条件的数&#xff…

C++算法·排序

排序的定义 这个不用说吧 就是根据某个条件对一个数列进行有序的操作 例如要求从小到大排序、从大到小排序等等 排序的分类 比较排序(Comparison(Comparison(Comparison Sorts)Sorts)Sorts) 特点:通过元素间的比较决定顺序 时间复杂度下限:O(nO(nO(n…

微服务项目中的注册中心——Nacos配置

从零开始:Nacos服务注册与配置中心实战教程 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的服务发现、配置管理工具,集注册中心与配置中心于一体,广泛应用于微服务架构。本文将从环境搭建到实战配…

日期格式化成英文月,必須指定語言環境

如果不指定Locale.ENGLISH 在有些JDK下 輸出6月 INV USD 314,791.77,DUE 25-07 [PAID USD 503,389.56 ON 2025-07-16]Mar INV USD 52,042.00,DUE 25-07 [PAID USD 52,042.00 ON 2025-08-11]所以必…

【6】Transformers快速入门:Transformer 的注意力层 是啥?

一句话看懂注意力层作用:让 AI 像人一样 “抓重点” (比如读“猫追老鼠”,自动聚焦 “追” 这个动作,忽略无关词)1. 为什么需要注意力? 问题场景(翻译例子): 英文&#x…

集合,完整扩展

目录 前言: 一、List接口 1.1 ArrayList 1.2 LinkedList 1.3 Vector 二、Set接口 2.1 HashSet 2.2 TreeSet 2.3 LinkedHashSet 三、应用选择 前言: 本篇文章重点梳理 List 接口和 Set 接口的核心内容,结合代码案例帮大家吃透它们的…

【doris基础与进阶】3-Doris安装与部署

安装前的准备 在windows系统上通过vmwareubuntu 22.04的方式进行安装,由于资源有限,在同1台机器上同时安装fe和be(broker本次不安装,极简化安装),安装版本为2.1.10,2.x版本架构不会有大的变化&a…

关于数据结构6-哈希表和5种排序算法

哈希表1哈希算法将数据通过哈希算法映射成一个键值,存取都在同一个位置实现数据的高效存储和查找,将时间复杂度尽可能降低至O(1)2哈希碰撞多个数据通过哈希算法得到的键值相同,成为产生哈希碰撞3哈希表:构建哈希表存放0-100之间的…

AWT与Swing深度对比:架构差异、迁移实战与性能优化

全面对比分析Java AWT与Swing GUI框架的架构差异、性能表现和适用场景,提供完整的AWT到Swing迁移实战指南,包含15代码示例、性能测试数据、最佳实践建议,助你做出明智的技术选型和实现平滑迁移。 Java AWT, Swing, GUI框架对比, 代码迁移, 性…

git仓库检测工具

介绍 Gitleaks 是一款用于检测git 仓库、文件以及任何你想通过 git 传递的信息(例如密码、API 密钥和令牌)的工具stdin。如果你想了解更多关于检测引擎工作原理的信息,请查看这篇博客:正则表达式(几乎)就是你所需要的一切。 ➜ ~/code(master) gitleaks git -v○│╲│…

【4】Transformers快速入门:自然语言模型 vs 统计语言模型

一句话关系总结 统计语言模型 自然语言模型的“数学基础” (就像加减乘除是数学的基础,统计模型是AI学说话的基础工具)区别对比表(小白版)维度统计语言模型自然语言模型本质用数学公式算句子概率用神经网络模仿人脑理…

[激光原理与应用-252]:理论 - 几何光学 - 传统透镜焦距固定,但近年出现的可变形透镜(如液态透镜、弹性膜透镜)可通过改变自身形状动态调整焦距。

一、液态透镜:电润湿效应驱动曲率变化基本结构液态透镜由两种互不相溶的液体(如导电水溶液与绝缘硅油)封装在透明圆筒形容器中构成。容器壁经疏水处理,使水溶液呈圆顶型聚集在中心,与硅油形成凸状曲面。工作原理电润湿…

wordpress数据库导入时的#1044错误

在wordpress网站数据库文件.sql导入到数据库时,发生错误,错误提示如下:#1044 – Access denied for user ‘wodepress_com’’localhost’ to database ‘wodepress’。 这个错误表明用户wodepress_com没有权限访问数据库wodepress。以下是解…

微服务ETCD服务注册和发现

1.什么是注册中心 注册中心主要有三种角色: 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 服务消费者(RPC Client)&…

计算机网络---默认网关(Default Gateway)

一、默认网关的定义 默认网关(Default Gateway)是一个网络设备(通常是路由器、防火墙或三层交换机)的IP地址,它是本地网络中的设备访问其他网络(如外网、其他子网)时,数据报文的“第…

OpenBMC中libgpio架构与驱动交互全解析:从硬件映射到应用控制

1. libgpio概述与核心定位 libgpio作为OpenBMC中GPIO管理的核心库,扮演着连接硬件驱动与上层应用的桥梁角色。它通过标准化的接口抽象了不同硬件平台的GPIO操作细节,使得电源控制、传感器监控等关键功能能够以统一的方式访问GPIO资源。 1.1 libgpio在Ope…

开放原子开源生态大会:麒麟信安加入openEuler社区AI联合工作组,聚焦操作系统开源实践与行业赋能

7月23日,由开放原子开源基金会主办的2025开放原子开源生态大会在京开幕,大会以“开源赋能产业,生态共筑未来”为主题。工业和信息化部副部长熊继军、北京市人民政府副秘书长许心超出席大会并致辞。作为开放原子开源基金会黄金捐赠人和开源重要…

Lyapunov与SAC算法的数学结构对比:从二次漂移到TD损失

一、李雅普诺夫优化中二次漂移函数的推导 李雅普诺夫优化的核心是通过设计 “李雅普诺夫函数” 和 “漂移项”,保证系统状态收敛到稳定点。以下以线性时不变系统为例(非线性系统推导逻辑类似,仅动力学方程更复杂),推导…