Bonjour/Bonsoir,
J'ai installé Piwigo sur un serveur OVH mutualisé afin d'y visualiser les images et vidéos provenant de caméras IP D-link.
Les images sont au format jpg, les vidéos aux formats avi et mp4
A ce jour, je n'arrivai pas à visualiser ces vidéos sous Piwigo. J'ai donc cherché et trouvé une solution de contournement. Cette solution consiste à transformer les vidéos en "flv"
Etant sous Linux (Mint ou raspbian), le bash c'est imposé de lui même.
Voici le code en question. Il est loin d'être optimisé mais fonctionne. Une limite à ne pas perdre de vue : aucun de mes fichiers ne comporte d'espace. Je ne gère donc pas ce cas de figure.
Je ne parle pas des dépendance à vérifier en amont car, tout bêtement, je ne m'en souviens plus. De mémoire, il doit au moins y avoir ffmpeg.
D'autre part, il serait plus propre de lancer ce script dans un cron et de vérifier qu'une instance n'est pas active, via une gestion du PID, avant de relancer le script. Pour faire simple, j'ai choisi la boucle infinie.
#!/bin/sh # ============================================================= # Préparation des fichiers vidéos et images issues # issues de caméras IP D-link # afin de les visualiser sur un serveur OVH mutualisé # au moyen de l'application "piwigo" # # Alain BACH - le 20160904 # version 1 # ============================================================= clear # # Initialisation des variables # prepar_source=/media/raspdisk/mediacenter/cameras prepar_edestination=/media/raspdisk/www/piwigo/galleries prepar_sourcefile="./.src.log" prepar_radsource="$prepar_esource/" prepar_raddestination="$prepar_edestination/" prepar_logfile=$HOME/piwigo.log ovh_source=/media/raspdisk/www/piwigo/galleries ovh_destsrv=moi@ftp.domaine.fr ovh_destpath=camip/piwigo/piwigo/galleries ovh_destination=$ovh_destsrv:$ovh_destpath ovh_logpath=/media/raspdisk/mediacenter ovh_logstart=$ovh_logpath/syncovh_start.log ovh_logend=$ovh_logpath/syncovh_end.log boucle=0 ovhresultat=0 function funcdate { echo "$1 `date +"%d/%m/%Y %H:%M:%S"`" >> $2 } function funcchainelog { chaine=${3#$1}; result=${chaine%$2}; echo "$result" >> "$4" } export -f funcdate export -f funcchainelog while [ $boucle=0 ] do # ================================================================= # # Préparation des fichiers vidéos et mise à disposition # # ================================================================= declare -a srcarray funcdate "Début : " $prepar_logfile funcdate "source : " $prepar_logfile echo "source" find $prepar_esource -name '*.avi' -exec bash -c 'funcchainelog '$prepar_radsource' ".avi" "$0" '$prepar_esourcefile' ' {} \; ; find $prepar_esource -name '*.mp4' -exec bash -c 'funcchainelog '$prepar_radsource' ".mp4" "$0" '$prepar_esourcefile' ' {} \; ; funcdate "Tableaux : " $prepar_logfile echo "tableau" funcdate " source : " $prepar_logfile echo "-- source" index=0 for w in $(cat "$prepar_esourcefile"); do srcarray[index]="$w" index=$(expr $index + 1) done echo "--" funcdate "Tableau : " $prepar_logfile echo "done" echo "${#srcarray[@]} - ${#destarray[@]}" >> $prepar_logfile echo "${#srcarray[@]} - ${#destarray[@]}" funcdate "Conversion : " $prepar_logfile compteboucle=0 compteaction=0 for iii in "${srcarray[@]}" do ((compteboucle++)) entree="$iii" insource=0 if [ -f "$prepar_radsource$entree.avi" ] && [ ! -f "$prepar_radsource$entree.flv" ]; then ((compteaction++)) echo -n "$compteboucle-$compteaction : $prepar_radsource$entree.flv n'existe pas - " /usr/bin/ffmpeg -y -i "$prepar_radsource$entree.avi" -vcodec flv -f flv -r 29.97 -filter:v scale=w=640:h=480 -aspect 4:3 -b:v 300k -g 160 -cmp dct -subcmp dct -mbd 2 -flags +aic+mv0+mv4 -trellis 1 -ac 1 -ar 22050 -b:a 56k "$prepar_radsource$entree.flv" >/dev/null 2>&1 echo "ok" fi if [ -f "$prepar_radsource$entree.mp4" ] && [ ! -f "$prepar_radsource$entree.flv" ]; then ((compteaction++)) echo -n "$compteboucle-$compteaction : $prepar_radsource$entree.flv n'existe pas - " /usr/bin/ffmpeg -y -i "$prepar_radsource$entree.mp4" -vcodec flv -f flv -r 29.97 -filter:v scale=w=640:h=480 -aspect 4:3 -b:v 300k -g 160 -cmp dct -subcmp dct -mbd 2 -flags +aic+mv0+mv4 -trellis 1 -ac 1 -ar 22050 -b:a 56k "$prepar_radsource$entree.flv" >/dev/null 2>&1 echo "ok" fi done funcdate "Conversion : " $prepar_logfile funcdate "Transfert : " $prepar_logfile rsync -avrz --exclude *.mp4 --exclude *.avi --exclude *.log --delete-after $prepar_radsource $prepar_raddestination funcdate "Transfert : " $prepar_logfile unset srcarray # ================================================================= # # Transfert vers OVH # # ================================================================= # # Initialisation des logs # DATE=`date +"%d/%m/%Y %H:%M:%S"` echo "Lancement du programme : $DATE" > $ovh_logstart echo "Lancement du programme : $DATE" > $ovh_logend DATE=`date +"%d/%m/%Y %H:%M:%S"` clear echo "Boucle commencée : $DATE" >> $ovh_logstart echo "Boucle commencée : $DATE" echo "Source : $ovh_source" echo "Destination : $ovh_destination" echo "$ovh_source/evt_*.log" cd $ovh_source find . -name '*.log' -exec rm {} \; cd $HOME find -L $ovh_source -type f | wc -l > ./sourcesize ssh $ovh_destsrv "find -L $ovh_destpath -type f |wc -l" > ./destsize sourcesize=$(cat ./sourcesize) destsize=$(cat ./destsize) echo "ovhsource : $sourcesize - Destination : $destsize" if [ $sourcesize -eq $destsize ] then echo "Rien à transférer" sleep 1000 else echo "Transfert vers OVH" DATE=`date +"%d/%m/%Y %H:%M:%S"` echo "Transfert vers OVH commencé : $DATE" >> $ovh_logstart rsync -avrz --delete-after -L -e ssh $ovh_source/* $ovh_destination DATE=`date +"%d/%m/%Y %H:%M:%S"` echo "Transfert vers OVH terminé : $DATE" >> $ovh_logend fi DATE=`date +"%d/%m/%Y %H:%M:%S"` echo "Boucle terminée : $DATE" >> $ovh_logend done