diff --git a/Scripts/compress.sh b/Scripts/compress.sh index 1844755..6581972 100644 --- a/Scripts/compress.sh +++ b/Scripts/compress.sh @@ -1,63 +1,83 @@ #!/bin/bash shopt -s nocaseglob -# --- 1. CONFIGURATION DU RÉPERTOIRE --- -# On récupère l'argument 1 s'il existe, sinon on reste sur le répertoire courant +# --- 1. CONFIGURATION --- +# Utilise l'argument 1 comme dossier racine, ou le dossier courant par défaut BASE_DIR="${1:-.}" - -# Définition des dossiers par rapport à la base SOURCE_DIR="$BASE_DIR/rushs" DEST_DIR="$BASE_DIR/videos" -# Vérification que le dossier source existe +# Vérification du dossier source if [ ! -d "$SOURCE_DIR" ]; then - echo "❌ Erreur : Le dossier source $SOURCE_DIR n'existe pas." + echo "❌ Erreur : Dossier source $SOURCE_DIR introuvable." exit 1 fi -# Création du dossier de destination s'il n'existe pas +# Création du dossier de destination mkdir -p "$DEST_DIR" -echo "--- DÉBUT DE LA COMPRESSION ---" -echo "📂 Répertoire racine : $BASE_DIR" -echo "📥 Source : $SOURCE_DIR" +echo "--- COMPRESSION ROAD-TRIP (CPU OPTIMISÉ) ---" +echo "📂 Source : $SOURCE_DIR" echo "📤 Destination : $DEST_DIR" -# 2. BOUCLE DE COMPRESSION +# 2. BOUCLE DE TRAITEMENT for f in "$SOURCE_DIR"/*.{mp4,mov}; do - # Vérification si des fichiers existent [ -e "$f" ] || continue - # Récupération du nom de fichier sans le chemin + # Extraction du nom de base (ex: GH011182.mp4 -> GH011182) filename=$(basename "$f") - - echo "🎬 Compression de : $filename ..." + base="${filename%.*}" - # Compression avec accélération matérielle Mac (videotoolbox) - ffmpeg -i "$f" \ - -tag:v hvc1 \ - -c:v hevc_videotoolbox \ - -b:v 10000k \ - -g 60 \ - -bf 2 \ - -profile:v main \ - -pix_fmt yuv420p \ - -r 60 \ - -c:a aac \ - -b:a 128k \ - -movflags +faststart \ - "$DEST_DIR/$filename" \ - -y -loglevel error + # Conventions de nommage validées + desktop_out="$DEST_DIR/${base}.mp4" + mobile_out="$DEST_DIR/${base}_mobile.mp4" - # Comparaison de taille - if [ -f "$DEST_DIR/$filename" ]; then - orig_size=$(du -h "$f" | cut -f1) - new_size=$(du -h "$DEST_DIR/$filename" | cut -f1) - echo "✅ Terminé : $filename ($orig_size -> $new_size)" - else - echo "⚠️ Erreur lors de la compression de $filename" + 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 "--- OPÉRATION TERMINÉE ---" +echo "✅ TOUTES LES VIDÉOS SONT PRÊTES." diff --git a/Scripts/genere_carte.py b/Scripts/genere_carte.py index 8c1993f..8d8f422 100644 --- a/Scripts/genere_carte.py +++ b/Scripts/genere_carte.py @@ -9,6 +9,7 @@ import re import sys import markdown2 import numpy as np +import html # --- 1. CONFIGURATION --- base_dir = sys.argv[1] if len(sys.argv) > 1 else "./" @@ -51,16 +52,47 @@ def create_pin(color, icon_name): def inject_common_assets(m): custom_js = """