← All posts

如何用 FFmpeg 压缩视频

用 CRF、preset、codec 选择和分辨率缩放来压缩视频,画质和体积怎么权衡看这一篇。

FFHub·2026-03-03
如何用 FFmpeg 压缩视频

用 FFmpeg 压缩视频是不花钱缩文件的最快路子 —— CRF、preset、编码器选择、分辨率缩放,每一个都能精细控制画质和体积的平衡。下面是几种最常用的写法,全是能复制粘贴跑的命令。要更深入的编码原理,再看视频压缩最佳实践

Try it in your browser

把视频拖进来,选目标体积或画质,下载压缩好的文件。底下走的是同一套 FFmpeg 参数,不用装。

用 CRF 一行搞定

最快的压缩方式是 CRF(Constant Rate Factor,恒定质量因子)。值越小画质越好,体积越大;值越大画质越差,体积越小。

ffmpeg -i input.mp4 -crf 23 output.mp4
CRF 值画质用在哪
18接近无损归档
23不错(默认值)一般场景
28中等网络分享
32+较差体积优先

如果同时要换容器格式(比如 MKV → MP4),看格式转换指南

选哪个 codec

H.264 — 兼容性最好

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium output.mp4

H.265(HEVC)— 同画质体积小一半

H.265 在相同画质下体积大约能小 50%,代价是编码慢得多。

ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4

preset:拿编码时间换体积

preset 控制速度和压缩率的取舍。同样的 CRF,preset 越慢,压得越狠。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow output.mp4
Preset速度文件体积
ultrafast最快最大
fast较大
medium平衡平衡
slow较小
veryslow最慢最小

降分辨率

降分辨率是减体积最直接的办法:

# 缩到 720p
ffmpeg -i input.mp4 -vf "scale=-2:720" -crf 23 output.mp4

# 缩到 480p
ffmpeg -i input.mp4 -vf "scale=-2:480" -crf 23 output.mp4

-2 表示自动按比例算宽,并保证宽是 2 的倍数(很多 codec 要求)。

限制比特率

要做流媒体,或者对最终体积有硬要求,就给个最大码率:

ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M output.mp4

别忘了音频

音频也占体积,把音频码率压下来通常没什么感知损失:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

一条够用的命令

如果不想纠结,下面这条适用大多数场景:

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

输出是画质过关、体积明显变小的 MP4,几乎所有设备和平台都能播。

Try it in your browser

不想装 FFmpeg、不想让本机风扇起飞,把视频拖进 FFHub 选目标体积或画质即可。底下是同一套 FFmpeg 参数。

常见问题(FAQ)

压缩视频 CRF 用多少合适?

CRF 23 是 H.264 的默认值,也是通用 web 视频的安全选。要更高画质(归档或精品流媒体)用 CRF 18–20,要狠压(社交媒体、低带宽场景)用 CRF 26–28。H.265 的话相当于 H.264 + 5(H.265 的 CRF 28 ≈ H.264 的 CRF 23)。

FFmpeg 压视频不掉肉眼可见的画质能压多少?

H.264 配 CRF 18–23 + -preset medium,相机或录屏原文件一般能压到原来的 50%–80%,肉眼基本看不出差别。再切到 H.265 + CRF 28 还能再省 30–40%。具体比例看源 —— 已经被网压过的视频就没多少水分了。

H.264 和 H.265 选哪个?

同画质下 H.265 比 H.264 文件小 30%–40%,但编码时间慢 3–5 倍,播放支持也窄一些(Safari、现代手机有,部分浏览器和老设备没)。要兼容性拉满用 H.264,带宽和存储更值钱用 H.265。

想压到指定大小(比如 25MB 内)怎么办?

两遍码率编码(two-pass)。目标视频码率 = (目标体积比特数 - 音频体积) / 时长秒数。然后跑两遍:第一遍分析复杂度,第二遍按分析结果分配码率。比如 10 分钟视频压到 100MB + 128k 音频,目标视频码率约 1.2 Mbps。

我压完反而变大了?

通常 3 种情况之一:(1) 源已经被压过,你又用了低 CRF(18–20)变相提画质了;(2) 用 H.265 这种慢编码器配了 fast preset,效率没出来;(3) 不小心放大了分辨率。先 ffprobe input.mp4 看源参数,CRF 不要试图"超过"源画质。

FFmpeg 最快的压缩方式?

-c:v libx264 -preset ultrafast -crf 28。比 -preset medium 快约 5 倍但同画质下文件大 2–3 倍。适合做 proxy、草稿、一次性转换。正式交付还是回 medium 或 slow。

延伸阅读

如何用 FFmpeg 压缩视频 | FFHub