我用AI工具写了一个在线压缩视频图片的工具站

0 阅读3分钟

  前段时间靠 AI 编程工具打了下手、利用业余时间,做了个在线文件压缩的小站——FileMate(filemate.cn

  一句话介绍:图片和视频都能"压到指定大小"——比如把报名照压到 100KB、把微信视频压到 25M,填个数字,一次到位。

  这篇主要聊聊它做了啥,以及"压到指定大小"这个核心功能背后是怎么实现的。

指定大小.png

压缩后.png

一、起因

  自己先被这事烦到了:平时做点事情的时候要上传图、视频,但是要求照片视频有不能那么大,手机拍的动辄好几兆;微信发视频又卡在 25M 发不出去。

  找了一圈现成工具,总有别扭的地方——要么只能"智能压缩",压到多少算多少,压不到你要的那个精确数字;要么限制源文件不能过大;要么得下载安装软件;要么满屏广告、还强制注册。干脆自己撸一个干净的。

二、它能干嘛

  • 压到指定大小(核心卖点):填个目标 KB / MB,它自动平衡画质和尺寸去逼近,一次压到位。这是和 TinyPNG 那类"智能压缩"最大的区别——后者压不到你指定的那个数。
  • 图片、视频都能压:JPG / PNG / MP4 / MOV 都支持,不像很多工具只做图片。
  • 免安装、免注册:网页打开就能用,电脑手机都行。
  • 文件用完即焚:压缩完源文件自动删除、不留存,压缩后的文件可以自己手动删除,或者过期自动清除,压证件照这类敏感图也放心。
  • 中英双站:中文 filemate.cn、英文 filemate.net

三、"压到指定大小"是怎么实现的(重点)

  这块是整个站最有技术含量的地方,思路是**"二分逼近 + 兜底降分辨率"**,图片和视频分开处理。

图片:

  • JPEG:用 mozjpeg 的 cjpeg,在质量区间 [20, 95] 上做二分查找,找到"体积 ≤ 目标(留 2% 容差)且画质最高"的那个质量值;
  • PNG:用 pngquant,在 [5, 95] 区间二分;
  • 如果质量压到最低还超标,就按 0.8 倍逐步降分辨率,最多几轮,直到达标为止。

视频(ffmpeg):

  • 先由目标体积反推码率:扣掉音频(96kbps)和容器开销(约 3%),再乘一个安全系数(0.94);
  • bpp(bits per pixel)判断画面会不会糊:低于阈值(0.055)就先按比例缩放分辨率(缩放系数 clamp 在 0.35~0.98,长宽取偶数,否则 yuv420p 编码会失败);
  • 压完仍超标就再迭代一轮。

几个真实样本的实测效果:

  • JPEG:246KB → 29.7KB(目标 30KB)
  • PNG:1.16MB → 180KB(目标 200KB)
  • 视频:652MB → 23MB(目标 25MB)

一个小细节:如果源文件本来就比目标小,直接原样返回、不压,避免"越压越大"。

四、技术栈

  • 后端:Spring Boot + MyBatis-Plus + MySQL + Redis,文件存腾讯云 COS,压缩工具链是 ffmpeg / mozjpeg / pngquant;
  • 前端:Vue 3 + Vite + Element Plus + Pinia,中英双语 i18n 是一套扁平 key 方案;
  • 部署:一台云服务器 + Nginx,配置全走环境变量,敏感信息不进代码库。

五、一点感受

  • AI 确实把"从 0 到能上线"的门槛拉低了很多,一个人利用业余时间也能把全栈小站做完;
  • 但真正花时间的从来不是写 CRUD,而是这些细节:压到指定大小要兼顾画质、视频码率反推、大文件分片上传、过期清理、SEO……
  • 代码 AI 能帮你写大半,可"这功能到底好不好用",还得自己一遍遍地试。

六、地址

  FileMate:filemate.cn(电脑手机都能打开,免费、免注册)

  做出来就是给人用的,欢迎体验。有 bug 或者建议,评论区告诉我,会持续迭代。