CodeKitHub
日常工具

把视频压缩到精确的文件大小

最后更新:

这个工具通过计算所需的精确码率,并直接在浏览器中运行 ffmpeg(借助 ffmpeg.wasm)重新编码,把视频压缩到你指定的文件大小——8 MB、25 MB 或任意自定义数值,视频全程不会上传到任何服务器。计算遵循标准的视频编码公式(目标码率 = 目标大小 ÷ 时长),这也是 Handbrake 官方文档推荐用于受限大小编码的方法。如果你卡在 Discord 免费版 8 MB 的上传上限,用 8 MB 预设;如果邮件服务商拒绝了较大的附件,用 25 MB 预设(Gmail 的限制);其他情况,输入自定义目标大小即可。

工具介绍

目标大小视频压缩工具会以恰好能落在(或略低于)指定文件大小所需的码率重新编码视频,而不是用一个笼统的"画质"滑块去产生一个不可预测的大小。当限制是由别人定下的固定值时——比如 Discord 免费版的附件上限是 8 MB,大多数邮件服务商(包括 Gmail)的附件上限是 25 MB——而不是由视频观感决定,这种区别就很重要。

这个工具会测量视频时长,为目标大小计算总码率预算,将这份预算在视频流和音频流之间分配,然后用 ffmpeg.wasm——开源 FFmpeg 编码器的 WebAssembly 版本——完全在你的浏览器标签页内重新编码。没有任何内容被上传,编码过程发生在你自己的设备上。

为什么使用它?

  • 100% 本地运行:视频文件不会离开你的设备——不需要服务器上传,也不受任何主机存储配额的大小限制。
  • 针对真实场景的限制而设计:8 MB(Discord 免费版)和 25 MB(Gmail/大多数邮件服务商)都是一键预设,另外还有自定义大小输入框,适配任何其他限制。
  • 使用标准的"码率-来自-时长"公式,而不是凭猜测,并内置了安全余量,让实际输出很少超过你设定的目标。
  • 编码过程中有实时进度条——对较长的视频,ffmpeg.wasm 的处理可能需要一段时间,进度条能让你随时确认它在正常工作,而不是卡住了。
  • 压缩完成后会显示确切的输出大小,方便你在上传或添加到其他地方之前先确认是否满足限制。

使用方法

  1. 点击拖放区域(或直接把文件拖进去)加载你的视频——工具会先读取它的大小和时长。
  2. 选择一个目标:Discord 用 8 MB,邮件/Gmail 用 25 MB,或者输入以 MB 为单位的自定义大小。
  3. 点击"压缩视频"并观察进度条——编码在浏览器中进行,根据视频长度和设备性能,可能需要几秒到几分钟不等。
  4. 完成后,查看显示出来的输出大小,然后点击"下载"。

示例

输入

clip.mp4 — 42 MB,时长 0:35

输出

clip-8MB.mp4 — 7.6 MB

目标设为 8 MB(Discord);工具为这段 35 秒的片段计算出约 1.5 Mbps 的视频码率,加上 10% 的安全余量进行编码,最终结果稳稳落在限制以内。

目标码率是如何计算的

核心公式很简单:总码率(kbps)= 目标文件大小(千比特)÷ 时长(秒)。工具会先给字节预算加上大约 10% 的安全余量,再减去预留给音频的码率(通常是 128 kbps,对于非常小的目标会降到 96 或 64 kbps,避免音频占用过多本就紧张的预算),从而得出视频码率。这个视频码率会同时以硬性上限(`-maxrate`)和缓冲区大小(`-bufsize`)的形式传给 ffmpeg 的编码器,防止短时间的复杂运动画面让码率突破目标。

有一个单位换算的细节,对精确使用这些预设的人很重要:Discord "8 MB" 这类平台上传限制,一般指的是二进制兆字节(1 MB = 1,048,576 字节,有时也称 MiB),与存储和传输限制通常的表示方式一致。这个工具的字节预算计算刻意偏保守——目标预算采用更小、更严格的 1000 进制兆字节,并在此基础上再叠加安全余量——因此无论按哪种"MB"的理解方式,结果都能落在限制以内。

常见平台的目标大小怎么选

如果不确定该套用哪个限制,可以查看平台给出的错误提示——大多数附件大小相关的拒绝提示都会写明确切的上限,你可以直接把它输入到自定义目标里。

目标平台常见限制推荐目标
Discord(免费版)每个附件 8 MB8 MB 预设
Discord Nitro根据等级 50–100 MB自定义大小
Gmail / 大多数邮件服务商每封邮件 25 MB25 MB 预设
Slack(免费工作区)1 GB(但大文件会拖慢上传速度)如果确实需要,可用自定义大小

来自我们自己的测试

我们用命令行 FFmpeg 生成了一段合成测试片段(12 秒、1280×720、带音调音频,以约 800 kbps 编码,生成一个真实大小的多兆字节源文件),然后用这个工具以 8 MB 的 Discord 预设进行了压缩。输出结果如预期落在 8 MB 以内,证明了码率计算和安全余量在真实编码中同样成立,而不只是纸面公式。

常见问题

我的视频会被上传到什么地方吗?

不会。压缩过程使用 ffmpeg.wasm——FFmpeg 的 WebAssembly 构建版本,在你的浏览器标签页内执行。视频文件只在本地读取,从不发送到服务器——只要页面和它的引擎加载过一次,你甚至可以断网继续使用。

为什么第一次压缩要等一会儿才开始?

这是因为工具需要在你本次会话中第一次运行压缩时加载 ffmpeg.wasm 引擎(大约 30 MB)。加载完成后,同一页面上后续的压缩会立即开始。

输出结果一定会小于我设定的目标大小吗?

工具预留了安全余量(实际的码率预算大约瞄准你选定大小的 90%),因为真实编码器不可能让每一帧都精确命中同一个码率。极少数情况下,如果输出仍然略微超出,可以选一个更小的自定义目标来增加余量——如果发生这种情况,工具会给出提示。

为什么 Discord 用的是 8 MB?

Discord 的免费(非 Nitro)版本把每个附件的上传上限设为 8 MB;Nitro 订阅用户根据等级不同可以获得更高的上限(50 MB 或 100 MB)。8 MB 预设瞄准的正是大多数人会遇到的免费版限制。

为什么邮件用的是 25 MB?

25 MB 是 Gmail 的附件上限,也是其他主流邮件服务商普遍采用的上限值。如果你的服务商限制不同,用自定义大小输入框即可。

压缩会损害视频画质吗?

会,而且是必然的——把文件压缩到远小于原始大小,意味着更低的码率,这会减少细节,并可能在快速运动或高细节场景中出现明显的压缩伪影。工具会自动选择视频与音频之间的码率分配方案,尽量在目标大小允许的范围内保持最高画质,但一段 42 MB 的片段硬压到 8 MB,看起来肯定会比原片明显发糊。

输出的是什么视频和音频格式?

输出始终是 MP4 容器,配 H.264 视频编码和 AAC 音频编码——这是 Discord、邮件客户端和大多数社交平台都能广泛兼容的组合。

相关工具