FFmpeg 入门指南:音视频处理的瑞士军刀
FFmpeg 是一个功能强大的命令行工具,就像音视频处理界的瑞士军刀。它可以帮你完成各种任务,比如:
- 转码: 将视频从一种格式转换成另一种格式。
- 混流: 将多个音视频流合并成一个文件。
- 添加字幕: 给视频加上字幕。
- 剪辑: 剪切、合并视频片段。
本章将带你入门 FFmpeg,先从安装开始,然后介绍一些视频的基本概念。
1. 安装 FFmpeg(Windows 篇)
本节以 Windows 系统为例,介绍如何安装 FFmpeg。
下载 FFmpeg:
- 推荐前往 FFmpeg 官方推荐的 Windows 编译版本下载页面 (gyan.dev)。
- 也可以在 FFmpeg 官网下载页 选择其他编译版本。
- 建议: 下载
release
版本,并且组件标记为full
的版本,功能更完整。
解压文件:
- 下载完成后,将压缩包解压到你电脑的某个位置,例如
C:\FFmpeg
。 - 注意: 如果你之前安装过 FFmpeg,可以直接覆盖到旧版本的文件夹。
- 下载完成后,将压缩包解压到你电脑的某个位置,例如
配置环境变量:
将 FFmpeg 的安装路径添加到系统的
Path
环境变量中。 这样,你就可以在命令行中直接使用ffmpeg
命令了。如何添加 Path 环境变量?
- 在 Windows 搜索栏中搜索 "环境变量",选择 "编辑系统环境变量"。
- 点击 "环境变量" 按钮。
- 在 "系统变量" 中找到名为 "Path" 的变量,选中它,然后点击 "编辑"。
- 点击 "新建",然后输入你的 FFmpeg 安装路径(例如
C:\FFmpeg
)。 - 一路点击 "确定" 保存设置。
验证安装:
- 打开命令提示符 (CMD)。
- 输入
ffmpeg
命令,然后按回车。 - 如果成功安装,你应该能看到 FFmpeg 的版本信息。
shellffmpeg
- 问题: 如果
ffmpeg
命令调用了其他地方的 FFmpeg 版本,怎么办?- 解决: 将你刚安装的 FFmpeg 路径在
Path
环境变量列表中移动到更靠前的位置,这样 Windows 会优先找到这个版本。
- 解决: 将你刚安装的 FFmpeg 路径在
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 支持的像素格式:
shellffmpeg -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 等主流编码器的平均压缩比。
- H.264: 上一代最流行的视频编码格式,由
常用的音频编码格式:
- 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 输出。
- MP3: 仍然是最流行的有损音频编码格式。 由