CentOS FFmpeg命令大全与实用案例 – wiki大全

CentOS FFmpeg命令大全与实用案例

引言

FFmpeg 是一套领先的开源多媒体框架,能够对音频、视频、字幕及其他多媒体内容进行录制、转换、流化等多种处理。无论您是需要进行简单的格式转换,还是复杂的视频编辑和流媒体推送,FFmpeg 都是一个功能极其强大且灵活的命令行工具。本文将详细介绍如何在 CentOS 系统上安装 FFmpeg,并提供一系列从基础到高级的命令大全和实用案例。


在 CentOS 上安装 FFmpeg

由于许可证原因,FFmpeg 通常不包含在 CentOS 的官方核心仓库中。我们需要借助 EPEL (Extra Packages for Enterprise Linux) 和 RPM Fusion 这两个第三方仓库来完成安装。

适用于 CentOS 7

  1. 安装 EPEL 和 RPM Fusion 仓库:
    “`bash
    # 安装 EPEL
    sudo yum install -y epel-release

    安装 RPM Fusion

    sudo yum localinstall –nogpgcheck -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm
    “`

  2. 安装 FFmpeg:
    bash
    sudo yum install -y ffmpeg ffmpeg-devel

  3. 验证安装:
    bash
    ffmpeg -version

适用于 CentOS 8/9 Stream

  1. 安装 EPEL 和 RPM Fusion 仓库:
    “`bash
    # 启用 CRB (CodeReady Builder) / powertools
    sudo dnf config-manager –set-enabled crb
    # for CentOS 8 Stream, use ‘powertools’
    # sudo dnf config-manager –set-enabled powertools

    安装 EPEL

    sudo dnf install -y epel-release

    安装 RPM Fusion

    sudo dnf install –nogpgcheck -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
    “`

  2. 安装 FFmpeg:
    bash
    sudo dnf install -y ffmpeg ffmpeg-devel

  3. 验证安装:
    bash
    ffmpeg -version


FFmpeg 基础命令语法

FFmpeg 的命令结构非常灵活,其基本格式如下:

ffmpeg [全局选项] [输入文件选项] -i [输入文件] [输出文件选项] [输出文件]

  • -i: 指定输入文件。
  • -c: 指定编解码器,如 -c:v (视频编码器) 和 -c:a (音频编码器)。
  • -vf: 视频滤镜,用于处理视频帧。
  • -af: 音频滤镜,用于处理音频样本。
  • -ss: 指定开始时间(例如 00:01:23.00083 (秒))。
  • -t: 指定持续时间。
  • -to: 指定结束时间。

命令大全与实用案例

1. 信息查询与格式转换

查看媒体文件信息

在进行任何操作之前,首先查看文件的详细信息(编码格式、分辨率、比特率等)是一个好习惯。

bash
ffmpeg -i input.mp4

视频格式转换

这是 FFmpeg 最常见的用途之一。FFmpeg 会根据输出文件的扩展名自动选择合适的封装格式。

“`bash

将 MP4 转换为 WebM

ffmpeg -i input.mp4 output.webm

将 MOV 转换为 MP4,同时指定视频编码为 H.264,音频编码为 AAC

ffmpeg -i source.mov -c:v libx264 -c:a aac output.mp4
“`

音频格式转换

“`bash

将 MP3 转换为 OGG

ffmpeg -i audio.mp3 audio.ogg

从视频中提取音频并保存为 MP3

ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3
“`

  • -vn: 表示忽略视频流。
  • -q:a 2: 设置 MP3 的可变比特率质量(0-9,值越低质量越高)。

2. 视频编辑与处理

剪辑视频

“`bash

从第 10 秒开始,剪辑 15 秒时长的视频

ffmpeg -i input.mp4 -ss 10 -t 15 output.mp4

指定开始和结束时间点进行剪辑

ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:30 -c copy output.mp4
“`

  • -c copy: 如果输入和输出格式相同,此选项会直接复制流,不进行重新编码,速度极快且无质量损失。

合并多个视频

如果视频的编码格式、分辨率等参数都相同,可以使用 concat demuxer 来快速合并。

  1. 创建一个名为 filelist.txt 的文本文件,内容如下:
    file 'video1.mp4'
    file 'video2.mp4'
    file 'video3.mp4'

  2. 执行合并命令:
    bash
    ffmpeg -f concat -safe 0 -i filelist.txt -c copy merged_video.mp4

调整视频尺寸(缩放)

“`bash

将视频分辨率缩放为 1280×720

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

保持宽高比,只指定宽度

ffmpeg -i input.mp4 -vf scale=640:-1 output_640w.mp4
“`

改变视频播放速度

“`bash

将视频播放速度加倍

ffmpeg -i input.mp4 -vf “setpts=0.5*PTS” fast_video.mp4

将视频播放速度减半

ffmpeg -i input.mp4 -vf “setpts=2.0*PTS” slow_video.mp4
“`

3. 音视频流处理

移除音频或视频

“`bash

移除视频中的音频(静音视频)

ffmpeg -i input.mp4 -an mute_video.mp4

从视频中移除视频,只保留音频

ffmpeg -i input.mp4 -vn audio_only.aac
“`

  • -an: (Audio No) 禁用音频。

添加/替换音频

“`bash

将一个独立的音轨合并到视频中

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest final_video.mp4
“`

  • -shortest: 使输出文件的时长与最短的输入流对齐。

4. 图像处理与生成

从视频中提取图片

“`bash

每秒提取一帧图片

ffmpeg -i input.mp4 -r 1 frame_%04d.png

在指定时间点精确提取单帧图片

ffmpeg -i input.mp4 -ss 00:00:05.500 -vframes 1 single_frame.jpg
“`

  • -%04d: 表示输出文件名将以4位数字序列命名(如 frame_0001.png)。

将图片序列合成为视频

假设你有一系列名为 img001.jpg, img002.jpg, img003.jpg… 的图片。

“`bash

以每秒 24 帧的速度将图片序列合成为视频

ffmpeg -framerate 24 -i img%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
“`

  • -pix_fmt yuv420p: 指定像素格式,以确保在大多数播放器上的兼容性。

5. 高级实用案例

视频压缩

在保持可接受画质的前提下减小文件大小。CRF (Constant Rate Factor) 是最推荐的方式。

“`bash

使用 H.264 编码进行压缩,CRF 值范围为 0-51,值越小质量越高,文件越大。23 是一个很好的默认值。

ffmpeg -i input.mp4 -c:v libx264 -crf 25 compressed_video.mp4
“`

添加水印

“`bash

在视频右上角添加图片水印

ffmpeg -i input.mp4 -i watermark.png -filter_complex “overlay=main_w-overlay_w-10:10” watermarked_video.mp4
“`

  • overlay=main_w-overlay_w-10:10: main_w 是主视频宽度, overlay_w 是水印宽度。W-w-10 计算出x坐标(右边距10px),10 是y坐标(上边距10px)。

创建 GIF 动图

“`bash

从视频的第 3 秒开始,截取 5 秒内容制作高质量 GIF

ffmpeg -i input.mp4 -ss 3 -t 5 -vf “fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse” animation.gif
“`

这条命令比较复杂,它首先生成一个优化的调色板,然后用它来创建色彩更丰富的 GIF。


结论

FFmpeg 是一个功能深不可测的工具箱。本文仅仅涵盖了其众多功能中的冰山一角。掌握 FFmpeg 的关键在于理解其语法结构和丰富的滤镜系统。当您遇到特定的多媒体处理需求时,查阅其官方文档(ffmpeg -hffmpeg -h full)或在线社区,几乎总能找到解决方案。希望这篇指南能为您在 CentOS 上使用 FFmpeg 提供一个坚实的起点。

滚动至顶部