halfsize

把视频压进任意大小限制。

一条命令。它先算出码率,挑一个真正塞得下的分辨率,编码两遍,最后用 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、本地文件、免账号、无额度。网页界面也跑在本机。

它怎么工作

  1. 探测。读取时长、分辨率、帧率、音频码率、旋转信息和 HDR 标记。
  2. 算预算。总码率 = 目标字节 × 8 ÷ 时长,再减掉音频和容器开销。
  3. 选分辨率。按每像素比特数目标(H.264 0.072 bpp,H.265 0.045 bpp)挑最大的一档。
  4. 编码两遍。libx264 或 libx265,yuv420p、AAC、+faststart。
  5. 证明。采样测量,给出 VMAF、SSIM 和一句结论。

各档大小到底损失多少画质

同一个 60 秒 1080p 视频,默认设置,在普通笔记本上实测:

目标输出分辨率视频码率VMAF结论
20 MB19.45 MB1280×7202.46 Mbps88.3轻微变软
16 MB15.59 MB960×5401.94 Mbps84.8轻微变软
10 MB9.77 MB960×5401.17 Mbps82.9轻微变软
5 MB4.93 MB640×3600.55 Mbps72.0能看出损失

源片:60 秒、1920×1080、30fps、18 Mbps H.264(136 MB)。VMAF 在中间点对着源片测量,SSIM 取三个采样点。实际数字随内容变化。

为什么看 VMAF?它是 Netflix 提出的感知质量指标,比 PSNR 或「码率多少」更接近人眼判断。它不是魔法,但比「相信我」靠谱得多。

不想敲命令?有网页界面

npx halfsize --web 会在本机启动一个网页应用。拖进视频、选个目标大小,就能看到压缩方案和画质报告。地址是 127.0.0.1,视频不会离开这台电脑。

halfsize 本地网页界面:把 23.2 MB 的视频压到 1.99 MB,VMAF 84.4

真实运行: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 能让更多人找到它。