[root@localhost yum.repos.d]# vi /etc/fstab
[root@localhost yum.repos.d]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Sep 25 09:37:51 2025
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=877583d9-0c26-4937-9256-b20852d0d3a6 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sr0 /mnt/centos_iso iso9660 ro,loop 0 0
第一步
yum clean all
yum -y update # 可选,若后续依赖报错,建议先更新
yum install -y autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make pkgconfig zlib-devel
第二步 创建工作目录
用于统一管理源码和编译产物:
mkdir -p /usr/local/src/ffmpeg_sources # 存放源码
mkdir -p /usr/local/ffmpeg #
之前挂载的镜像是mini版的,现在挂载的是最大的版本,包比较全,
[root@localhost ~]# mount /dev/cdrom /mnt/centos_iso/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 498M 0 498M 0% /dev
tmpfs tmpfs 510M 0 510M 0% /dev/shm
tmpfs tmpfs 510M 8.0M 502M 2% /run
tmpfs tmpfs 510M 0 510M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 1.4G 17G 8% /
/dev/sda1 xfs 1.1G 144M 920M 14% /boot
/dev/sr0 iso9660 4.8G 4.8G 0 100% /mnt/centos_iso
tmpfs tmpfs 102M 0 102M 0% /run/user/0
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 3.6 kB 00:00:00
(1/2): local/group_gz | 153 kB 00:00:00
(2/2): local/primary_db | 3.3 MB 00:00:00
repo id repo name status
local CentOS-Local-Repo 4,070
repolist: 4,070
[root@localhost ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: local
Cleaning up list of fastest mirrors
[root@localhost ~]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
local | 3.6 kB 00:00:00
(1/4): local/group_gz | 153 kB 00:00:00
(2/4): local/primary_db | 3.3 MB 00:00:00
(3/4): local/other_db | 1.3 MB 00:00:00
(4/4): local/filelists_db | 3.3 MB 00:00:00
Metadata Cache Created
要安装这个
[root@localhost ~]# yum install gcc -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package gcc.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: cpp = 4.8.5-44.el7 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpfr.so.4()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Processing Dependency: libmpc.so.3()(64bit) for package: gcc-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package cpp.x86_64 0:4.8.5-44.el7 will be installed
---> Package glibc-devel.x86_64 0:2.17-326.el7_9 will be installed
--> Processing Dependency: glibc-headers = 2.17-326.el7_9 for package: glibc-devel-2.17-326.el7_9.x86_64
--> Processing Dependency: glibc = 2.17-326.el7_9 for package: glibc-devel-2.17-326.el7_9.x86_64
--> Processing Dependency: glibc-headers for package: glibc-devel-2.17-326.el7_9.x86_64
---> Package libmpc.x86_64 0:1.0.1-3.el7 will be installed
---> Package mpfr.x86_64 0:3.1.1-4.el7 will be installed
--> Running transaction check
---> Package glibc.x86_64 0:2.17-317.el7 will be updated
--> Processing Dependency: glibc = 2.17-317.el7 for package: glibc-common-2.17-317.el7.x86_64
---> Package glibc.x86_64 0:2.17-326.el7_9 will be an update
---> Package glibc-headers.x86_64 0:2.17-326.el7_9 will be installed
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers-2.17-326.el7_9.x86_64
--> Processing Dependency: kernel-headers for package: glibc-headers-2.17-326.el7_9.x86_64
--> Running transaction check
---> Package glibc-common.x86_64 0:2.17-317.el7 will be updated
---> Package glibc-common.x86_64 0:2.17-326.el7_9 will be an update
---> Package kernel-headers.x86_64 0:3.10.0-1160.71.1.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
========================================================================================================
Package Arch Version Repository Size
========================================================================================================
Installing:
gcc x86_64 4.8.5-44.el7 local 16 M
Installing for dependencies:
cpp x86_64 4.8.5-44.el7 local 5.9 M
glibc-devel x86_64 2.17-326.el7_9 local 1.1 M
glibc-headers x86_64 2.17-326.el7_9 local 691 k
kernel-headers x86_64 3.10.0-1160.71.1.el7 local 9.1 M
libmpc x86_64 1.0.1-3.el7 local 51 k
mpfr x86_64 3.1.1-4.el7 local 203 k
Updating for dependencies:
glibc x86_64 2.17-326.el7_9 local 3.6 M
glibc-common x86_64 2.17-326.el7_9 local 12 M
Transaction Summary
========================================================================================================
Install 1 Package (+6 Dependent packages)
Upgrade ( 2 Dependent packages)
Total download size: 48 M
Downloading packages:
--------------------------------------------------------------------------------------------------------
Total 135 MB/s | 48 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Updating : glibc-2.17-326.el7_9.x86_64 1/11
Updating : glibc-common-2.17-326.el7_9.x86_64 2/11
Installing : mpfr-3.1.1-4.el7.x86_64 3/11
Installing : libmpc-1.0.1-3.el7.x86_64 4/11
Installing : cpp-4.8.5-44.el7.x86_64 5/11
Installing : kernel-headers-3.10.0-1160.71.1.el7.x86_64 6/11
Installing : glibc-headers-2.17-326.el7_9.x86_64 7/11
Installing : glibc-devel-2.17-326.el7_9.x86_64 8/11
Installing : gcc-4.8.5-44.el7.x86_64 9/11
Cleanup : glibc-2.17-317.el7.x86_64 10/11
Cleanup : glibc-common-2.17-317.el7.x86_64 11/11
Verifying : glibc-common-2.17-326.el7_9.x86_64 1/11
Verifying : glibc-2.17-326.el7_9.x86_64 2/11
Verifying : mpfr-3.1.1-4.el7.x86_64 3/11
Verifying : glibc-devel-2.17-326.el7_9.x86_64 4/11
Verifying : cpp-4.8.5-44.el7.x86_64 5/11
Verifying : glibc-headers-2.17-326.el7_9.x86_64 6/11
Verifying : gcc-4.8.5-44.el7.x86_64 7/11
Verifying : libmpc-1.0.1-3.el7.x86_64 8/11
Verifying : kernel-headers-3.10.0-1160.71.1.el7.x86_64 9/11
Verifying : glibc-2.17-317.el7.x86_64 10/11
Verifying : glibc-common-2.17-317.el7.x86_64 11/11
Installed:
gcc.x86_64 0:4.8.5-44.el7
Dependency Installed:
cpp.x86_64 0:4.8.5-44.el7 glibc-devel.x86_64 0:2.17-326.el7_9
glibc-headers.x86_64 0:2.17-326.el7_9 kernel-headers.x86_64 0:3.10.0-1160.71.1.el7
libmpc.x86_64 0:1.0.1-3.el7 mpfr.x86_64 0:3.1.1-4.el7
Dependency Updated:
glibc.x86_64 0:2.17-326.el7_9 glibc-common.x86_64 0:2.17-326.el7_9
Complete!
[root@localhost ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@localhost ~]# cd /usr/local/src/ffmpeg_sources/nasm-3.00rc12
[root@localhost nasm-3.00rc12]# ./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin"
====================================================
[root@localhost nasm-3.00rc12]# nasm -v
-bash: nasm: command not found
[root@localhost nasm-3.00rc12]# vi /etc/profile
添加这个到末尾 export PATH=$PATH:/usr/local/ffmpeg/bin'
使用 echo 命令(推荐)
这是最直接、最不容易出错的方法,尤其适合在脚本中使用。
bash
# 使用 echo 命令将内容追加到文件末尾
echo 'export PATH=$PATH:/usr/local/ffmpeg/bin' >> /etc/profile
让文件生效,使用source /etc/profile
===================================================================================
cd /usr/local/src/ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.bz2
tar -jxvf nasm-2.16.01.tar.bz2
cd nasm-2.16.01
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin"
make
make install
# Yasm
cd /usr/local/src/ffmpeg_sources
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin"
make
make install
2. 安装视频编码器
bash
# x264 (H.264 编码器)
cd /usr/local/src/ffmpeg_sources
curl -O -L https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
tar -jxvf x264-master.tar.bz2
cd x264-master
PKG_CONFIG_PATH="/usr/local/ffmpeg/lib/pkgconfig" ./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin" --enable-static
make
make install
cd /usr/local/src/ffmpeg_sources
curl -O -L http://ftp.videolan.org/pub/videolan/x265/x265_3.5.tar.gz
tar -zxvf 3.5.tar.gz
cd x265-3.5/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/local/ffmpeg" -DENABLE_SHARED=off ../../source
make
make install
3. 安装音频编码器
bash
# fdk-aac (高质量 AAC 编码器)
cd /usr/local/src/ffmpeg_sources
curl -O -L https://github.com/mstorsjo/fdk-aac/archive/refs/tags/v2.0.3.tar.gz
tar -zxvf v2.0.3.tar.gz
cd fdk-aac-2.0.3
autoreconf -fiv
./configure --prefix="/usr/local/ffmpeg" --disable-shared
make
make install
# LAME (MP3 编码器)
cd /usr/local/src/ffmpeg_sources
curl -O -L https://nchc.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar -zxvf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix="/usr/local/ffmpeg" --bindir="/usr/local/ffmpeg/bin" --disable-shared --enable-nasm
make
make install
备份并替换 epel.repo 文件
执行以下命令,它会用一个指向阿里云 EPEL 镜像的干净配置来替换你现有的 epel.repo 文件。
bash
# 1. 备份当前的 epel.repo 文件,以防万一
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.bak
# 2. 创建一个新的 epel.repo 文件,内容指向阿里云镜像
cat > /etc/yum.repos.d/epel.repo << 'EOF'
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
enabled=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
EOF
为什么这个方法能行?
固定 baseurl:我们直接写死了 baseurl,使用了国内速度飞快的阿里云镜像,避免了 yum 去解析可能出错的 metalink。
简化配置:这个配置非常简洁,yum 很容易处理,不会出错。
步骤 2:清理并重建缓存(关键!)
现在配置文件已经是最简洁可靠的版本了,我们必须再次清理旧的、可能已损坏的缓存。
bash
yum clean all
yum makecache
这次执行 yum makecache,你应该能看到 epel 源被成功处理,不再报错。
步骤 3:再次尝试安装
缓存重建成功后,yum 就可以从阿里云镜像中找到并下载软件包了。
bash
yum install -y meson ninja-build
./configure --prefix="/usr/local/ffmpeg" \
--pkg-config-flags="--static" \
--extra-cflags="-I/usr/local/ffmpeg/include" \
--extra-ldflags="-L/usr/local/ffmpeg/lib" \
--extra-libs="-lpthread -lm" \
--bindir="/usr/local/bin" \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libx264 \
--enable-libx265
# 1. 确认 PKG_CONFIG_PATH 环境变量正确,这能帮助 ffmpeg 找到你安装的库
export PKG_CONFIG_PATH="/usr/local/ffmpeg/lib/pkgconfig"
# 2. 运行 configure 命令 (已移除 opus和vpx)
./configure --prefix="/usr/local/ffmpeg" \
--pkg-config-flags="--static" \
--extra-cflags="-I/usr/local/ffmpeg/include" \
--extra-ldflags="-L/usr/local/ffmpeg/lib" \
--extra-libs="-lpthread -lm" \
--bindir="/usr/local/bin" \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libx264 \
--enable-libx265
# 3. 编译 (使用多线程加速,速度更快)
make -j$(nproc)
# 4. 安装
make install
# 5. 验证安装
echo "编译安装完成!正在验证..."
ffmpeg -version
echo "----------------------------------------"
echo "你编译的 ffmpeg 支持的编码器和解码器如下:"
echo "支持的音频编码器 (包含 fdk_aac, mp3lame):"
ffmpeg -encoders | grep -E "fdk_aac|mp3lame"
echo "----------------------------------------"
echo "支持的视频编码器 (包含 libx264, libx265):"
ffmpeg -encoders | grep -E "libx264|libx265"
总结
这就是最后的完整步骤了。执行完之后,你就会拥有一个功能强大的 ffmpeg
,它支持:
音频编码: AAC (via
libfdk-aac
), MP3 (vialibmp3lame
)视频编码: H.264 (via
libx264
), H.265/HEVC (vialibx265
)
虽然它不支持 Opus 音频和 VP8/VP9 视频,但对于绝大多数应用场景来说,这已经是一个非常实用和强大的组合了。