halfsize / 邮件附件
视频压到能发邮件
Gmail 卡在 25 MB,Outlook 和很多企业邮箱卡在 20 MB。 更麻烦的是:对方收到的附件,比硬盘上的文件大约大三成。这里把账算清楚,再给一条能过的命令。
没人算的那 33%
SMTP 是文本协议,二进制附件要 base64 编码:每 3 个字节变成 4 个。一个 19 MB 的 MP4,在邮件里大约是 25 MB。很多邮箱是按编码后的整封邮件算大小的,不是按你拖进去的文件。
这就是为什么「明明不到 20 MB」还是被退信。上限 25 MB,文件就该压到 18 MB 左右;上限 20 MB,压到 14–15 MB。
记一个系数:附件大小 ≈ 文件大小 × 1.37。按「上限 ÷ 1.37」压,就不用再担心。
一条命令
$ npx halfsize 旅行.mp4 --to 18mb
target 18.0 MB
plan H.264 1280x720 2.19 Mbps audio 128 kbps 2-pass
scale 1920x1080 → 1280x720
output 旅行.18mb.mp4
214 MB → 17.62 MB 小 12 倍 比目标小 2.1%
VMAF 87.4 SSIM 0.968 轻微变软
--for email 直接按 18 MB 算,已经替 Gmail 留出 base64 的份额;--for outlook 按 15 MB 算,对应 20 MB 的邮件上限。要自己定就加 --to。
画质会变成什么样
一分钟的片子 18 MB,视频码率大约 2.2 Mbps。720p 够用,1080p 就显得紧,所以工具会主动降分辨率,而不是把 1080p 饿死。60 秒 1080p30、源 18 Mbps 的实测:
| 目标 | 输出 | 分辨率 | VMAF | 结论 |
|---|---|---|---|---|
| 18 MB | 17.62 MB | 1280×720 | 87.4 | 轻微变软 |
| 15 MB | 14.71 MB | 1280×720 | 86.2 | 轻微变软 |
| 10 MB | 9.77 MB | 960×540 | 82.9 | 轻微变软 |
VMAF 取片中位置和原片对比。90 以上「看着一样」,80–90「轻微变软」,70–80 能看出损失。
还是被退信怎么办
有些服务器限的是整个邮箱,或者不管设置如何,附件超过 10 MB 就拦。这种情况不要继续硬压,改发链接:
- 把压好的文件放到你已有的网盘,邮件里发链接。
- 同一个公司内网的话,共享盘永远比邮件靠谱。
- 对方要原片时,用文件传输服务发源文件,附件只放压缩版预览。
为什么不用在线压缩
因为要发邮件的视频,往往正是最私密的那些:身份证扫描、合同讲解、孩子演出、还没发布的产品演示。为了省两分钟,把它传到靠广告支撑的服务器上,不划算。halfsize 在你自己电脑上跑 FFmpeg:不上传、免注册、无额度、无水印。不想敲命令也可以用本地网页版:
$ npx halfsize --web
halfsize web UI on http://127.0.0.1:4174
常见问题
Gmail 到底能发多大?
按编码后的整封邮件算 25 MB,也就是文件大约 18 MB。用 Google Drive 链接不占这个额度,但对方需要有权限。
为什么 Outlook 拒收 20 MB 的文件?
base64 编码后已经超过 20 MB。压到 14–15 MB,或者直接问对方 IT 真实上限。
能保留 1080p 吗?
可以,加 --no-downscale。但一分钟 18 MB 的 1080p 会比 720p 更软。先用 --dry-run 看看两种方案。
对方需要装软件吗?
不需要。输出是标准 H.264 + AAC 的 MP4,带 +faststart,手机和邮箱客户端都能直接播。
免费吗?
免费。MIT 协议,没有付费版,也不要账号。