Bonjour/Bonsoir,
EDIT - Je viens de faire un test sur de gros volumes : 2273 vignettes générées pour 2291 fichiers vidéo, soit 18 vignettes non générées. Un taux d'échec très faible. Les échecs peuvent êtes dus à des formats vidéos hors normes. Je vais approfondir. FIN EDIT
Piwigo peut lire les vidéos à condition que chaque vidéo soit matérialisée par une vignette cliquable, ayant le même nom que la vidéo (à part l'extension, bien sûr), et stockée dans le sous-dossier pwg_representative au même niveau que la vidéo. Ceci nécessite l'installation du plugin VideoJS, qui a besoin de ffmpeg pour fonctionner.
Les hébergeurs ne nous permettent pas d'installer ffmpeg par crainte de voir chuter leur bande passante.
Or, il faut avoir les privilèges de root pour l'installer, donc on est dans l'impasse.
L'idée est de faire le travail de ffmpeg en amont, sous Windows, de sorte qu'en uploadant vos fichiers vidéos, les vignettes sont elles aussi uploadées dans la foulée.
Je vous soumets ce petit utilitaire qui va explorer tous les vidéos à partir d'un dossier racine, en explorant tous les sous-dossiers.
Il n'y a pas de limite au nombre de niveaux à explorer.
Remarques
1) Attention, il s'agit d'un fichier de commandes (.cmd), et non pas d'un fichier batch (.bat).
Le fichier de commandes nécessite de lancer cmd.exe au préalable.
Il est plus puissant que le batch, mais bien moins puissant que le PowerShell.
2) L'instruction ffmpeg est censée permettre de générer un seul JPG mais la syntaxe proposée ne fonctionne pas.
Par conséquent, on utilise ici une syntaxe sauvage bricolée par moi et qui génère des warning sans gravité.
En outre, ffmpeg est très bavard (aussi bavard que moi ! ) et génère des logs volumineux. Pour éviter cela, le commutateur -loglevel fatal le fera taire et ne lui permettra de s'exprimer que s'il rencontre une erreur fatale.
3) Ce fichier de commandes n'est pas fait pour être lancé 2 fois de suite : si la création du dossier des vignettes est conditionnée par un test préalable d'existence dudit dossier, la création d'une vignette, elle, provoquera une erreur si la vignette existe déjà. Il vous appartient de modifier le code pour gérer ce cas de figure (et enrichir ce topic, merci !)
4) Si l'on fait de nombreuses modifications du fichier de cmd, on peut être confronté à des résultats incohérents, comme s'il gardait certaines données en mémoire. Dans ce cas, il suffit de redémarrer l'ordinateur pour que les choses rentrent dans l'ordre.
C'est la seule explication que j'ai trouvée aux nombreuses erreurs aléatoires que j'ai rencontrées, sans parler des boucles for imbriquées impliquant que la boucle intérieure soit appelée par un call.
5) Explication de la syntaxe d'appel de ffmpeg :
ffmpeg -loglevel fatal -i %%~nxB -r 1 -f image2 -ss 3 -frames 1 %%~nB.jpg
ce qui, en clair, peut s'écrire de la façon suivante :
ffmpeg -loglevel fatal -i input.mp4 -r 1 -f image2 -ss 3 -frames 1 output.jpg
-loglevel fatal pour indiquer à ffmpeg de n'afficher que les erreurs fatales
-i input.mp4 : le nom de la vidéo pour laquelle on veut générer une vignette.
-r 1 : nombre d'images par seconde; ce paramètre n'a pas besoin d'être modifié dans l'utilisation que nous faisons de ffmpeg.
-f image2 : utilité discutable; évoqué dans certaines docs, pas dans d'autres... n'a pas besoin d'être modifié.
-ss 3 : pour indiquer que l'on veut extraire l'image à 3 secondes du début de la vidéo.
- frames 1 pour indiquer que l'on ne veut extraire qu'une image; ce paramètre devrait être combiné avec -update 1, ceci reste à éclaircir.
output.jpg : nom de la vignette à générer.
@echo off cls SetLocal EnableDelayedExpansion Set DossierRacine=E:\tests for /r "%DossierRacine%" %%A in (*.mp4 *.avi *.m2ts *.mov *.mts) do (call :Decoupe %%A) goto :fin :Decoupe for %%B in ("%1") do ( set X=%%~dpBpwg_representative if not exist !X! mkdir !X! cd %%~dpB ffmpeg -i %%~nxB -r 1 -f image2 -ss 3 -frames 1 %%~nB.jpg move %%~nB.jpg .\pwg_representative\ ) :fin