CentOS FFmpeg 教程:安装与使用详解 – wiki词典

I’ve gathered the necessary information. Here’s the article you requested:


CentOS FFmpeg 教程:安装与使用详解

引言

FFmpeg 是一个领先的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎任何人类和机器创建的媒体文件。它支持大多数现有的媒体格式,包括视频、音频、图像以及字幕。无论您是需要进行视频格式转换、音频提取、视频剪辑,还是更复杂的媒体处理任务,FFmpeg 都是一个不可或缺的强大工具。

本教程将详细介绍如何在 CentOS 系统上安装和使用 FFmpeg,涵盖通过 RPM Fusion 仓库安装的简便方法以及从源代码编译的自定义方法,并提供常见的使用示例。

一、安装前准备

在安装 FFmpeg 之前,您需要确保系统已更新,并安装必要的工具。

  1. 以 root 用户身份登录或使用 sudo
    所有安装命令都需要管理员权限。

    “`bash
    sudo su – # 切换到root用户

    或者在每个命令前加上 sudo

    “`

  2. 更新系统
    确保您的 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 包,易于管理和更新。

  1. 安装 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 仓库,可能需要

  2. 安装 RPM Fusion 仓库
    RPM Fusion 分为 freenonfree 两个部分。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 仓库以支持更多非开源解码器

  3. 安装 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

  4. 验证安装
    检查 FFmpeg 版本以确认安装成功。

    bash
    ffmpeg -version

    您应该会看到 FFmpeg 的版本信息和配置选项。

方法二:从源代码编译 FFmpeg (适用于需要最新版本或自定义配置的用户)

从源代码编译 FFmpeg 可以让您获得最新版本的功能,并根据需要启用或禁用特定的编解码器和库。这种方法更复杂,需要安装大量开发工具和依赖库。

  1. 安装必要的开发工具和库
    这些是编译软件所必需的。

    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

  2. 为源代码创建工作目录
    建议在一个单独的目录中管理源代码。

    bash
    mkdir ~/ffmpeg_sources
    cd ~/ffmpeg_sources

  3. 编译并安装依赖库 (示例: 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

  4. 编译 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 选项。

  5. 更新 PATH 环境变量
    为了让系统能够找到新编译的 ffmpeg 命令,您可能需要将 FFmpeg 的安装路径添加到 PATH 环境变量中。将其添加到您的 ~/.bashrc~/.profile 文件中:

    bash
    echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
    source ~/.bashrc

  6. 验证安装
    bash
    ffmpeg -version

    这将显示您刚刚编译的 FFmpeg 版本信息。

三、FFmpeg 的基本使用

FFmpeg 的命令结构通常是 ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ...

  1. 查看 FFmpeg 版本和配置信息
    bash
    ffmpeg -version

  2. 查看支持的编解码器
    bash
    ffmpeg -encoders # 查看所有编码器
    ffmpeg -decoders # 查看所有解码器
    ffmpeg -formats # 查看所有格式

  3. 获取媒体文件信息
    查看视频或音频文件的详细信息,包括时长、码率、编解码器、分辨率等。

    bash
    ffmpeg -i input.mp4

    注意:此命令将输出大量信息,并尝试转码。如果要仅查看信息而不转码,可以使用 -hide_banner-v quiet -stats 或直接退出。
    更推荐的获取信息方式(避免输出日志到标准输出):
    bash
    ffmpeg -i input.mp4 -hide_banner

四、FFmpeg 常见使用示例

以下是一些 FFmpeg 的常见用途和命令示例。

  1. 视频格式转换
    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

  2. 提取视频中的音频
    input.mp4 中提取音频并保存为 audio.mp3

    bash
    ffmpeg -i input.mp4 -vn audio.mp3

    * -vn 禁用视频录制。

  3. 从视频中提取图片
    在视频的第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秒截取一张图片

  4. 剪切/截取视频片段
    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 表示直接复制流,不进行重新编码,速度快且无质量损失(如果格式允许)。

  5. 调整视频分辨率
    input.mp4 调整为 1280×720 分辨率,并保存为 output_720p.mp4

    bash
    ffmpeg -i input.mp4 -vf scale=1280:720 output_720p.mp4

  6. 添加水印或覆盖图片
    在视频左上角添加 watermark.png 作为水印。

    bash
    ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermarked.mp4

    * overlay=10:10 表示水印在 (10, 10) 坐标处。

  7. 合并视频文件
    首先创建一个包含所有要合并视频文件路径的文本文件 (例如 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 的深入了解,您会发现它能实现的功能远不止于此,其灵活性和强大功能将极大提升您的媒体处理效率。


滚动至顶部