Ce guide vous permet de mettre en place un système de compression automatique pour vos photos et vidéos. L’objectif est de réduire l’espace disque consommé par vos sauvegardes mobiles tout en préservant la réactivité de votre serveur, même sur du matériel reconditionné.
Connectez-vous en root et installez les outils de traitement :
apt update && apt install ffmpeg imagemagick -y
Avant de continuer, vous devez installer l’application suivante depuis le magasin d’applications de votre instance :
Légende : Recherche et installation de l’application « Workflow external scripts » dans le magasin d’applications Nextcloud.
Ce script s’adapte automatiquement à votre installation, qu’elle soit dans /var/www ou /srv.
Créez le fichier :
nano /usr/local/bin/nc-compress.sh
Copiez-y ce contenu :
#!/bin/bash
# Auteur : Amaury aka BlablaLinux (https://link.blablalinux.be)
# --- AUTO-DÉTECTION DES CHEMINS ---
if [ -d "/var/www/nextcloud" ]; then
NC_ROOT="/var/www/nextcloud"
elif [ -d "/srv/nextcloud" ]; then
NC_ROOT="/srv/nextcloud"
else
NC_ROOT="/var/www/html"
fi
# Récupération automatique du dossier DATA depuis la config
DATA_DIR=$(grep "datadirectory" $NC_ROOT/config/config.php | cut -d"'" -f4)
OCC_BIN="$NC_ROOT/occ"
# --- TRAITEMENT DU FICHIER ---
RELATIVE_PATH="$1"
FILE_PATH="$DATA_DIR/$RELATIVE_PATH"
if [ ! -f "$FILE_PATH" ]; then exit 1; fi
EXTENSION=$(echo "${FILE_PATH##*.}" | tr '[:upper:]' '[:lower:]')
# Section vidéo (MP4, MOV, MKV, AVI)
if [[ "$EXTENSION" =~ ^(mp4|mkv|avi|mov)$ ]]; then
TEMP_VIDEO="${FILE_PATH%.*}.tmp.mp4"
/usr/bin/nice -n 19 /usr/bin/ionice -c 3 /usr/bin/ffmpeg -i "$FILE_PATH" \
-c:v libx264 -b:v 6000k -preset ultrafast -threads 1 -b:a 128k "$TEMP_VIDEO" -y
if [ $? -eq 0 ]; then
mv "$TEMP_VIDEO" "${FILE_PATH%.*}.mp4"
[ "$EXTENSION" != "mp4" ] && rm "$FILE_PATH"
FINAL_FILE="${FILE_PATH%.*}.mp4"
fi
# Section photo (JPG, JPEG)
elif [[ "$EXTENSION" =~ ^(jpg|jpeg)$ ]]; then
/usr/bin/nice -n 19 /usr/bin/convert "$FILE_PATH" -resize "3468x3468>" -quality 80% "$FILE_PATH"
FINAL_FILE="$FILE_PATH"
fi
# Scan final pour Nextcloud
if [ -f "$OCC_BIN" ] && [ -n "$FINAL_FILE" ]; then
REL_PATH=$(echo "$FINAL_FILE" | sed "s|$DATA_DIR/||")
/usr/bin/php "$OCC_BIN" files:scan --path="$REL_PATH"
fi
Rendez le script exécutable :
chmod +x /usr/local/bin/nc-compress.sh
Attention à bien utiliser les flux d’administration (colonne de gauche, section Administration) et non les flux personnels.
Rendez-vous dans : Paramètres > Administration > Flux.
Légende : Distinction entre les paramètres personnels et la section Administration pour accéder aux flux.
Cliquez sur Ajouter un nouveau flux (bouton en haut à droite) ou sélectionnez la tuile Run script et configurez les deux règles suivantes :
Légende : Configuration détaillée des deux règles de flux (images et vidéos) avec l’appel du script Bash.
Fichier crééType MIME du fichier / est une imageExécuter le script -> /bin/bash /usr/local/bin/nc-compress.sh %nFichier crééType MIME du fichier / correspond à l'expression régulière / /^video\/.*/iExécuter le script -> /bin/bash /usr/local/bin/nc-compress.sh %nPour que les changements de taille de fichiers soient rapidement visibles dans votre interface, vérifiez votre tâche Cron pour l’utilisateur www-data :
crontab -u www-data -e
Ligne à vérifier ou ajouter :
*/5 * * * * /usr/bin/php -f /var/www/nextcloud/cron.php
Les paramètres par défaut de ce script ont été minutieusement calibrés en fonction des capacités réelles de mon smartphone (capteur 4:3, 16:9 et 1:1) et de la puissance de mon serveur. L’objectif est d’offrir le meilleur compromis entre gain d’espace et respect de la qualité visuelle, tout en restant léger pour le processeur.
-resize "3468x3468>" -quality 80%)Sur mon appareil, les photos natives montent jusqu’à 3072 x 4096 pixels.
-b:v 6000k -preset ultrafast)L’analyse des fichiers originaux montre des débits allant jusqu’à 25 Mb/s pour du 1080p à 60 im/s, soit environ 200 Mo pour une seule minute de film.
ultrafast et d’un seul thread est ma « touche spéciale » pour le matériel reconditionné. Le serveur compresse tranquillement en tâche de fond. Cela prend un peu plus de temps, mais votre Nextcloud reste 100% réactif pour vos autres usages quotidiens.Si mes réglages ne vous conviennent pas (par exemple si vous avez un serveur très puissant ou si vous voulez une compression plus forte), vous pouvez modifier les lignes suivantes dans le script :
Dans la section vidéo du script, cherchez la ligne commençant par /usr/bin/nice ... ffmpeg.
-b:v 6000k (le débit binaire). Plus le chiffre est bas, plus le fichier sera léger, mais moins la qualité sera bonne.-preset ultrafast privilégie la vitesse sur la taille. Vous pouvez utiliser medium pour une meilleure compression si votre CPU le permet.-threads 1 à 2 ou 4 pour compresser plus vite.Dans la section photo, cherchez la ligne commençant par /usr/bin/nice ... convert.
3468x3468> pour augmenter ou réduire la taille maximale des images.-quality 80%. Un réglage à 70% gagnera beaucoup d’espace, tandis que 90% sera presque invisible à l’œil nu mais le fichier sera plus lourd.L’utilisation de nice -n 19 et -threads 1 dans le script est cruciale pour le matériel reconditionné. Cela garantit que la compression tourne en tâche de fond sans jamais ralentir votre navigation sur Nextcloud ou vos autres services auto-hébergés.