Qué hago
Reduzco el tamaño de archivos MP4 recodificándolos con valores predeterminados inteligentes. La clave: la mayoría de las capturas de pantalla y videos de personas hablando están sobrecodificados a 60fps. Reducir a 30fps y ajustar el codificador proporciona una reducción del 20-50% sin diferencias perceptibles en la calidad.
Scripts incluidos: @compress_video.py
Cuándo usarme
- Tienes un MP4 demasiado grande para compartir/subir
- Grabaste una captura de pantalla a 60fps y deseas reducirla a la mitad
- Necesitas calidad "suficientemente buena" a una fracción del tamaño
- Deseas comprimir por lotes videos de entrenamiento, demos o grabaciones
Cómo usar
CLI (rápido)
# Solo analizar
python compress_video.py input.mp4 --probe-only
# Compresión predeterminada (alta calidad)
python compress_video.py input.mp4 output.mp4
# Compresión agresiva para archivos pequeños
python compress_video.py input.mp4 -p aggressive
# Captura de pantalla (código/herramientas EDA): reducir 60→30fps, ajuste stillimage
python compress_video.py input.mp4 -p balanced --tune stillimage --fps 30
# Reducir resolución a 1080p
python compress_video.py input.mp4 -p balanced --resolution 1920x1080
API de Python
from compress_video import compress, probe
# Primero analizar
info = probe("input.mp4")
print(f"{info['width']}x{info['height']} @ {info['fps']:.0f}fps")
# Comprimir con valores predeterminados
compress("input.mp4", "output.mp4")
# Comprimir con configuración agresiva
compress("input.mp4", "output.mp4", profile="aggressive",
fps=24, tune="stillimage")
Requisitos
- Python 3.8+
- ffmpeg instalado y en PATH (con
ffprobe)
Perfiles de compresión
| Perfil | x264 CRF | x265 CRF | Caso de uso |
|---|---|---|---|
lossless | 18 | 20 | Archivado, máxima calidad |
high (predeterminado) | 23 | 25 | Visualmente sin pérdida, valor seguro |
balanced | 26 | 28 | Buena calidad, archivos más pequeños |
aggressive | 28 | 30 | Archivos pequeños, pérdida de gradiente menor |
Estrategias clave
| Técnica | Ahorro típico | Impacto en calidad |
|---|---|---|
| 60fps → 30fps | ~25% | Imperceptible para capturas de pantalla |
| H.264 CRF 23 (desde CRF 18) | ~20% | Ninguno para la mayoría de espectadores |
| H.264 → H.265 (libx265) | ~30-40% | Ninguno (mismo CRF) |
--tune stillimage | ~5-10% | Mejor para código/diapositivas |
| Reducir resolución 3200→1920 | ~50% | Pérdida de nitidez al ampliar |
Ejemplos
Reducir una captura de pantalla de 125 MB en un 30-50%
# Ejecución rápida predeterminada (usa libx264, reduce 60→30fps)
python compress_video.py recording.mp4 recording_compressed.mp4
# 125 MB → 97 MB (-22%)
# Con ajuste stillimage (mejor para código/capturas)
python compress_video.py recording.mp4 -p balanced --tune stillimage --fps 30
# 125 MB → ~80 MB (-35%)
# HEVC completo con preset más lento
python compress_video.py recording.mp4 --codec h265 --preset slow --fps 30
# 125 MB → ~60 MB (-50%, pero codifica más lento)
Procesar por lotes una carpeta
Get-ChildItem *.mp4 | ForEach-Object {
python compress_video.py $_.Name "$($_.BaseName)_compressed.mp4"
}