FFmpeg移植教程(linux平台)

news2025/7/26 5:12:14

目录

  • 第三方源码编译三部曲
    • 关于 configure 的说明
  • FFmpeg 移植流程
    • 获取源码
      • 方法一:git 远程克隆
      • 方法二:官网下载压缩包解压
    • 配置
    • 安装

第三方源码编译三部曲

Linux平台下有许多开源的第三方库和服务,这些开源代码一般都符合GNU-autotools编码规范,可以使用所谓 “三步曲” 来统一进行配置、编译和安装,如下:

1️⃣ 配置:根据当前平台的具体情况,生成 Makefile 文件

(configure会根据当前系统环境和指定参数生成makefile文件,为下一步的编译做准备)

li@alive:~/ffmpeg$ ./configure
  • 注意:
    • 默认安装到 /usr/local 下,可以通过 --prefix= 来指定安装路径

2️⃣ 编译:根据生成的Makefile文件,指导当前平台的编译器编译所有的源码

li@alive:~/ffmpeg$ make

3️⃣ 安装: 将编译和配置好了的库文件、头文件等内容统一存储到指定的位置

li@alive:~/ffmpeg$ sudo make install
  • 注意:
    • 我当前用户不是 root,因此需要使用 sudo 以超级管理员权限写入 /usr/local 下,否则会写入失败。

关于 configure 的说明

在以上三个固定的步骤中,第一步配置一般来讲需要根据具体情况指定不同的配置参数,可以使用其自带的 --help 指令查看帮助信息,例如:

在这里插入图片描述

执行完该命令后会弹出相关的命令行参数。每种不同的源码包所支持的配置参数都不尽相同,但有一些是比较通用且常用的,比如如下4个参数:

 ./configure --prefix=/home/li/ffmpeg \
 --build=x86_64-linux-gnu	\ 
 --host=arm-none-linux-gnueabi \
 --target=arm-none-linux-gnueabi
  • --prefix :用来指定安装路径,若没指定则默认是 /usr/local
  • --build:指定用来编译这个源代码的编译器是在什么操作系统平台。通常由 config.guess 自动检测,除非你明确指定。
  • --host指定这个源代码编译出来的程序在什么平台上运行。如我的是在arm平台运行,可以使用交叉编译器命令arm-linux-gcc -v查看
  • --target:主要用于编译编译器等工具链本身时才使用,比如构建 GCC、Binutils。在构建普通程序(如 ffmpeg)时,通常不需要设置它,和 --host 一样即可,或省略。

可以通过 gcc -v/arm-linux-gcc -v来获取平台

在这里插入图片描述

在这里插入图片描述

FFmpeg 移植流程

获取源码

方法一:git 远程克隆

这里采用 Git 远程克隆 FFmpeg 源码到我的 WSL 上,当然也可以去 FFmpeg官网直接下载源码并解压。

注意:使用git之前请先安装git版本控制工具。

sudo apt update
sudo apt install git

安装完成输入git --version查看是否安装成功

在这里插入图片描述

如上图,安装成功。

接下来使用 git 远程克隆 FFmpeg 到本地。

git clone https://github.com/FFmpeg/FFmpeg.git /home/li/ffmpeg
  • 这里后面是指定 WSL 的路径,尽量避免直接克隆在 window 的文件系统里面,指定到 WSL 本地目录(ext4)效率更高

克隆完成的我的 /home/li 目录下会多出来一个 ffmpeg 目录,cd 进去即可查看下载的源码。

在这里插入图片描述

方法二:官网下载压缩包解压

1️⃣ 下载官方提供的最新稳定版 FFmpeg。

在这里插入图片描述

2️⃣ 选择另存为,将压缩包放到 ubuntu 的共享文件夹下,方便我们后续移动到 ubuntu 的家目录下。

在这里插入图片描述

  • 我这里 ubuntu 的共享文件夹设置成了 window 下的 F 盘,故另存到 F 盘即可。

3️⃣ 移动压缩包到家目录 ~

mv ffmpeg-7.1.1.tar.xz ~/

4️⃣ 解压

tar -xvf ffmpeg-7.1.1.tar.xz 

5️⃣ 此时即可在家目录下看到我们解压后的文件夹

在这里插入图片描述

  • 至此获取源码的步骤结束了,后面的步骤都是一样的。

配置

由于 FFmpeg 很多组件库,因此在配置的时候只需要先将常用的配置好,其他有需要的时候再配置。

1️⃣ 先安装这些组件库所需依赖

sudo apt update && sudo apt install -y \
  yasm pkg-config build-essential clang \
  libx264-dev libx265-dev libfdk-aac-dev \
  libmp3lame-dev libopus-dev libfreetype6-dev \
  libpipewire-0.3-dev \
  libaom-dev libvpx-dev libvorbis-dev libtheora-dev \
  libxvidcore-dev

2️⃣ 然后进行配置

./configure \
  --prefix=/usr/local/ffmpeg \
  --enable-gpl \
  --enable-nonfree \
  --enable-version3 \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libvpx \
  --enable-libxvid \
  --enable-libfdk-aac \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libtheora \
  --enable-libaom \
  --enable-shared \
  --enable-pthreads \
  --enable-libfreetype \
  --enable-filter=delogo \
  • 注意:这里指定的路径为/usr/local/ffmpeg而并非传统的/usr/local

这样做的好处有几个:

配置路径意义与效果
--prefix=/usr/local默认用户级软件安装路径,直接将可执行文件放到 /usr/local/bin/等标准目录
--prefix=/usr/local/ffmpeg安装到子目录中,所有内容集中在 /usr/local/ffmpeg下,更容易管理和卸载

因此,我们需要手动加上 PATH 让系统能找到 ffmpeg。

export PATH=/usr/local/ffmpeg/bin:$PATH
source ~/.bashrc   # 或 ~/.zshrc

安装

1️⃣ 执行安装命令,等待时间会有点久

make && make install

2️⃣ 验证安装是否成功

which ffmpeg
ffmpeg -version

在这里插入图片描述

由于我安装 FFmpeg 时用的是 --enable-shared,它会依赖这些共享库:

  • libavdevice.so.62
  • libavformat.so.60
  • libavcodec.so.60
  • 等等……

因为我在配置 的时候指定了路径为/usr/local/ffmpeg 这些共享库都安装在了 /usr/local/ffmpeg/lib/ 里。但:

Linux 默认只从 /lib, /usr/lib, /usr/local/lib 等几个路径找 .so 文件。

因此我们export PATH=/usr/local/ffmpeg/bin:$PATH只是解决了which ffmpeg找不到命令的问题。我们还需要设置库路径:

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

执行完即可发现ffmpeg --version已经成功输出版本号说明。

在这里插入图片描述

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

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

相关文章

Mybatis:灵活掌控SQL艺术

在前面的文章中,小编分享了spring中相关的知识,但是没有分享到,如何去更高效操作数据库。 操作数据库传统的方法就是通过JDBC来进行操作。 这个传统方法使用上可谓是够麻烦的 1.首先创建一个数据源对象 2.设置该数据源的属性(…

2025.05.28【Choropleth】群体进化学专用图:区域数据可视化

Load geospatial data Start by loading your geospatial data in R, and build a basic plot. Data from the package The cartography comes with a set of geospatial data included. Learn how to use it to build a choropleth map. 文章目录 Load geospatial dataData …

【春秋云镜】CVE-2022-26965 靶场writeup

知识点 网站的主题或者模块位置一般是可以上传文件的,不过一般为压缩包形式主题或者模块可以上github上找到和cms匹配的源码主题被解压后会放到加入到对应的文件夹中,而且还会自动执行对应的info.php文件(需要主题和cms配套才行)我这里取巧了&#xff0…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的实现 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

(1)pytest简介和环境准备

1. pytest简介 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高。根据pytest的官方网站介绍&#xff0c;它具有如下特点&#xff1a; 非常容易上手&#xff0c;入门简单&a…

构建高性能风控指标系统

一、引言 在金融风控领域&#xff0c;指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标&#xff0c;一个高性能的指标系统非常重要&#xff0c;本文将深入探讨风控平台指标系统的全链路技术实现&#xff0c;涵盖从指标配置到查询优化的完…

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册 晨控CK-UR12系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围绕…

实验一:PyTorch基本操作实验

import torch # PyTorch中初始化矩阵常见有以下几种方法 # 1. 直接使用固定值初始化 # M torch.tensor([[1.0, 2.0, 3.0]]) # 1x3矩阵 # 2. 随机初始化 # M torch.rand(1, 3) # 1x3矩阵&#xff0c;元素在0-1之间均匀分布 # M torch.randn(1, 3) # 1x3矩阵&#xff0c;元…

可视化大屏通用模板Axure原型设计案例

本文将介绍一款基于Axure设计的可视化大屏通用模板&#xff0c;适用于城市、网络安全、园区、交通、社区、工业、医疗、能源等多个领域。 模板概述 这款Axure可视化大屏通用模板集成了多种数据展示模块和组件&#xff0c;旨在为用户提供一个灵活、可定制的数据展示平台。无论…

历年山东大学计算机保研上机真题

历年山东大学计算机保研上机真题 2025山东大学计算机保研上机真题 2024山东大学计算机保研上机真题 2023山东大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 从1到100找质数 题目描述 从 1 1 1 到 100 100 100 中找出所有的质数。 输入格式 …

Java处理动态的属性:字段不固定、需要动态扩展的 JSON 数据结构

文章目录 引言I `JSONObject` 接收和返回JSONObject 接收和返回数据存储II 签名测试接口dto的定义签名计算III JsonAnySetter 和JsonAnyGetter 注解@JsonAnySetter 的用法@JsonAnyGetter 的用法综合示例引言 应用场景: 签名测试接口、表单配置项、参数列表、插件信息等。技术实…

MAC电脑怎么通过触摸屏打开右键

在Mac电脑上&#xff0c;通过触摸屏打开右键菜单的方法如下&#xff1a; 法1:双指轻点&#xff1a;在触控板上同时用两根手指轻点&#xff0c;即可触发右键菜单。这是Mac上常用的右键操作方法。 法2:自定义触控板角落&#xff1a;可以设置触控板的右下角或左下角作为右键区域…

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式?

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【东枫科技】KrakenSDR 天线阵列设置

标准测向需要五根相同的全向天线。您可以折衷使用更少的天线&#xff0c;但为了获得最佳性能&#xff0c;我们建议使用全部五根天线。这些天线通常是磁铁安装的鞭状天线&#xff0c;或偶极子天线。我们建议始终使用均匀圆形阵列 (UCA) 天线&#xff0c;因为它可以确定来自各个方…

云计算数据治理

知识星球&#xff1a;数据书局。打算通过知识星球将这些年积累的知识、经验分享出来&#xff0c;让各位在数据治理、数据分析的路上少走弯路&#xff0c;另外星球也方便动态更新最近的资料&#xff0c;提供各位一起讨论数据的小圈子 1.摘要 云计算可以推动创新和各行业应用的…

【Android】如何抓取 Android 设备的 UDP/TCP 数据包?

目录 前言理解抓包tcpdump 实时抓包Wireshark 解包抓包后的一些思考 前言 在真正接触 UDP/TCP 抓包之前&#xff0c;我一直以为这是一项高深莫测的技术。可当我们真正了解之后才发现&#xff0c;其实并没有那么复杂——不过如此。 所谓的大佬&#xff0c;往往只是掌握了你尚未…

Scratch节日 | 六一儿童节射击游戏

六一儿童节快乐&#xff01;这款超有趣的 六一儿童节射击游戏&#xff0c;让你变身小猫弓箭手&#xff0c;守护节日的快乐时光&#xff01; &#x1f3ae; 游戏玩法 上下方向键&#xff1a;控制小猫的位置&#xff0c;自由移动&#xff0c;瞄准目标&#xff01; 空格键&#…

GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)

这里写目录标题 0、驱动pytorch环境安装验证1.window环境2.Mac Apple M芯片环境 1、Nvidia显卡驱动、CUDA、cuDNN关系汇总1**1. Nvidia显卡驱动&#xff08;Graphics Driver&#xff09;****2. CUDA&#xff08;Compute Unified Device Architecture&#xff09;****3. cuDNN&a…

一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban

title: 一次借助ChatGPT抵御恶意攻击的经历&#xff0c;为个人服务器添加自动防御系统Fail2ban tags: 个人成长 categories:杂谈 我有一台个人服务器&#xff0c;托管着自己的WordPress网站&#xff0c;也放了RustDesk这种私有化的远程桌面工具&#xff0c;最近我发现RustDesk…

(九)深度学习---自然语言处理基础

分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.文本数据的表示方法 二.神经网络文本情感分析案例 三…