我做什么
我通过智能默认设置重编码来减小 MP4 文件体积。关键洞察:大部分屏幕录制和人物出镜视频以 60fps 过编码。降低到 30fps 并调优编码器,可以获得 20-50% 的体积缩减,且无感知质量差异。
捆绑脚本:@compress_video.py
何时使用我
- 你有一个 MP4 文件太大,难以分享/上传
- 你录制了 60fps 的屏幕录像,希望将其体积减半
- 你需要“足够好”的质量,同时占用更小的空间
- 你需要批量压缩训练视频、演示或录制文件
如何使用
CLI(快速使用)
# 仅分析
python compress_video.py input.mp4 --probe-only
# 默认压缩(高质量)
python compress_video.py input.mp4 output.mp4
# 激进压缩以获得更小文件
python compress_video.py input.mp4 -p aggressive
# 屏幕录制(代码/EDA 工具):从 60fps 降至 30fps,stillimage 调优
python compress_video.py input.mp4 -p balanced --tune stillimage --fps 30
# 降分辨率到 1080p
python compress_video.py input.mp4 -p balanced --resolution 1920x1080
Python API
from compress_video import compress, probe
# 先进行分析
info = probe("input.mp4")
print(f"{info['width']}x{info['height']} @ {info['fps']:.0f}fps")
# 使用默认设置压缩
compress("input.mp4", "output.mp4")
# 使用激进设置压缩
compress("input.mp4", "output.mp4", profile="aggressive",
fps=24, tune="stillimage")
系统要求
- Python 3.8+
- ffmpeg 已安装并位于 PATH 中(需包含 ffprobe)
压缩配置文件
| 配置文件 | x264 CRF | x265 CRF | 使用场景 |
|---|---|---|---|
lossless | 18 | 20 | 存档,最大质量 |
high(默认) | 23 | 25 | 视觉无损,安全默认值 |
balanced | 26 | 28 | 良好质量,更小文件 |
aggressive | 28 | 30 | 小文件,轻微渐变损失 |
关键技术策略
| 技术 | 典型节省 | 质量影响 |
|---|---|---|
| 60fps → 30fps | ~25% | 对屏幕录制无感知影响 |
| H.264 CRF 23(从 CRF 18 起) | ~20% | 大多数观众无感知 |
| H.264 → H.265(libx265) | ~30-40% | 无影响(相同 CRF) |
--tune stillimage | ~5-10% | 对代码/幻灯片更优 |
| 降分辨率 3200→1920 | ~50% | 放大时清晰度损失 |
示例
将 125 MB 的屏幕录制文件减少 30-50%
# 快速默认运行(使用 libx264,从 60fps 降至 30fps)
python compress_video.py recording.mp4 recording_compressed.mp4
# 125 MB → 97 MB (-22%)
# 使用 stillimage 调优(对代码/屏幕录制更优)
python compress_video.py recording.mp4 -p balanced --tune stillimage --fps 30
# 125 MB → ~80 MB (-35%)
# 全 HEVC 编码,使用较慢预设
python compress_video.py recording.mp4 --codec h265 --preset slow --fps 30
# 125 MB → ~60 MB (-50%,但编码更慢)
批量处理文件夹
Get-ChildItem *.mp4 | ForEach-Object {
python compress_video.py $_.Name "$($_.BaseName)_compressed.mp4"
}