FFmpeg移植教程(linux平台)

目录

第三方源码编译三部曲

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

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

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

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

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

powershell 复制代码
li@alive:~/ffmpeg$ make

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

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

关于 configure 的说明

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

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

shell 复制代码
 ./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版本控制工具。

powershell 复制代码
sudo apt update
sudo apt install git

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

如上图,安装成功。

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

powershell 复制代码
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️⃣ 移动压缩包到家目录 ~

powershell 复制代码
mv ffmpeg-7.1.1.tar.xz ~/

4️⃣ 解压

powershell 复制代码
tar -xvf ffmpeg-7.1.1.tar.xz 

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

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

配置

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

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

powershell 复制代码
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️⃣ 然后进行配置

powershell 复制代码
./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。

powershell 复制代码
export PATH=/usr/local/ffmpeg/bin:$PATH
source ~/.bashrc   # 或 ~/.zshrc

安装

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

powershell 复制代码
make && make install

2️⃣ 验证安装是否成功

powershell 复制代码
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找不到命令的问题。我们还需要设置库路径:

powershell 复制代码
echo "/usr/local/ffmpeg/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig

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

相关推荐
林鸿群14 小时前
Ubuntu 26.04 本地安装 GitLab CE 完整教程(非 Docker 方式)
linux·ubuntu·gitlab·私有部署·代码托管·ubuntu 26.04·omnibus
YuQiao030314 小时前
国内安装claude code
ubuntu·claude·vibe coding
勇闯逆流河14 小时前
【Linux】Linux进程概念(进程优先级,进程切换详解)
linux·运维·服务器
老师好,我是刘同学14 小时前
30个核心Linux命令速查手册
linux
fsj2009yx14 小时前
如何把无公网的求生之路2服务器借助VPS转发注册到steam master列表中
linux·wireguard·求生之路2
慵懒的猫mi14 小时前
deepin UOS AI 助手接入飞书(Feishu)配置指南
linux·人工智能·ai·gpt-3·飞书·文心一言·deepin
Jiozg14 小时前
ES安装到linux(ubuntu)
linux·ubuntu·elasticsearch
面对疾风叭!哈撒给14 小时前
Linux之docker-compose使用(redis、nginx、tdengine、java应用)
linux·redis·docker
zzzsde14 小时前
【Linux】进程(6):程序地址空间
linux·运维·服务器
慵懒的猫mi14 小时前
deepin UOS AI 助手接入钉钉(DingTalk)配置指南
linux·数据库·人工智能·ai·钉钉·deepin