Skip to content

FFmpeg 入门指南:音视频处理的瑞士军刀

FFmpeg 是一个功能强大的命令行工具,就像音视频处理界的瑞士军刀。它可以帮你完成各种任务,比如:

  • 转码: 将视频从一种格式转换成另一种格式。
  • 混流: 将多个音视频流合并成一个文件。
  • 添加字幕: 给视频加上字幕。
  • 剪辑: 剪切、合并视频片段。

本章将带你入门 FFmpeg,先从安装开始,然后介绍一些视频的基本概念。

1. 安装 FFmpeg(Windows 篇)

本节以 Windows 系统为例,介绍如何安装 FFmpeg。

  1. 下载 FFmpeg:

  2. 解压文件:

    • 下载完成后,将压缩包解压到你电脑的某个位置,例如 C:\FFmpeg
    • 注意: 如果你之前安装过 FFmpeg,可以直接覆盖到旧版本的文件夹。
  3. 配置环境变量:

    • 将 FFmpeg 的安装路径添加到系统的 Path 环境变量中。 这样,你就可以在命令行中直接使用 ffmpeg 命令了。

    • 如何添加 Path 环境变量?

      1. 在 Windows 搜索栏中搜索 "环境变量",选择 "编辑系统环境变量"。
      2. 点击 "环境变量" 按钮。
      3. 在 "系统变量" 中找到名为 "Path" 的变量,选中它,然后点击 "编辑"。
      4. 点击 "新建",然后输入你的 FFmpeg 安装路径(例如 C:\FFmpeg)。
      5. 一路点击 "确定" 保存设置。
  4. 验证安装:

    • 打开命令提示符 (CMD)。
    • 输入 ffmpeg 命令,然后按回车。
    • 如果成功安装,你应该能看到 FFmpeg 的版本信息。
    shell
    ffmpeg
    • 问题: 如果 ffmpeg 命令调用了其他地方的 FFmpeg 版本,怎么办?
      • 解决: 将你刚安装的 FFmpeg 路径在 Path 环境变量列表中移动到更靠前的位置,这样 Windows 会优先找到这个版本。

2. 视频基础概念:新手扫盲

在学习 FFmpeg 命令之前,我们先来了解一些视频文件的基本概念。 注意: 以下解释为了方便理解,可能不够严谨。

  • 流 (Stream): 视频文件由不同的流组成,最常见的有:

    • 视频流: 包含视频画面信息。

    • 音频流: 包含声音信息。

    • 字幕流: 包含字幕文本信息(通常在 MKV 文件中)。

      • 注意: 有些视频的字幕是直接嵌入到视频流中的(内嵌字幕),这种情况下就没有单独的字幕流,也无法提取字幕文件。
    • 码率/比特率 (Bitrate): 衡量视频/音频数据量的指标。码率越高,数据量越大,通常质量也越好。 例如,128kbps 的 MP3 音频听起来通常比 64kbps 的 MP3 音频更好。

    • 分流/混流 (Mux/Demux):

      • 分流: 从视频文件中提取出视频流、音频流、字幕流等。
      • 混流: 将多个流合并到一个视频文件中。
    • 容器 (Container): 可以简单理解为视频文件的扩展名,例如 MP4、MKV、AVI 等。

  • 编码/解码 (Encode/Decode):

    • 编码: 将视频/音频按照某种格式或规范压缩并存储。
    • 解码: 将编码后的视频/音频按照相应的格式或规范还原出来。
    • 例子: H.264 是一种常见的视频编码规范,libx264 是一个常用的 H.264 编码器。

2.1 色深与色度采样:色彩的秘密

  • 色深 (Bit Depth):

    • 类似于图片中的颜色分级。
    • 8-bit 色深是最常见的,它将颜色分为 256 级(2的8次方)。
    • 现在 10-bit 色深逐渐普及,能表现更丰富的色彩。
  • 色度采样 (Chroma Sampling):

    • 为了减小视频文件的大小,视频在录制或编码时,通常会记录每个像素的亮度信息,但只采样部分像素的颜色信息。

    • YCrCb: 一种常用的色彩空间,Y 表示亮度,Cr 和 Cb 表示颜色信息(红色和蓝色的偏移量)。

    • 表示方法: 通常使用 x:y:z 的格式来表示色度采样,例如 4:2:0。

      • 4:2:0: 在 4x2 的像素区域中,亮度信息全部记录,但只采样了 2 个像素的颜色信息,丢失了 75% 的颜色信息。
      • 4:2:2: 采样了 4x2 像素区域中 4 个像素的颜色信息,丢失了 50% 的颜色信息。
      • 4:4:4: 所有像素的颜色信息全部记录,没有颜色信息的损失。
    • 查看 FFmpeg 支持的像素格式:

      shell
      ffmpeg -pix_fmts

2.2 常见编码格式:视频界的 "方言"

FFmpeg 支持几乎所有主流的编码格式。

  • 常用的视频编码格式:

    • H.264: 上一代最流行的视频编码格式,由 libx264 编码器支持。
    • H.265 (HEVC): H.264 的继任者,在相同画质下,文件体积可以比 H.264 小 50%。 由 libx265 编码器支持。
    • VP9: 谷歌开发的编码格式,主要用于 Youtube 平台。
    • AV1 (AOMedia Video 1): 一种免版税的编码格式,基于 VP9 技术,压缩率很高。 由 libsvtav1 (以及 libaom-av1) 编码器支持。

    图片: AV1、x265、VP9 等主流编码器的平均压缩比。

  • 常用的音频编码格式:

    • MP3: 仍然是最流行的有损音频编码格式。 由 libmp3lame 编码器支持。
    • AAC: MP3 的继任者,常用于 MKV 视频文件的音频流。
      • aac: FFmpeg 原生提供的 AAC 编码器,适合低码率音频。
      • libfdk_aac: 用于制作高质量 AAC 音频。
    • AC3: 杜比数字格式。 编码器 ac3 (Dolby Digital) 或 eac3 (Dolby Digital Plus)。
    • FLAC: 常用的无损音频格式。 FFmpeg 有原生的 flac 编码器支持。
    • PCM: WAV 容器中最常见的音频编码格式。 FFmpeg 默认使用 pcm_s16le 编码器来处理 PCM 输出。