x264 preset 调优:ultrafast vs slow 的速度与体积权衡

2026-07-21

你大概用 ffmpeg 转过不少视频。-c:v libx264 -crf 23 顺手就写上去了,剩下的参数让 ffmpeg 自己决定。绝大多数人都是这样。但如果你会遇到编码太慢、文件太大、或者推流卡顿的问题,你可能需要认真看一眼 -preset 这个参数。

这篇文章拿实测数据说话,讲清楚 preset 到底是什么,快慢之间差多少,以及什么时候该用哪个。

x264 的 10 个预设

FFmpeg 中的 libx264 提供了 10 个 preset,从快到慢:

ultrafast → superfast → veryfast → faster → fast → medium → slow → slower → veryslow → placebo

medium 是 ffmpeg 的默认值,也是通用平衡点。往左更快、文件更大,往右更慢、文件更小。

关键认知:相同 CRF 下,所有 preset 的视觉质量完全一致。慢 preset 不是让画质变好,而是花更多时间找更高压缩率的方案。

实测数据:快慢之间差多少

以下数据基于 1 分钟 1080p 视频、CRF 23、8 核 CPU 的基准测试:

Preset 速度 编码时间 文件体积 对比 medium
ultrafast ~120 fps ~15s ~95 MB +58%
superfast ~90 fps ~20s ~80 MB +33%
veryfast ~70 fps ~25s ~70 MB +17%
faster ~55 fps ~33s ~65 MB +8%
fast ~42 fps ~43s ~62 MB +3%
medium ~30 fps ~60s ~60 MB 基准
slow ~15 fps ~2 min ~52 MB -13%
slower ~8 fps ~3.5 min ~50 MB -17%
veryslow ~4 fps ~7.5 min ~48 MB -20%

三组关键对比:

  • ultrafast → medium:速度差 4 倍,文件大 58%
  • medium → slow:速度慢 2 倍,文件小 13% — 这是最佳性价比区间
  • slow → veryslow:速度慢 3.75 倍,文件只小 7% — 边际递减严重

场景化选择

推流/直播 → -preset ultrafast -tune zerolatency
编码速度必须跟上帧率,延迟越低越好。文件大小无所谓。

批量处理几十段视频 → -preset veryfast
每段省 30 秒,累积下来就是几十分钟。文件大 17% 可以接受。

日常通用 → -preset medium(默认)
如果没遇到问题,默认就是对的。

归档/一次编码长期存储 → -preset slow
花一次时间把体积压到最小,长期省存储空间。从 medium 到 slow 的 13% 节省是最划算的。

极致压缩 → -preset veryslow(但不推荐经常用)
上传带宽极其有限的时候考虑,但要接受 7.5 分钟的编码时间比 medium 的 1 分钟翻了好几倍。

preset 背后到底调了什么

每个 preset 是一组参数的集合。主要影响这几个:

  • subme:亚像素估计精度,数值越高越花时间找最佳匹配
  • me:运动估计算法,dia(快)→ hex → umh(慢但准)
  • ref:参考帧数,越多压缩率越高,解码内存需求也大
  • bframes:B 帧数,允许更多帧间参考
  • trellis:最终量化前的精细优化

举例,ultrafast 的 subme=0、me=dia、ref=1、bframes=0,几乎不做任何优化。slow 的 subme=9、me=umh、ref=5、bframes=3,做了大量分析工作。

踩坑记录

placebo 是陷阱

新手看到「最高预设」觉得肯定最好。实际上 placebo 和 veryslow 几乎没有区别(体积好不到 1%),但慢 3-5 倍。

placebo ≈ veryslow,但慢得多。别用。

编码膨胀:preset 和 profile 要一起看

ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast -profile:v baseline output.mp4

这段命令能把原始 HEVC 128MB 的视频膨胀到 813MB,6.3 倍。根因是 Baseline profile 禁用了 CABAC 和 B 帧,再配合 ultrafast 的极简参数,压缩率降到最低。

正确做法:能 -c copy 就 copy。必须重编码时用 -profile:v high -tune film。如果目标平台只能 Baseline,做好体积预期。

默认 medium 不是万能的

推流用 medium → 编码跟不上帧率。归档用 medium → 文件比 slow 大 10-15%。批量处理用 medium → 速度不够快。

按场景主动选 preset,不要让默认帮你选。

速查总结

场景 preset tune CRF
实时推流 ultrafast zerolatency 23-25
批量处理 veryfast 按内容 23
日常通用 medium 按内容 23
最佳性价比 slow film/animation 18-21
长期归档 slower film 18-20
极致压缩 veryslow film 17-19
placebo

preset + tune + profile 三要素配合,比单独选 preset 重要得多。知道区别、按场景选,比永远用默认值好得多。

标签: ffmpeg x264 video coding