84 lines
2.5 KiB
Bash
84 lines
2.5 KiB
Bash
#!/bin/bash
|
|
shopt -s nocaseglob
|
|
|
|
# --- 1. CONFIGURATION ---
|
|
# Utilise l'argument 1 comme dossier racine, ou le dossier courant par défaut
|
|
BASE_DIR="${1:-.}"
|
|
SOURCE_DIR="$BASE_DIR/rushs"
|
|
DEST_DIR="$BASE_DIR/videos"
|
|
|
|
# Vérification du dossier source
|
|
if [ ! -d "$SOURCE_DIR" ]; then
|
|
echo "❌ Erreur : Dossier source $SOURCE_DIR introuvable."
|
|
exit 1
|
|
fi
|
|
|
|
# Création du dossier de destination
|
|
mkdir -p "$DEST_DIR"
|
|
|
|
echo "--- COMPRESSION ROAD-TRIP (CPU OPTIMISÉ) ---"
|
|
echo "📂 Source : $SOURCE_DIR"
|
|
echo "📤 Destination : $DEST_DIR"
|
|
|
|
# 2. BOUCLE DE TRAITEMENT
|
|
for f in "$SOURCE_DIR"/*.{mp4,mov}; do
|
|
[ -e "$f" ] || continue
|
|
|
|
# Extraction du nom de base (ex: GH011182.mp4 -> GH011182)
|
|
filename=$(basename "$f")
|
|
base="${filename%.*}"
|
|
|
|
# Conventions de nommage validées
|
|
desktop_out="$DEST_DIR/${base}.mp4"
|
|
mobile_out="$DEST_DIR/${base}_mobile.mp4"
|
|
|
|
echo "🎬 Traitement de : $filename ..."
|
|
|
|
# --- A. VERSION DESKTOP (1080p60 - Validé 233 Mo) ---
|
|
# Réglages : CRF 28, Maxrate 12M, GOP 120, FPS source exact
|
|
ffmpeg -i "$f" \
|
|
-c:v libx264 -preset slow -profile:v high \
|
|
-crf 28 \
|
|
-tune film \
|
|
-g 120 -keyint_min 120 -sc_threshold 0 \
|
|
-maxrate 15M -bufsize 30M \
|
|
-pix_fmt yuv420p \
|
|
-r 60000/1001 \
|
|
-vf "scale=1920:-2:flags=lanczos" \
|
|
-c:a aac -b:a 96k -ac 1 \
|
|
-map_metadata -1 \
|
|
-movflags +faststart \
|
|
-y -loglevel error \
|
|
"$desktop_out"
|
|
|
|
# --- B. VERSION MOBILE (720p60 - Optimisé 4G/Smartphone) ---
|
|
# Réglages : On baisse le maxrate à 6M pour la fluidité mobile
|
|
ffmpeg -i "$f" \
|
|
-c:v libx264 -preset slow -profile:v high \
|
|
-crf 28 \
|
|
-tune film \
|
|
-g 120 -keyint_min 120 -sc_threshold 0 \
|
|
-maxrate 6M -bufsize 12M \
|
|
-pix_fmt yuv420p \
|
|
-r 60000/1001 \
|
|
-vf "scale=1280:-2:flags=lanczos" \
|
|
-c:a aac -b:a 64k -ac 1 \
|
|
-map_metadata -1 \
|
|
-movflags +faststart \
|
|
-y -loglevel error \
|
|
"$mobile_out"
|
|
|
|
# Petit bilan de taille pour confirmer l'économie
|
|
if [ -f "$desktop_out" ]; then
|
|
d_size=$(du -h "$desktop_out" | cut -f1)
|
|
m_size=$(du -h "$mobile_out" | cut -f1)
|
|
echo " ✅ Desktop : $d_size (${base}.mp4)"
|
|
echo " ✅ Mobile : $m_size (${base}_mobile.mp4)"
|
|
fi
|
|
|
|
echo "---------------------------------------------------"
|
|
done
|
|
|
|
shopt -u nocaseglob
|
|
echo "✅ TOUTES LES VIDÉOS SONT PRÊTES."
|