I’ve gathered the necessary information. Here’s the article you requested:
CentOS FFmpeg 教程:安装与使用详解
引言
FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎任何人类和机器创建的媒体文件。它支持大多数现有的媒体格式,包括视频、音频、图像以及字幕。无论您是需要进行视频格式转换、音频提取、视频剪辑,还是更复杂的媒体处理任务,FFmpeg 都是一个不可或缺的强大工具。
本教程将详细介绍如何在 CentOS 系统上安装和使用 FFmpeg,涵盖通过 RPM Fusion 仓库安装的简便方法以及从源代码编译的自定义方法,并提供常见的使用示例。
一、安装前准备
在安装 FFmpeg 之前,您需要确保系统已更新,并安装必要的工具。
-
以 root 用户身份登录或使用
sudo:
所有安装命令都需要管理员权限。“`bash
sudo su – # 切换到root用户或者在每个命令前加上 sudo
“`
-
更新系统:
确保您的 CentOS 系统是最新的。bash
sudo yum update -y # CentOS 7
sudo dnf update -y # CentOS 8
二、安装 FFmpeg
在 CentOS 上安装 FFmpeg 主要有两种方法:通过 RPM Fusion 仓库安装(推荐)和从源代码编译。
方法一:通过 RPM Fusion 仓库安装 (推荐)
对于大多数用户来说,通过 RPM Fusion 仓库安装是最简单、最推荐的方式。RPM Fusion 提供了预编译的 FFmpeg 包,易于管理和更新。
-
安装 EPEL (Extra Packages for Enterprise Linux) 仓库:
RPM Fusion 依赖于 EPEL 仓库。-
CentOS 7:
bash
sudo yum install epel-release -y -
CentOS 8 / RHEL 8:
bash
sudo dnf -y install https://download.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum-config-manager --enable powertools # 启用 powertools 仓库,可能需要
-
-
安装 RPM Fusion 仓库:
RPM Fusion 分为free和nonfree两个部分。FFmpeg 通常包含在free仓库中。-
CentOS 7:
bash
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm -y -
CentOS 8 / RHEL 8:
bash
sudo dnf localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm -y
sudo dnf install --nogpgcheck https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm -y # 安装 nonfree 仓库以支持更多非开源解码器
-
-
安装 FFmpeg 及开发包:
仓库启用后,即可安装 FFmpeg 及其开发库。-
CentOS 7 (使用
yum):
bash
sudo yum install ffmpeg ffmpeg-devel -y -
CentOS 8 / RHEL 8 (使用
dnf):
bash
sudo dnf -y install ffmpeg ffmpeg-devel
-
-
验证安装:
检查 FFmpeg 版本以确认安装成功。bash
ffmpeg -version
您应该会看到 FFmpeg 的版本信息和配置选项。
方法二:从源代码编译 FFmpeg (适用于需要最新版本或自定义配置的用户)
从源代码编译 FFmpeg 可以让您获得最新版本的功能,并根据需要启用或禁用特定的编解码器和库。这种方法更复杂,需要安装大量开发工具和依赖库。
-
安装必要的开发工具和库:
这些是编译软件所必需的。bash
sudo yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel -y
如果您使用的是 CentOS 8,请将yum替换为dnf。 -
为源代码创建工作目录:
建议在一个单独的目录中管理源代码。bash
mkdir ~/ffmpeg_sources
cd ~/ffmpeg_sources -
编译并安装依赖库 (示例: Yasm, libx264, libfdk-aac):
FFmpeg 依赖于许多外部库来实现不同的编解码功能。您需要单独编译这些库。以下是几个常见示例,您可以根据需要添加更多(如libmp3lame用于 MP3 编码)。-
Yasm (汇编器):
bash
cd ~/ffmpeg_sources
git clone --depth 1 git://github.com/yasm/yasm.git
cd yasm
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install
make distclean -
libx264 (H.264 视频编码器):
bash
cd ~/ffmpeg_sources
git clone --depth 1 git://git.videolan.org/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
make distclean -
libfdk-aac (AAC 音频编码器):
bash
cd ~/ffmpeg_sources
git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean
-
-
编译 FFmpeg:
安装完所需的依赖库后,即可编译 FFmpeg 本身。bash
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--pkg-config-flags="--static" \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libx264
make -j$(nproc) # 使用多核编译以加速
make install
make distclean
hash -r
注意:--enable-libfdk-aac和--enable-libx264选项只有在您之前编译并安装了这些库时才应包含。您可以根据您安装的其他库添加更多--enable-libXXX选项。 -
更新 PATH 环境变量:
为了让系统能够找到新编译的ffmpeg命令,您可能需要将 FFmpeg 的安装路径添加到PATH环境变量中。将其添加到您的~/.bashrc或~/.profile文件中:bash
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc -
验证安装:
bash
ffmpeg -version
这将显示您刚刚编译的 FFmpeg 版本信息。
三、FFmpeg 的基本使用
FFmpeg 的命令结构通常是 ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ...。
-
查看 FFmpeg 版本和配置信息:
bash
ffmpeg -version -
查看支持的编解码器:
bash
ffmpeg -encoders # 查看所有编码器
ffmpeg -decoders # 查看所有解码器
ffmpeg -formats # 查看所有格式 -
获取媒体文件信息:
查看视频或音频文件的详细信息,包括时长、码率、编解码器、分辨率等。bash
ffmpeg -i input.mp4
注意:此命令将输出大量信息,并尝试转码。如果要仅查看信息而不转码,可以使用-hide_banner和-v quiet -stats或直接退出。
更推荐的获取信息方式(避免输出日志到标准输出):
bash
ffmpeg -i input.mp4 -hide_banner
四、FFmpeg 常见使用示例
以下是一些 FFmpeg 的常见用途和命令示例。
-
视频格式转换:
将input.mp4转换为output.avi。bash
ffmpeg -i input.mp4 output.avi
指定编码器 (例如,使用libx264编码为 H.264 视频和aac编码为 AAC 音频):bash
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4 -
提取视频中的音频:
从input.mp4中提取音频并保存为audio.mp3。bash
ffmpeg -i input.mp4 -vn audio.mp3
*-vn禁用视频录制。 -
从视频中提取图片:
在视频的第10秒处截取一张图片。bash
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 output.jpg
*-ss指定开始时间。
*-vframes 1表示只输出一帧。每隔X秒截取一张图片:
bash
ffmpeg -i input.mp4 -vf fps=1/10 output_%03d.png # 每10秒截取一张图片 -
剪切/截取视频片段:
从input.mp4的第 30 秒开始,截取 10 秒钟的视频,并保存为clip.mp4。bash
ffmpeg -i input.mp4 -ss 00:00:30 -t 00:00:10 -c copy clip.mp4
*-ss指定开始时间。
*-t指定持续时间。
*-c copy表示直接复制流,不进行重新编码,速度快且无质量损失(如果格式允许)。 -
调整视频分辨率:
将input.mp4调整为 1280×720 分辨率,并保存为output_720p.mp4。bash
ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4 -
添加水印或覆盖图片:
在视频左上角添加watermark.png作为水印。bash
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermarked.mp4
*overlay=10:10表示水印在 (10, 10) 坐标处。 -
合并视频文件:
首先创建一个包含所有要合并视频文件路径的文本文件 (例如mylist.txt):
file 'input1.mp4'
file 'input2.mp4'
file 'input3.mp4'
然后运行合并命令:bash
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output_merged.mp4
总结
FFmpeg 是一个功能极其强大的工具,掌握其安装和基本使用对于任何处理多媒体文件的用户都大有裨益。无论您选择通过 RPM Fusion 仓库进行快速安装,还是从源代码编译以获取最新功能和自定义配置,本教程都为您提供了详细的步骤。通过实践这些常见的命令示例,您将能够高效地完成各种视频和音频处理任务。随着您对 FFmpeg 的深入了解,您会发现它能实现的功能远不止于此,其灵活性和强大功能将极大提升您的媒体处理效率。