Ce que je fais
Je réduis la taille des fichiers MP4 en les ré-encodant avec des réglages par défaut intelligents. L'idée clé : la plupart des screencasts et vidéos de personnes parlant sont sur-encodés à 60 images par seconde. En passant à 30 images par seconde et en ajustant l'encodeur, on obtient une réduction de 20 à 50 % de la taille du fichier sans différence de qualité perceptible.
Scripts inclus : @compress_video.py
Quand m'utiliser
- Vous avez un fichier MP4 trop volumineux pour être partagé/téléchargé
- Vous avez enregistré un screencast à 60 images par seconde et souhaitez le réduire de moitié
- Vous avez besoin d'une qualité « assez bonne » pour une fraction de la taille
- Vous souhaitez compresser en lots des vidéos de formation, des démos ou des enregistrements
Comment m'utiliser
CLI (rapide)
# Analyse uniquement
python compress_video.py input.mp4 --probe-only
# Compression par défaut (haute qualité)
python compress_video.py input.mp4 output.mp4
# Compression agressive pour de petits fichiers
python compress_video.py input.mp4 -p aggressive
# Screencast (code/outils EDA) : passer de 60 à 30 images/s, optimisation stillimage
python compress_video.py input.mp4 -p balanced --tune stillimage --fps 30
# Réduction à 1080p
python compress_video.py input.mp4 -p balanced --resolution 1920x1080
API Python
from compress_video import compress, probe
# Analyser d'abord
info = probe("input.mp4")
print(f"{info['width']}x{info['height']} @ {info['fps']:.0f} images/s")
# Compresser avec les réglages par défaut
compress("input.mp4", "output.mp4")
# Compresser avec des réglages agressifs
compress("input.mp4", "output.mp4", profile="aggressive",
fps=24, tune="stillimage")
Prérequis
- Python 3.8+
- ffmpeg installé et accessible dans le PATH (avec
ffprobe)
Profils de compression
| Profil | x264 CRF | x265 CRF | Cas d'utilisation |
|---|---|---|---|
lossless | 18 | 20 | Archivage, qualité maximale |
high (par défaut) | 23 | 25 | Visuellement sans perte, réglage sûr par défaut |
balanced | 26 | 28 | Bonne qualité, fichiers plus petits |
aggressive | 28 | 30 | Petits fichiers, légère perte de dégradé |
Stratégies clés
| Technique | Économie typique | Impact sur la qualité |
|---|---|---|
| 60 à 30 images/s | ~25 % | Imperceptible pour les screencasts |
| H.264 CRF 23 (au lieu de CRF 18) | ~20 % | Aucun pour la plupart des spectateurs |
| H.264 vers H.265 (libx265) | ~30 à 40 % | Aucun (même CRF) |
--tune stillimage | ~5 à 10 % | Meilleur pour le code/diapositives |
| Réduction de 3200 à 1920 px | ~50 % | Perte de netteté en zoom |
Exemples
Réduire un screencast de 125 Mo de 30 à 50 %
# Exécution rapide par défaut (utilise libx264, passe de 60 à 30 images/s)
python compress_video.py recording.mp4 recording_compressed.mp4
# 125 Mo → 97 Mo (-22 %)
# Avec optimisation stillimage (meilleur pour le code/les screencasts)
python compress_video.py recording.mp4 -p balanced --tune stillimage --fps 30
# 125 Mo → ~80 Mo (-35 %)
# HEVC complet avec préréglage lent
python compress_video.py recording.mp4 --codec h265 --preset slow --fps 30
# 125 Mo → ~60 Mo (-50 %, mais encodage plus lent)
Traiter un dossier par lots
Get-ChildItem *.mp4 | ForEach-Object {
python compress_video.py $_.Name "$($_.BaseName)_compressed.mp4"
}