把视频压进任意大小限制。
一条命令。它先算出码率,挑一个真正塞得下的分辨率,编码两遍,最后用 VMAF 和 SSIM 测一遍,告诉你画质到底掉了多少。全程在你自己的电脑上完成。
$ 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 轻微变软
专治你真正会撞上的限制
你可以直接写目标大小,也可以只写平台名,让它自己挑上限。
精确到目标大小
两遍 ABR,按目标字节数和真实时长反推码率,不靠反复试。
自动选分辨率
从原分辨率一档档往下试,挑出这些比特能撑住的最大画面。
给出证据,不靠感觉
三个采样点算 SSIM,中点算 VMAF,再翻译成一句人话结论。
文件不上传
本地 FFmpeg、本地文件、免账号、无额度。网页界面也跑在本机。
它怎么工作
- 探测。读取时长、分辨率、帧率、音频码率、旋转信息和 HDR 标记。
- 算预算。总码率 = 目标字节 × 8 ÷ 时长,再减掉音频和容器开销。
- 选分辨率。按每像素比特数目标(H.264 0.072 bpp,H.265 0.045 bpp)挑最大的一档。
- 编码两遍。
libx264或libx265,yuv420p、AAC、+faststart。 - 证明。采样测量,给出 VMAF、SSIM 和一句结论。
各档大小到底损失多少画质
同一个 60 秒 1080p 视频,默认设置,在普通笔记本上实测:
| 目标 | 输出 | 分辨率 | 视频码率 | VMAF | 结论 |
|---|---|---|---|---|---|
| 20 MB | 19.45 MB | 1280×720 | 2.46 Mbps | 88.3 | 轻微变软 |
| 16 MB | 15.59 MB | 960×540 | 1.94 Mbps | 84.8 | 轻微变软 |
| 10 MB | 9.77 MB | 960×540 | 1.17 Mbps | 82.9 | 轻微变软 |
| 5 MB | 4.93 MB | 640×360 | 0.55 Mbps | 72.0 | 能看出损失 |
源片:60 秒、1920×1080、30fps、18 Mbps H.264(136 MB)。VMAF 在中间点对着源片测量,SSIM 取三个采样点。实际数字随内容变化。
为什么看 VMAF?它是 Netflix 提出的感知质量指标,比 PSNR 或「码率多少」更接近人眼判断。它不是魔法,但比「相信我」靠谱得多。
不想敲命令?有网页界面
npx halfsize --web 会在本机启动一个网页应用。拖进视频、选个目标大小,就能看到压缩方案和画质报告。地址是 127.0.0.1,视频不会离开这台电脑。
真实运行:23.2 MB → 1.99 MB(小 12 倍),VMAF 84.4,比目标小 0.4%。
分平台教程
微信 — 20 MB
别再让微信把你的视频二次压成一团糊。
任意 20 MB 限制
邮件、报名表、企业门户,凡是卡 20 MB 的地方。
Discord — 20 MB
免费用户单个文件上限,一条命令压进去。
WhatsApp — 16 MB
先压到限制以内,再让它做那一点点二次压缩。
常见问题
视频会被上传到服务器吗?
不会。编码和测量都在本地用 FFmpeg 完成,免账号、无额度,装好之后断网也能用。
需要自己装 FFmpeg 吗?
不用。首次安装会自动下载静态版本;下载失败时会退回使用系统里已有的 FFmpeg。
能保持原分辨率吗?
可以,加 --no-downscale。但同样的比特分给更多像素,画面通常会更软。
Windows 能用吗?
能。Windows、macOS、Linux 都支持,只需要 Node.js 18+。
可以写进脚本吗?
可以。--json 输出机器可读结果,--dry-run 只打印方案不编码。
真的免费吗?
MIT 协议,没有付费版。如果它帮你省了时间,点个 star 能让更多人找到它。