halfsize

halfsize / 20 MB

把视频压到刚好 20 MB

邮件附件、报名表、企业门户、Discord、微信,很多东西都卡在 20 MB。 这条命令专门对付它:按目标大小反推码率,自动挑分辨率,然后告诉你画质掉了多少。

$ npx halfsize 视频.mp4 --to 20mb

  halfsize 0.1.5
  视频.mp4
  136 MB  60s  1920x1080  30.00 fps  h264

  target     20.0 MB
  plan       H.264  1280x720  2.46 Mbps  audio 128 kbps  2-pass
  scale      1920x1080 → 1280x720
  output     视频.20mb.mp4

  measuring quality                                        done in 8s

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

为什么不直接用在线压缩?

在线工具能用,直到你想起视频里有身份证、客户演示或者孩子的班级演出。为了省五分钟,把私人视频传到广告支撑的服务器上,不划算。

halfsize 在你自己电脑上跑 FFmpeg:不上传、免注册、无额度,断网也能用。代价是它是个命令行工具,不是按钮。所以它也带了一个本地网页界面:

$ npx halfsize --web
halfsize web UI on http://127.0.0.1:4174
halfsize 本地网页界面:压缩视频到目标大小并显示 VMAF 画质报告

界面由本机提供,文件不会被上传。

「刚好 20 MB」到底有多准

视频码率是变化的,编码器不可能在开始前承诺精确字节数。halfsize 会根据目标算出码率预算,扣掉音频和容器开销,编完再检查。实际会落在上限下方 1%–3%,这正是你要的:19.45 MB 到处都能过,20.01 MB 不行。

如果某个网站仍然拒收,就多留一点余量:

$ npx halfsize 视频.mp4 --to 19mb

哪些地方卡 20 MB

场景上限命令
微信聊天视频20 MB--for wechat
Discord 免费用户20 MB--for discord
WhatsApp 媒体16 MB--for whatsapp
多数邮箱附件20–25 MB--to 20mb
各类上传表单20 MB--to 20mb

上限会变。拿不准时,按表单写的数字再留一点余量。

20 MB 的画质够用吗

一分钟 1080p 视频,20 MB 扣掉音频后视频大约 2.4 Mbps。这个码率给 720p 够用,给 1080p 偏紧,所以工具会主动降分辨率。实测:

目标输出分辨率VMAF结论
20 MB19.45 MB1280×72088.3轻微变软
16 MB15.59 MB960×54084.8轻微变软
10 MB9.77 MB960×54082.9轻微变软

VMAF 90 以上看起来一样,80–90 轻微变软,70–80 能看出损失。

视频越长,分辨率只能越低。10 分钟压到 20 MB,视频码率只有 0.25 Mbps,工具会降到 360p 甚至 240p,并如实报告「能看出损失」。这不是 bug,是算术。在意画质就剪短。

常用参数

批量处理

$ npx halfsize 片头.mp4 演示.mp4 片尾.mp4 --to 20mb

  片头.mp4   →  片头.20mb.mp4    19.4 MB   VMAF 88.1
  演示.mp4   →  演示.20mb.mp4    19.6 MB   VMAF 86.7
  片尾.mp4   →  片尾.20mb.mp4    19.2 MB   VMAF 90.2

常见问题

免费吗?

免费。MIT 协议,没有付费版、水印或账号。

会上传文件吗?

不会。全部在本地完成,只有安装时会下载一次静态 FFmpeg。

为什么输出比 20 MB 小?

容器开销和码率波动很难精确预测,所以留了安全余量。想更贴近上限可以用 --to 20.4mb。

画质还能看吗?

工具会给出 VMAF、SSIM 和人话结论。一分钟视频压到 20 MB 的实测是 VMAF 88.3,属于轻微变软。

能压 1080p 吗?

加 --no-downscale 可以,但同码率下通常不如 720p。先用 --dry-run 看看方案。

不装 Node.js 能用吗?

命令行版通过 npm 分发,需要 Node.js 18+;FFmpeg 会自动处理。

分平台教程