O que faço
Reduzo o tamanho de arquivos MP4 recodificando com configurações inteligentes. A ideia principal: a maioria dos screencasts e vídeos de pessoas falando são supercodificados a 60fps. Reduzir para 30fps e ajustar o codificador resulta em redução de 20-50% no tamanho do arquivo sem diferença perceptível de qualidade.
Scripts incluídos: @compress_video.py
Quando me usar
- Você tem um MP4 muito grande para compartilhar/enviar
- Você gravou um screencast a 60fps e deseja reduzir pela metade
- Você precisa de qualidade "suficientemente boa" com uma fração do tamanho
- Você deseja comprimir em lote vídeos de treinamento, demonstrações ou gravações
Como usar
CLI (rápido)
# Apenas analisar
python compress_video.py input.mp4 --probe-only
# Compressão padrão (alta qualidade)
python compress_video.py input.mp4 output.mp4
# Compressão agressiva para arquivos pequenos
python compress_video.py input.mp4 -p aggressive
# Screencast (código/ferramentas EDA): reduzir 60→30fps, ajuste stillimage
python compress_video.py input.mp4 -p balanced --tune stillimage --fps 30
# Redimensionar para 1080p
python compress_video.py input.mp4 -p balanced --resolution 1920x1080
API Python
from compress_video import compress, probe
# Primeiro, analisar
info = probe("input.mp4")
print(f"{info['width']}x{info['height']} @ {info['fps']:.0f}fps")
# Comprimir com configurações padrão
compress("input.mp4", "output.mp4")
# Comprimir com configurações agressivas
compress("input.mp4", "output.mp4", profile="aggressive",
fps=24, tune="stillimage")
Requisitos
- Python 3.8+
- ffmpeg instalado e no PATH (com
ffprobe)
Perfis de compressão
| Perfil | x264 CRF | x265 CRF | Caso de uso |
|---|---|---|---|
lossless | 18 | 20 | Arquivamento, qualidade máxima |
high (padrão) | 23 | 25 | Visualmente sem perdas, padrão seguro |
balanced | 26 | 28 | Boa qualidade, arquivos menores |
aggressive | 28 | 30 | Arquivos pequenos, pequena perda de gradiente |
Estratégias principais
| Técnica | Economia típica | Impacto na qualidade |
|---|---|---|
| 60fps → 30fps | ~25% | Imperceptível em screencasts |
| H.264 CRF 23 (de CRF 18) | ~20% | Nenhum para a maioria dos espectadores |
| H.264 → H.265 (libx265) | ~30-40% | Nenhum (mesmo CRF) |
--tune stillimage | ~5-10% | Melhor para código/slides |
| Redimensionar 3200→1920 | ~50% | Perda de nitidez ao ampliar |
Exemplos
Reduzir um screencast de 125 MB em 30-50%
# Execução rápida padrão (usa libx264, reduz 60→30fps)
python compress_video.py recording.mp4 recording_compressed.mp4
# 125 MB → 97 MB (-22%)
# Com ajuste stillimage (melhor para código/screencasts)
python compress_video.py recording.mp4 -p balanced --tune stillimage --fps 30
# 125 MB → ~80 MB (-35%)
# HEVC completo com preset mais lento
python compress_video.py recording.mp4 --codec h265 --preset slow --fps 30
# 125 MB → ~60 MB (-50%, mas codifica ~mais lento)
Processar uma pasta em lote
Get-ChildItem *.mp4 | ForEach-Object {
python compress_video.py $_.Name "$($_.BaseName)_compressed.mp4"
}