halfsize

halfsize / Windows

Windows 11 没有「压缩到 20 MB」

在资源管理器里几乎什么都能右键,唯独没有「把这个视频变成 20 MB」。系统自带的工具都是按画质档位 压的,而「指定体积」是另一个问题;其中还有一个压根不是压缩。

Windows 11 到底给了什么

工具对视频做了什么能指定大小吗
资源管理器 → 压缩为 ZIP什么也没做:MP4 本来就已经压缩过不能
照片 → 编辑 / 裁剪裁剪后另存,码率不变不能
Clipchamp 导出按 480p / 720p / 1080p 预设重编码不能
Office「压缩媒体」只影响插进文档里的片子,而且是画质档位不能
FFmpeg(winget 安装)按算出来的码率做两遍编码能
halfsize(封装 FFmpeg)同上,另外给你实测画质分数能

ZIP 那一行值得单独说清楚,因为它是绝大多数人第一个尝试的东西:视频已经是熵编码过的数据, 通用压缩几乎找不到可删的冗余。40 MB 的片子打成 zip 还是 40 MB,只是多花了一秒。

Clipchamp 是真会压缩,但它转的旋钮是分辨率,不是字节预算。一段 20 分钟的 1080p 录屏导出 720p, 出来可能是 300 MB 也可能是 90 MB,取决于画面内容;你没法要求「就给我 20 MB」。

Windows 不会替你算的那道题

体积上限会换算成码率:MB × 8000 ÷ 秒数,再减掉音频和封装开销。按 20 MB、 128 kbps 音轨、2% 开销算:

片长20 MB 留给视频的码率够用来做什么
15 秒10.3 Mbps舒服的 1080p
30 秒5.1 Mbps不错的 1080p
1 分钟2.5 Mbps720p
2 分钟1.2 Mbps720p,或干净的 540p
5 分钟395 kbps540p,低运动
10 分钟133 kbps幻灯片区

视频码率低于 80 kbps 左右,就没有哪个编码器还能压出「视频」的样子了。这是预算的性质,不是编码器的。

那条命令,在 PowerShell 里

先用 winget 装一次 FFmpeg:

> winget install Gyan.FFmpeg

然后跑两遍。第一遍只分析片子、写日志,不产出视频,所以输出到 NUL——这是 Windows 的空设备, 并且必须带上 -f mp4 FFmpeg 才肯接受。下面是 60 秒的片子压到 20 MB,所以视频码率取 2480 kbps:

> ffmpeg -y -i "假期.mp4" -c:v libx264 -preset medium -b:v 2480k -pass 1 -passlogfile ffpass -an -f mp4 NUL

> ffmpeg -i "假期.mp4" -c:v libx264 -preset medium -b:v 2480k -pass 2 -passlogfile ffpass -c:a aac -b:a 128k -movflags +faststart "假期.20mb.mp4"

两个容易踩的点:路径有空格一定要加引号(PowerShell 会正常传过去),并且第二遍必须读和第一遍同一个日志名。 第二点,第一遍要加 -an:音频在两遍之间没有变化,编两遍纯属浪费时间。

这条命令的前提是片长足够短,2.48 Mbps 还能看。十分钟的片子同样 20 MB 就是 133 kbps, 输出也会诚实地长成那个样子——命令照样能跑,只是它变不出比特来。

为什么结果还是会差一点

两遍 ABR 控制的是整段的平均值。有激烈场景的片子会在那里超、在别处省,总量只是接近,不是精确; 封装还要再加一点。实务上的答案是瞄低 3–5%,下面这个工具就是这么做的。

一条命令的版本

> npx halfsize 假期.mp4 --to 20mb --dry-run

  target     20.0 MB
  plan       H.264  1280x720  2.46 Mbps  audio 128 kbps  2-pass
  scale      1920x1080 → 1280x720
  estimate   19.3 MB

> npx halfsize 假期.mp4 --to 20mb

  136 MB  →  19.45 MB   小 7 倍   比目标小 2.7%
  VMAF 88.3   轻微变软

--dry-run 才是最值得学走的部分,哪怕你继续手写 FFmpeg:它在编码之前的十秒钟里, 就把码率和「这个预算能撑住哪一档分辨率」打印出来。同样 20 MB,选 720p 还是硬撑 1080p, 就是清晰和发软的区别。

不需要全局安装,npx 第一次跑完就会缓存。想长期用就 npm install -g halfsize。

别叠压缩器。如果这段视频接下来还要发微信或 WhatsApp,就一次压到那个软件能接受的大小, 不要压两遍。第二遍才是你看得见的那一遍。

常见问题

打成 zip 会变小吗?

不会。MP4 已经是压缩数据,zip 只能省不到 1%。压缩成 ZIP 是给文档用的。

系统自带功能能指定大小吗?

不能。照片只能裁剪,Clipchamp 只能选分辨率预设,Office 只压文档里的内嵌媒体。要精确到字节只能两遍编码,也就是 FFmpeg 或它的封装。

为什么还是超过目标?

两遍 ABR 控的是平均值,激烈画面会超。留 3–5% 余量,或者用会复测、超标重编一次的工具。

NUL 还是 /dev/null?

Windows 的空设备是 NUL,前面要加 -f mp4;macOS / Linux 用 -f mp4 /dev/null。

Windows 10 能用吗?

能。FFmpeg 命令和 halfsize 完全一样,只有照片和 Clipchamp 那两行不同。

相关