我的功能
我透過智慧預設值重新編碼來減少 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 工具):將 60→30fps,仍影像調諧
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,將 60→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"
}