FFmpeg编译与配置 - Linux环境

Linux环境配置

环境:Ubuntu 22.04

step1. 首先下载安装依赖环境

更新软件源

复制代码
sudo apt update

下载依赖软件

复制代码
sudo apt install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev \
libunistring-dev

下载所需的第三方库

NASM,一些库依赖的汇编器:sudo apt install nasm

libx264,H.264 视频编码器:sudo apt install -y libx264-dev

libx265,H.265 视频编码器(也称为 HEVC):sudo apt install -y libx265-dev libnuma-dev

libvpx,VP8/VP9 视频编码器/解码器:sudo apt install -y libvpx-dev

libfdk-aac,AAC 音频编码器:sudo apt install -y libfdk-aac-dev

libmp3lame,MP3 音频编码器:sudo apt install libmp3lame-dev

libopus,Opus 音频编码器/解码器:sudo apt install libopus-dev

libaom,AV1 视频编码器/解码器。sudo apt install -y libaom-dev

step2. 编译源文件

首先需要创建两个目录

bin目录:用于存储编译后的可执行程序(ffmpeg、ffplay、ffprobe)

build目录:用于存储编译后的相关库文件

下载源文件,参考地址:https://github.com/FFmpeg/FFmpeg/tree/release/7.0

进入到源文件目录中,运行配置文件: B I N D I R 表示 b i n 目录的位置, BIN_DIR表示bin目录的位置, BINDIR表示bin目录的位置,BUILD_DIR表示build目录的位置

复制代码
PATH="$BIN_DIR:$PATH" PKG_CONFIG_PATH="$BUILD_DIR/lib/pkgconfig" \
./configure \
--prefix="$BUILD_DIR" \
--pkg-config-flags="--static" \
--extra-cflags="-I$BUILD_DIR/include" \
--extra-ldflags="-L$BUILD_DIR/lib" \
--extra-libs="-lpthread -lm" \
--bindir="$BIN_DIR" \
--enable-gpl \
--enable-gnutls \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree

现在开始编译:

复制代码
make -j4 & make install

tips:make -j4,表示以4个线程执行make,可以根据自己的情况适当调整

在编译好之后,将ffmpeg等命令行工具移动或链接到/usr/bin目录下就可以在命令行正常使用了

生成的静态库和头文件也可以移动到/usr/lib目录下和/usr/include目录下

相关推荐
heqingchun165 分钟前
Ubuntu 22.04 交叉编译 RK3568 MPP + FFmpeg 完整指南
linux·ubuntu·ffmpeg
好评12410 分钟前
【Linux】五种IO模型与非阻塞IO
linux·服务器·nat
啦啦啦啦啦zzzz31 分钟前
Appender抽象类的实现c++20
linux·服务器·c++·c++20
小此方32 分钟前
Linux网络(七):从 Socket 封装到应用层协议:手写网络版计算器,彻底搞懂 TCP 通信、序列化与反序列化
linux·网络·tcp/ip
kyle~44 分钟前
Linux --- epoll (I/O就绪事件通知机制)
linux·运维·服务器
刘广睿1 小时前
音频降噪实战:ffmpeg 滤镜、RNNoise 与人声分离方案对比
ffmpeg·音视频·效率工具·剪辑
AlfredZhao1 小时前
进程都杀了,为什么 `netstat` 还能看到端口?
linux
一条泥憨鱼1 小时前
【从0开始学习计算机网络】| 邮件协议入门:SMTP、POP3、IMAP
linux·运维·计算机网络·github
Johny_Zhao12 小时前
网络安全等级保护测评实施方案
linux·网络·人工智能·网络安全·信息安全·云计算·等保测评·系统运维·itsm
落羽的落羽12 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法