视频太大发不出去?折腾了一周压缩方案,说点实际经验
上个月给客户做 demo 视频,手机拍的 4K 素材一个片段就 600MB,微信发不出去、邮箱附件超限、网盘上传又慢。折腾了一周试了七八种压缩方式,踩了不少坑,记录一下。
文件大小的决定因素
公式其实很简单:文件大小 ≈ 码率 × 时长 ÷ 8。一个 10 分钟的视频,50Mbps 码率就是 375MB,降到 20Mbps 就是 150MB。关键是怎么降码率又不让画质崩。
码率控制模式有三种。CBR 固定码率输出大小可预测,但画面复杂时糊成马赛克、简单时浪费带宽。VBR 可变码率好一些,复杂场景多分配码率、简单场景少分配。CRF 最实用——告诉编码器你想要多高质量,它自己调节码率。我一般用 CRF 23,画质基本看不出损失,体积能压到原来的 1/3。
编码格式的取舍
H.264 兼容性最好,几乎所有设备和浏览器都能硬解。H.265 同画质下码率少 30%-50%,但 Windows 上播放可能要装 HEVC 扩展。AV1 压缩率最高但编码慢得离谱。
个人做法:公开发布或发给客户一律用 H.264,免得对方打不开;个人存档用 H.265。给微信发视频用 H.264 降到 2-5Mbps 就够了,微信自己也会二次压缩。
分辨率降还是不降
4K 降到 1080p,码率需求降到原来的 25%,这是最直接的瘦身方式。如果对方在手机上看,720p 和 1080p 差别不大,降到 720p 又能再省一半。60fps 降到 30fps 同样省一半,但游戏录屏建议保留 60fps。
试过的几个方案
HandBrake 是最顺手的桌面软件,GUI 操作直观,支持批量队列。FFmpeg 功能最强但学习曲线陡,适合写脚本批量处理。
91aitool 的视频压缩是纯前端方案,用 WebAssembly 跑 FFmpeg,视频不用上传到服务器,数据安全有保障。适合随手压缩几段短视频发微信——浏览器打开就能用,不用装软件。
格式工厂用过一段时间,但预设参数偏保守,同画质下体积比 HandBrake 大。剪映导出时选"更小体积"适合手机端操作,但可控参数太少。
关于 CRF 的一点经验
CRF 值常用范围是 18-33:
- 18:几乎看不出差别,适合后期制作阶段的素材
- 23:x264 默认值,日常够用
- 28:能看出压缩痕迹,适合存档不常用的视频
- 33:只适合发微信预览,正式场合别用
有个坑:如果原始视频已经是高压缩率的 H.265,再压缩基本没空间了。压缩前用 ffprobe 看一眼原始参数:
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,bit_rate -of default=noprint_wrappers=1 input.mp4个人流程总结
微信临时发:91aitool 设目标大小,几十秒出结果。批量存档:HandBrake 建 H.265 CRF 28 预设,拖进去统一跑。发给客户:H.264 CRF 18,分辨率降 1080p——打不开比文件大更麻烦。
