Archives par étiquette : bash

Générer une vidéo simple à partir d’images

Parfois il est utile de pouvoir regrouper des images sous forme d’une vidéo MP4 toute simple, juste pour faire un diaporama. Vous allez me dire, Google Photo le fait, oui MAIS ce truc a la mauvaise idée de recadrer, et donc de zapper la moitié de vos captures d’écran par exemple, pas génial donc.

Voici le script generevideo.sh qui va tout solutionner :

#!/bin/sh

# 1. Configuration du nom de sortie
printf "Nom de la vidéo (par défaut 'video.mp4') : "
read input_name
if [ -z "$input_name" ]; then
    OUTPUT="video.mp4"
else
    # On ajoute .mp4 si l'utilisateur l'a oublié
    case "$input_name" in
        *.mp4) OUTPUT="$input_name" ;;
        *)     OUTPUT="$input_name.mp4" ;;
    esac
fi

TEMP_LIST="list_clips.txt"
DUR=3
printf "" > "$TEMP_LIST"

# 2. Découverte et choix du fichier audio
echo "Recherche de fichiers audio..."
i=1
AUDIO_FILES=$(ls *.mp3 2>/dev/null)

if [ -z "$AUDIO_FILES" ]; then
    echo "Aucun fichier .mp3 trouvé dans le dossier."
    AUDIO_INPUT=""
else
    echo "Choisissez la musique (tapez le numéro ou Entrée pour aucune) :"
    for f in $AUDIO_FILES; do
        echo "$i) $f"
        i=$((i + 1))
    done

    printf "Votre choix : "
    read choix

    if [ -n "$choix" ]; then
        AUDIO_INPUT=$(echo "$AUDIO_FILES" | sed -n "${choix}p")
    fi
fi

if [ -n "$AUDIO_INPUT" ]; then
    echo "Musique sélectionnée : $AUDIO_INPUT"
else
    echo "Aucune musique sélectionnée."
fi

# 3. Création de clips individuels (respect total de la taille d'origine)
images=$(ls tmm* 2>/dev/null | sort -V)

for f in $images; do
    if ffmpeg -v error -i "$f" -f null - 2>/dev/null; then
        echo "Traitement de $f..."
        # On force l'arrondi à 2px (parité obligatoire) sans changer la taille réelle
        ffmpeg -y -loop 1 -i "$f" -t "$DUR" \
            -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2:(ow-iw)/2:(oh-ih)/2:black,format=yuv420p" \
            -c:v libx264 -pix_fmt yuv420p -r 25 "part_$f.ts"
        
        echo "file 'part_$f.ts'" >> "$TEMP_LIST"
    fi
done

# 4. Assemblage final
if [ -s "$TEMP_LIST" ]; then
    echo "Fusion finale vers $OUTPUT..."
    if [ -n "$AUDIO_INPUT" ] && [ -f "$AUDIO_INPUT" ]; then
        ffmpeg -y -f concat -safe 0 -i "$TEMP_LIST" -i "$AUDIO_INPUT" \
            -c copy -c:a aac -shortest "$OUTPUT"
    else
        ffmpeg -y -f concat -safe 0 -i "$TEMP_LIST" -c copy "$OUTPUT"
    fi
else
    echo "Erreur : Aucun fichier valide n'a été traité."
    exit 1
fi

# 5. Nettoyage et rapport
rm -f part_tmm* "$TEMP_LIST"
echo "------------------------------"
echo "Fichiers images utilisés :"
echo "$images"
echo "------------------------------"
if [ -n "$AUDIO_INPUT" ]; then
    echo "Audio utilisé : $AUDIO_INPUT"
fi
echo "Vidéo générée : $OUTPUT"
echo "vidéo terminée"

Chaque image s’affichera durant 3 secondes, mais tu peux sans soucis régler ce temps à volonté depuis le script. Tu peux même ajouter un fichier audio au format mp3, le script demandera quel fichier utiliser.
Place le script dans le répertoire de tes images, lance le script avec bash generevideo.sh . Il va demander le nom de la video (video.mp4) par défaut, et le fichier audio à choisir s’il existe.

Vous obtiendrez un list.txt qui listera les images détectées, pratique pour vérifier si besoin.
Ce script a été initialement généré par Gemini, puis modifié.

RouterOS : gestion du ping et alerte

Comment surveiller une IP sur votre routeur RouterOS 7.xx ? Un simple script, ping, se chargera de vous prévenir par email (à condition d’avoir configuré votre envoi d’email dans /tools/e-mail, cf plus bas dans ce billet.

Voici déjà le script qui va tester 3 fois l’adresse 192.168.1.21, et en cas de non-réponse envoyer un email aux deux destinataires, recipient et recipient1 mentionnés dans le script :

    :local targetIP "192.168.1.21";
    :local recipient "monemail@chezmoi.fr ";
    :local recipient1 "secondemail@chezlui.fr";
    :local subjectFail ("ALERTE PING HS ");
    :local bodyFail ("Email automatisé pour vous indiquer que le module ne répond plus. \r\nMerci de bien vouloir vérifier le branchement ethernet et l'alimentation. \r\nVous pouvez le  débrancher, et le rebrancher. \r\nSi l'alerte persiste, merci de contacter votre prestataire.\r\n\r\n
*** Ceci est un message automatisé, ne pas répondre ****");
    :local logMessage ("Test ping vers " . $targetIP);
    :local success 0
    :for i from=1 to=3 do={
        :if ([/ping $targetIP count=1] = 1) do={
            :set success ($success + 1)
        }
    }
    :if ($success = 0) do={
        /tool e-mail send to=$recipient subject=$subjectFail body=$bodyFail
        /tool e-mail send to=$recipient1 subject=$subjectFail body=$bodyFail
    }

Pour ce qui est de la configuration de l’email dans /tools/e-mail :

        server: mail.monserveur.fr        
          port: 465                    
           tls: yes                    
           vrf: main                   
          from: noreply@chezmoi.fr     
          user: alerte@monserveur.fr
      password: LePenEstNulle;;    

Ici, nous avons créé un email alerte@monserveur.fr pour pouvoir expédier. L’envoi se fait sur mail.monserveur.fr mais cela changera selon votre configuration : smtp, imap, etc. tout est possible, pensez à modifier les paramètres.

Vous n’avez désormais plus qu’à exécuter le script ping toutes les 12 heures par exemple :

/system scheduler add name=ping-schedule \
    interval=12h \
    on-event=ping \
    start-time=startup

Et voilà, en cas de coupure vous recevrez une alerte email sur les 2 emails pré-configurés.
Pratique non ?

Wifipak Mini + imprimante : développements en labo

De nouveaux développements sont en cours pour le hotspot Wifipak Mini livré avec imprimante de codes.

Désormais, il vous est possible de générer des codes sur mesure avec ou sans impression :

Dans ce cas, retenez le code, il ne sera pas imprimé, pas affiché, juste transmis à votre gestionnaire Wifipak Mini et c’est tout : pratique pour économiser du papier ! De même, les codes générés manuellement peuvent fonctionner sur une durée d’une année : là encore, c’est très pratique si vous avez des utilisateurs sur une longue durée, un camping par exemple, ou des résidences hôtelières.

En développement, nous avons un système permettant de générer des coupons sous forme de planche à imprimer sur une imprimante ordinaire :

Pour le moment nous n’avons pas modifié les quantités de 1, 5 et 10 coupons, le temps de valider le processus en labo. Une fois le choix effectué, par exemple 10 codes d’une journée, vous obtenez l’affichage d’une planche sous forme d’image :

Cette planche peut être imprimée sur votre laser ou jet d’encre du bureau, vous pouvez également faire un clic droit pour la sauvegarder sous forme d’image et l’imprimer ultérieurement.La fonctionnalité sera sans doute disponible sous forme de 10, 20 ou 30 codes. Il nous faut maintenant améliorer le temps de traitement, une génération de 30 codes prenant actuellement environ 30 secondes.

Un script interne a également été remis à jour, script qui se charge de gérer les utilisateurs expirés et qui pouvait poser quelques soucis à certains moments.

Toutes ces fonctionnalités seront gratuitement disponibles, le moment venu, aux utilisateurs actuels de Wifipak Mini + imprimante qui en feront la demande : nous vous demanderons certains accès à distance sur votre matériel, le temps de venir injecter les nouveaux fichiers (ssh, ftp, http essentiellement).

Pour finir, le développement d’un module tactile est toujours en cours : appuyez sur un petit écran de 7″ pour générer des codes d’une heure, un jour, une semaine, ou un mois, avec des quantités de 1, 5, ou 10 pièces.

Sur ce projet novateur, nous avons besoin de vérifier la bonne tenue en charge du petit Raspberry Pi 3 utilisé, tenue en charge de son alimentation également, et tester la résistance de l’ensemble sur une longue durée. Rien n’est encore fait, mais le prototype utilisé en labo est opérationnel, très simple et souple d’emploi : posez le sur un comptoir, et imprimez sans avoir à utiliser votre ordinateur ! Difficile de faire plus simple !

 

Raspberry Pi : un clignotant 433 MHz

Toi aussi tu aimerais avoir une déco lumineuse moche pour les fêtes de fin d’année ? Toi aussi tu voudrais t’improviser décorateur de lumière, à l’instar de certains de tes voisins qui ont salement balancé leurs guirlandes lumineuses sur un pauvre bout d’arbre ou sur les gouttières (j’ai des noms…) ?

Toi aussi tu aimerais que tout ceci clignote, un peu comme les pages html des années 90 ? La solution existe, si tu utilises un Raspberry Pi muni d’une platine 433 MHz pour venir télécommander des prises elles aussi 433 MHz : plus de fils qui trainent partout, les prises télécommandées permettent d’aller brancher les guirlandes là où bon te semblera. Elle n’est pas belle la life dis donc, p’tit veinard ? 🙂

Je vous passe l’installation des outils 433 MHz (433Utils), cela a été décrit en long en large et en travers ici par exemple, pour aller directement sur le script cligno.sh utilisé, d’une simplicité enfantine :

#!/bin/bash
while true
do

    # ON

  sudo /root/433Utils/RPi_utils/codesend 4199697
  sleep .2

    # OFF

  sudo /root/433Utils/RPi_utils/codesend 4199700
  sleep .2
done

Modifiez la ligne sleep .2 par toute autre valeur pour réduire le délai de clignotement, sleep 1 pour une seconde entre chaque action par exemple.

Lancez le script avec sh cligno.sh et vous voici en mode sapin de Naël ! Les codes employés ici sont ceux d’une prise codée en canal 1 et prise D (1 sur ON, D sur ON) avec le kit Phenix. A vous de les adapter pour d’autres matériels, voir de rajouter d’autres envois de codes pour activer des prises en séquence. Le kit Phenix permet par exemple de valider plusieurs prises sur un même code : un envoi et vous activerez 2, 3, 4, ou 10 prises, selon vos besoins, de quoi illuminer tout un jardin !

Bon ok, je me suis amusé, ceci est d’une simplicité enfantine, simplifié à l’extrême, la preuve qu’on peut arriver à des résultats sympas sans trop complexifier, sans balancer du java ou du php de partout. Oh bien entendu, c’est peu discret, le clac des relais sait se rappeler à votre bon souvenir, impossible de poser ça tranquillement dans votre salon.

Pour simplement éclairer un bâtiment, je me suis amusé avec ce matériel, un projecteur LED de 20 W, largement suffisant pour des effets lumineux sympathiques.

projecteur_LED

A vous de jouer !