Piwigo
Pour gérer une grosse collection de photos, Piwigo est parfait mais demande la préparation de sa bibliothèque.
Nous allons partir du fait que nous enverrons nos fichiers via FTP.
Préparation de la galerie
Suppression des fichiers inutiles
WinDirStat permet d'analyser la photothèque et de donner l'ensemble des types de fichiers présents, la taille de chaque type, etc.

Ce que nous ferons est d'arriver à cela, sans aucune perte de qualité :

Avec EveryThing, nous pouvons chercher tous les fichiers d'un certain type à un certain endroit et les supprimer très facilement.

Cela permet de supprimer tout ce qui est inutile : docx, ini, thm, db, pptx, ... Enfin bref, tout ce qui n'est pas une vidéo ou une image...
Cela permet aussi de voir tous les formats auxquels on est confronté.
Renommage
Un serveur web n'accepte pas tout un tas de caractères dans les noms de fichiers, pourtant acceptés par les systèmes d'exploitation.
Cela va des caractères accentués, (à,é,è,â...) aux caractères spéciaux ((,),&,@,$,',`, etc.), mais également les espaces.
AntRenamer permet d'appliquer toute une série de règles à appliquer (en une fois).
| Caractère | Remplacement | Détails |
|---|---|---|
| espace | _ | |
| à | a | |
| é | e | |
| è | e | |
| ê | e | |
| â | a | |
| ( et ) | - | |
| [ et ] | - | |
| { et } | - | |
| @ | _at_ | |
| & | _and_ | |
| + | _plus_ | |
| , | _ | |
| ' | _ | apostrophe française |
| ' | _ | apostrophe anglaise |
| etc... |

Conversion photos
Dans mon dernier cas, il y avait des photos aux formats jpg, jpeg, png, cr2, bmp.
J'utilise le batch-script suivant, qui fait appel à ImageMagick :
@echo off
setlocal enabledelayedexpansion
echo === Traitement des JPG ===
for /R %%F in (*.jpg) do (
echo JPG : %%F
mogrify -resize 2048x2048 -quality 90 "%%F"
)
echo.
echo === Conversion autres formats en JPG ===
for /R %%F in (*.png *.jpeg *.cr2) do (
echo Fichier : %%F
set "src=%%F"
set "dst=%%~dpnF.jpg"
REM Conversion -> JPG
magick "%%F" -resize 2048x2048 -quality 90 "!dst!"
REM Si le JPG existe, on supprime le fichier
if exist "!dst!" (
del "%%F"
echo -> Converti et supprimé
) else (
echo -> ERREUR : conversion échouée
)
)
echo.
echo === Terminé ===
pauseCe code commence par analyser l'ensemble des fichiers JPG afin de les redimensionner à une taille imposée de 2048x2048 maximum.
Les images plus grandes ne seront pas "carrées" mais auront 2048 comme largeur ou hauteur maximale, et pareil pour les images plus petites, elles seront agrandies.
Ce que permet d'avoir toutes des images ayant très exactement les mêmes dimensions est de pouvoir appliquer un logo, watermark... qui donnera toujours "bien", au bon endroit.
Une fois qu'il a fini avec les JPG, il refait la même chose pour les autres formats.
Je suis tombé sur pas mal de BMP récalcitrants, raison pour laquelle j'ai utilisé un autre batch, faisant appel à ffmpeg :
@echo off
setlocal enabledelayedexpansion
echo === Conversion des BMP en JPG avec FFMPEG ===
echo.
for /R %%F in (*.bmp) do (
echo BMP : %%F
set "src=%%F"
set "dst=%%~dpnF.jpg"
REM Conversion BMP -> JPG (ffmpeg tolérant)
ffmpeg -y -loglevel error -err_detect ignore_err ^
-i "%%F" ^
-vf "scale='min(2048,iw)':'min(2048,ih)':force_original_aspect_ratio=decrease" ^
-q:v 2 "!dst!"
REM Si le JPG existe, on supprime le BMP
if exist "!dst!" (
del "%%F"
echo -> Converti et BMP supprimé
) else (
echo -> ERREUR : conversion échouée
)
)
echo.
echo === Terminé ===
pauseIl y a toujours une erreur à la sortie de ffmpeg, mais le fichier JPG est quand même créé...
Conversion vidéo
La conversion vidéo est beaucoup plus compliquée. Dans mon cas, j'ai eu des AVI, MTS, MOV, 3GP et MP4... mais parfois avec des codecs plus qu'exotiques...
En vidéo, il existe deux choses :
- Les "containers", c'est à dire les formats de fichiers comme MP4, AVI, MKV, etc.
- Les "codecs", c'est à dire l'outil utilisé pour compresser et décompresser les vidéos.
Le problème ici est que nous avons besoin de vidéos qui soient "web-compatible". MP4 ne suffit donc pas et les vidéos doivent être transformées via un codec particulier.
Pour cela, toutes les vidéos sont transformées avec ffmpeg via ce batch :
@echo off
setlocal enabledelayedexpansion
echo === Conversion recursive + GPU fallback CPU ===
for /r %%F in (*.mp4) do (
echo.
echo Traitement : %%F
set "TMP=%%~dpnF_tmp.mp4"
set "FINAL=%%F"
rem --- Essai NVENC ---
ffmpeg -y -hwaccel cuda -i "%%F" ^
-map 0:v:0 -map 0:a? ^
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -r 30 ^
-c:v h264_nvenc -preset p4 -b:v 2M -pix_fmt yuv420p ^
-movflags +faststart ^
-c:a aac -b:a 96k -ac 2 ^
"!TMP!" 2>nul
rem --- Vérifier si NVENC a échoué (fichier inexistant ou trop petit) ---
for %%A in ("!TMP!") do if %%~zA lss 10000 (
echo NVENC a échoué ou fichier trop petit, fallback sur CPU libx264...
ffmpeg -y -hwaccel none -i "%%F" ^
-map 0:v:0 -map 0:a? ^
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -r 30 ^
-c:v libx264 -preset slow -crf 28 ^
-profile:v baseline -level 3.0 -pix_fmt yuv420p ^
-x264-params "bframes=0" ^
-movflags +faststart ^
-c:a aac -b:a 96k -ac 2 ^
"!TMP!" 2>nul
)
rem --- Remplacer le fichier original si conversion réussie ---
for %%A in ("!TMP!") do if %%~zA gtr 10000 (
del "%%F"
ren "!TMP!" "%%~nxF"
echo Succès : %%F
) else (
echo ERREUR sur %%F, aucun encodage réussi
)
)
echo.
echo === Terminé ===
pauseATTENTION !!! : Ce batch fait appel à ffmpeg en utilisant une carte graphique nvidia. Si vous n'avez pas de carte graphique nvidia, le temps de calcul sera (beaucoup) plus long et doit fait appel à l'outil d'une autre manière qui n'est pas garantie car je n'ai pas eu à y faire appel...