无论你是视频创作者、后期工程师,还是仅仅想压缩一个网络视频,都无法回避视频编码。我们永远在画质、文件体积和编码时间这“不可能三角”中寻求最佳平衡。
本文记录在使用 FFmpeg 处理视频时,对核心的两个参数——CRF 与 Preset 的研究和学习过程,并通过一个真实工作流案例,聊聊如何选择最佳编码参数。
三句话知全文
Preset(预设) = 时间换效率:用slow预设花更多时间,换取更高的压缩效率 (同样画质下体积更小)。CRF(恒定速率因子) = 质量换体积:用更低的CRF值设定更高的画质目标,代价是更大的文件体积。最佳实践:先根据你愿意等待的时间选择Preset,再通过调整CRF来精确控制你想要的画质和体积。
1. 核心概念:CRF 与 Preset 的角色分工
首先,我们必须明确这两个参数各自掌管什么。
Preset (预设):编码的“努力程度”
它控制编码算法的复杂度和分析深度,直接决定了编码所需的时间和压缩效率。
fast 系列 (ultrafast, veryfast, faster,fast): 算法简单,分析粗略。- 优点: 编码速度极快。缺点: 压缩效率低。要达到同等画质,需要更大的文件体积(码率)。
slow 系列 (slow, slower, veryslow): 算法复杂,分析精细。- 优点: 压缩效率高。可以用更小的文件体积达到同等画质。缺点: 编码速度极慢。
一句话总结:
Preset是“时间换空间”的调节器。你愿意花多少时间,来换取多高的压缩效率。
CRF (恒定速率因子):成品的“质量目标”
它告诉编码器你期望的最终视觉质量水平,直接决定了最终的画质和文件体积。
- CRF 值越低: 画质目标越高,视觉损失越少 → 文件体积越大。CRF 值越高: 画质目标越低,允许的损失越多 → 文件体积越小。CRF 对编码时间的直接影响远小于 Preset
一句话总结:
CRF是“画质与体积”的平衡杆。你想要多好的画质,就得接受多大的体积。
2. 一个比喻:预算与装修策略
要理解 CRF 和 Preset 的精髓,想象你在装修房子:
CRF 是你的“装修总预算”,假设普通水平值是 23,这也是crf的默认值:
-crf 18 就像说:“给我一个豪华精装,预算很充足!”-crf 28 就像说:“给我一个简约够用就行,预算很有限。”Preset 是你的“施工团队”,假设普通团队是medium水平,这也是preset的默认值:
slow / slower 是一个精明的专家团队。他们会精打细算,把每一分预算(比特)都花在最影响视觉效果的“刀刃”上,用有限的钱办漂亮的事。fast / veryfast 是一个粗放的赶工队。他们干活飞快,但为了速度会浪费材料,导致很多预算(比特)被花在不必要的地方,最终效果可能不尽如人意。由此得出关键推论(主要针对生成“最终成品”的场景):
低 CRF + 慢 Preset (高预算 + 专家团队) = 理想组合。预算被高效利用,以合理的体积实现极佳画质。
低 CRF + 快 Preset (高预算 + 赶工队) = 浪费组合。最终文件体积巨大,但画质却因算法粗糙而可能存在瑕疵。(注:这个“浪费”是相对的,在某些场景下反而是明智之举,详见下文案例。)
高 CRF + 慢 Preset (低预算 + 专家团队) = 不划算组合。预算已经限制了品质上限,请再好的团队也无法突破天花板,却白白付出了漫长的时间。
高 CRF + 快 Preset (低预算 + 赶工队) = 经济型组合。预算低干活快用时短,不太在意质量只想快速预览时的最佳组合。
3. 实战:一个真实工作流的演进
理论最终要服务于实践。下面是一个的真实案例,展示了如何在不同阶段做出明智的参数选择。
案例:我需要将一个长视频裁剪成几百个短片段,每个片段进行特效变速处理,最后再拼接成片,配上音频字幕后输出。
这个工作流清晰地分为两个阶段:① 处理中间文件 和 ② 输出最终成品。
阶段一:中间文件 —— 速度至上,保真为王
- 核心需求: 质量损失必须最小化以避免“代际损失”(多次压缩导致画质劣化);同时片段数量多,处理速度必须快;临时文件的体积可以很大。优先级排序: 速度 > 质量保真 > 体积
我的探索之旅:
最初尝试: -crf 13 -preset slower
- 思路: 用极低的 CRF 保证画质,用
slower 保证压缩效率。问题: 理论完美,现实残酷。slower 让处理成百上千个片段的时间成本变得无法接受。为无需长期存储的临时文件追求极致压缩率,是典型的本末倒置。思路转变: -crf 16 -preset veryfast
- 思路: 用
veryfast 保证速度,用低 CRF 保证质量。新的担忧: 正如 FFmpeg 文档所指出的,veryfast 会禁用大量优化算法。即使码率(由低CRF带来)再高,也可能因算法粗糙导致边缘锯齿等瑕疵。画质损失是否会过大?最终决策: -crf 13 -preset veryfast (暴力美学方案)
- 思路: 这是对上一个方案的极致优化。既然担心
veryfast 的算法会降低画质,那就把 CRF 降到更低的 13,用海量的码率(比特)来强制弥补算法的不足。结果: 这是一个妥协的权衡。它接受了“文件体积巨大”作为代价,换取了“极快的速度”和“极高的质量保真”。在这个场景下,它可能是最优解。阶段二:输出最终成品 —— 画质、体积、时间的终极平衡
- 核心需求: 在保证出色画质的前提下,尽可能控制文件体积,同时编码时间不能过长。优先级排序: 画质 ≈ 体积 > 时间
我的最终选择: -crf 22 -preset fast
- 分析: 这是一个务实的组合。
CRF 22:比默认值 23 的画质基准线略高一档,视觉效果很好。Preset fast:比默认值 medium 的编码速度更快,节省了时间。这个组合在画质、体积、编码时间三者之间取得了平衡,适合绝大多数日常交付场景。如果对结果不满意,如何微调?
目标:更高画质
- 方案A (简单粗暴): 降低 CRF 至
18-20。画质显著提升,但体积会大幅增加。方案B (精打细算): 降低 CRF 至 18-20,同时将 preset 从 fast 改为 slower。画质提升的同时,体积增长更温和,但代价是编码时间急剧增加。目标:更小体积
- 方案A (简单粗暴): 提高 CRF 至
24-26。体积显著减小,但画质会有可见损失。方案B (精打细算): 提高 CRF 至 24-26,同时将 preset 改为 slow 或 slower。在同等体积下,能获得比 fast preset 更好的画质,但代价是漫长的等待。目标:更快速度
- 方案: 保持 CRF 不变,将
preset 从 fast 改为 veryfast 或 ultrafast。编码时间大幅缩短,但代价是画质略微降低和体积明显增加。4. 速查表:你的场景化参数指南
根据以上理论与实战,我整理了这份覆盖绝大多数场景的参数速查表 (以 x264 编码器为例)。
| 核心需求/场景 | 推荐 CRF | 推荐 Preset | 关键特征与说明 |
|---|---|---|---|
| 中间/代理文件(速度与保真优先) | 13–16 | veryfast / fast | 目标是快速生成高质量临时素材。接受巨大体积,换取时间和质量保真。 |
| 专业级无损(绝对零损失) | -qp 0 | ultrafast | 真·无损,像素级还原。用于最严苛的专业流程。文件体积是所有方案中最大的。 |
| 母版级存档(不计成本追求质量) | 16–18 | slow / slower | 追求极致画质与压缩效率的平衡。用于视频的最终归档,编码时间极长。 |
| 高质量分享 (通用推荐)(画质与体积的平衡) | 19–22 | medium / slow | 最常用的组合。画质出色,体积可控,时间可接受。medium 是默认值,slow 是更优选择。 |
| 网络/移动端分发(优先考虑体积) | 23–25 | medium / slow | 在保证可接受画质的前提下,最大化压缩率。使用 slow 能在同等画质下获得更小体积。 |
| 快速预览/测试(速度压倒一切) | 26–30 | fast / veryfast | 仅用于快速查看效果,画质会有明显损失,但能在最短时间内生成结果。 |
5. 三步决策
当面临新的编码任务时,遵循以下步骤,快速找到最合适的参数:
第一步:明确目标 —— 我在做什么?
- 是中间过程吗?→ 优先考虑
fast 系列 preset,CRF 设为极低值 (如 16)。是最终成品吗?→ 进入第二步。第二步:评估耐心 —— 我愿意等多久?
- 很急/测试 →
fast / veryfast有耐心,日常使用 → medium (这是一个绝佳的起点)追求最佳效果,不赶时间 → slow / slower第三步:设定标准 —— 我想要多好的画质?
- 从你选择的
Preset 搭配 CRF 22 (x264) 开始,编码一小段视频预览。画质不满意? → 降低 CRF 值 (21, 20, 19...)。体积太大了? → 提高 CRF 值 (23, 24, 25...)。