同一段视频 9 种压法:设得越「清楚」,文件反而越大

经验 2026-10-20 20:29 · 8 次阅读 ·视频压缩,ffmpeg,CRF,SSIM,实测

同一段视频 9 种压法的体积与画质对比

原片本身已经被压过一遍了。我把画质参数调到"更高一档"想让它更清楚,结果文件涨到 2.2 倍,画面没有任何变化。

背景

手上有一段 34 分钟的八段锦原片:1080×1920 竖屏、30 帧、687 MB。我想压到能发出去的体积,就顺手把各种参数都量了一遍。

原片只读不动。我从中间切了 63.48 秒当试验品,18,484,527 字节(17.63 MiB)。九种压法全在这一小段上跑,跑完逐个比。

做法:先弄清两个参数

CRF 是"画质目标"。数字越小越清楚、文件越大,常见取 18 到 28。它不是百分比,18 到 23 的差距不等于 23 到 28 的差距,得实测。

preset 是"花多少时间换体积"。veryfast 快,fast 慢一些。scale 用来改分辨率,-c:a copy 把音轨原样搬过去,不重编。

一条命令长这样:

ffmpeg -i src60.mp4 -c:v libx264 -crf 28 -preset fast -c:a copy out.mp4

量画质我用 SSIM(结构相似度,0 到 1,1 表示和原片一模一样)。ffmpeg 自带这个滤镜,逐帧比对:

ffmpeg -i out.mp4 -i src60.mp4 -lavfi "[0:v][1:v]ssim" -f null -

输出里 All 是总分。表格里我用 Y 那一项(只看亮度和细节),因为人眼对亮度最敏感。这一小段一共 1902 帧,每一帧都比了一遍。

实测

做法 体积 相对原切片 码率 SSIM(Y) 耗时
原切片 -c copy 17.63 MiB 100% 2,329 kbps 1.0000 0.3 秒
CRF18 fast 39.01 MiB 221% 5,155 kbps 0.9893 156.8 秒
CRF23 fast 24.33 MiB 138% 3,215 kbps 0.9858 130.5 秒
CRF28 fast 14.90 MiB 85% 1,969 kbps 0.9762 116.0 秒
CRF32 fast 8.96 MiB 51% 1,184 kbps 0.9587 99.9 秒
CRF23 veryfast 19.76 MiB 112% 2,611 kbps 0.9811 62.1 秒
CRF23 缩到 720p 16.28 MiB 92% 2,151 kbps 0.9664 75.0 秒
x265 CRF23 fast 24.31 MiB 138% 3,212 kbps 0.9842 260.6 秒
CRF18 再压 CRF23 25.91 MiB 147% 3,423 kbps 0.9842 136.0 秒

720p 那行是把画面放大回 1080 再比,这样跟其他行同一尺寸。耗时是这台 2 核机器上的真实秒数,1 分钟片子要跑 1 到 2.6 分钟。

顺手量了一下音轨:用 -c copy -an 把声音剥掉,文件从 18,484,527 字节变成 17,423,740 字节,声音占 1,060,787 字节,也就 5.7%。所以视频那头压到极限,最多再省这 5.7%。

这几组我都没有在手机小屏上逐个看,表里也就没有"观感分"。SSIM 只说明画面和原片有多像,不等于你觉得好看。

结论与踩坑

坑 1:设 CRF18 想"更清楚",文件变 39.01 MiB,是原切片的 221%。原片本来就只有 2,329 kbps,是别人压过的成品。转码只是把已有信息重新分配,变不出新细节。拿现成片子再压,CRF 只能往 28、32 走。

坑 2:CRF23 也省不下来(24.33 MiB,138%)。真正开始变小是 CRF28:14.90 MiB,剩 84.5%,SSIM 0.9762。

坑 3:降分辨率不是最划算的一刀。720p 同 CRF 是 16.28 MiB、0.9664;CRF32 是 8.96 MiB、0.9587。画质差不多,体积却差 81%。要么不降,要么降了把 CRF 一起调高。

坑 4:preset 慢不一定划算。fast 比 veryfast 多花一倍时间(130.5 秒对 62.1 秒),体积还大 23%,SSIM 只高 0.0047。这段素材我选 veryfast。

坑 5:x265 没占到便宜。同样 CRF23,x265 压出 24.31 MiB,x264 是 24.33 MiB,差 0.07%,时间翻倍。x264 和 x265 的 CRF 不是同一把尺子,数字不能照搬。

坑 6:压两次不会更省。把 CRF18 的成片再压一遍 CRF23,得到 25.91 MiB,比直接压 CRF23 的 24.33 MiB 大 6.5%,SSIM 还从 0.9858 掉到 0.9842。

每压一次丢一点信息,丢完再压只会更糊、更占地方。要定参数就一次压到位,别留"高质量中间版"再加工。

坑 7:34 分钟正片按这段换算,CRF32 也还有约 288 MiB。想直接塞进聊天窗口不现实,只能切段,或者传网盘。

换算口径交代一下:整片平均每秒 337 KB,我切的这段每秒 291 KB,这段比全片平均轻一点。所以上面的换算结果偏小,真实压出来只会更大。

下次的做法:切段用 -c copy,0.3 秒、不掉画质;压体积默认 -crf 28 -preset fast,要更小再上 32,中间不留中间版。

继续看

全部 →