Automatically encode your videos on Raspberry Pi

Warning : This article has been automatically translated by Google Translate



Convertir automatiquement vos vidéos sur le Raspberry Pi

Un petit article en marge de la série pour le Raspberry Pi Home Server. En effet (attention je raconte ma vie !), j’ai changé de téléphone. Je suis passé d’un modèle de la marque à pomme à un modèle de la marque de fenêtre. Certains d’entre vous seront surement choqués de ce choix mais je ne supporte plus la politique de la marque. Alors comme on dit “Si t’es pas content va voir ailleurs” 🙂

Bref ! En attendant lorsque j’ai voulu mettre mon épisode 6 de la saison 3 de Walking Dead sur mon Lumia 920, ben pas moyen car le format n’est pas reconnu. Sur l’iPhone, j’avais un player qui pouvait lire tous les formats mais là, pas moyen d’envoyer le fichier.

En bon geek, plutôt que de regarder sur le Windows Store si une application existe pour ça (on peut rêver vu le nombre d’applis), je me suis dit “Pourquoi ne pas demander ça à mon précieux ?”

Et nous y voilà : j’aimerai pouvoir par Samba envoyer un fichier dans un répertoire, que le système le détecte et en fasse la conversion automatiquement. Cerise sur le gâteau, j’aimerai capper la charge CPU pour ne pas prendre toutes les ressources. Alors oui ça va mettre du temps mais je suis pas pressé 😉

Assez de blabla, passons aux choses sérieuses !

  1. Créer les répertoires de dépôt des fichiers et de conversion (à personnaliser bien évidement !)
    mkdir /media/usbdrive/share/Convert/Input
    
    mkdir /media/usbdrive/share/Convert/Output
  2. Changer les droits pour pouvoir y stocker les fichiers par Samba
    cd /media/usbdrive/share
    
    chown -R guest:guest Convert
  3. Installer mencoder
    apt-get update && apt-get install mencoder
  4. Installer cpulimit. Cela va nous permettre de limiter mencoder à 50% de la charge CPU.
    apt-get update && apt-get install cpulimit
  5. Créer un fichier convert_files.sh avec le contenu suivant
    #!/bin/bash
    
    INPUT_PATH="/media/usbdrive/share/Convert/Input";
    
    OUTPUT_PATH="/media/usbdrive/share/Convert/Output";
    
    MAX_MENCODER_CPU_USAGE=50
    
    # Are we encoding files ?
    
    CONVERT_RUNNING=`ps -ef | grep mencoder | grep -v grep`;
    
    if [ "$CONVERT_RUNNING" == "" ]
    
    then
    
     # No, so let's have a look in INPUT_FILES
    
     LIST_FILES=`ls $INPUT_PATH`;
    
     for FILE in $LIST_FILES
    
     do
    
     INPUT_FILE="$INPUT_PATH/$FILE"
    
     # Detect mime type of the file
    
     MIME_TYPE=`file -i -F ";" $INPUT_FILE | awk -F "; " '{print $2}'`;
    
     # Perform actions based on mime type
    
     case $MIME_TYPE in
    
     "video/x-msvideo" )
    
     # Encoding only if output path does not already exist
    
     OUTPUT_FILE="$OUTPUT_PATH/$FILE.mp4"
    
     if [ ! -f $OUTPUT_FILE ];
    
     then
    
     # Limit CPU usage of mencoder
    
     CPULIMIT_RUNNING=`ps -ef | grep cpulimit | grep -v grep`;
    
     if [ "$CONVERT_RUNNING" == "" ]
    
     then
    
     cpulimit --limit=$MAX_MENCODER_CPU_USAGE --exe=mencoder -b
    
     fi
    
     # Encode video
    
     mencoder $INPUT_FILE -o $OUTPUT_FILE -oac copy -ovc lavc -lavcopts vcodec=mpeg1video -of mpeg
    
     # stop cpulimit running
    
     killall cpulimit
    
     fi
    
     ;;
    
     * ) echo "Nothing to do with $FILE (mime-type:$MIME_TYPE)";
    
     ;;
    
     esac
    
     done
    
    else
    
     # Yes, wait previous run to finish
    
     echo "Mencoder running";
    
    fi
  6. Reste à lancer le script régulièrement via crontab. Modifier le fichier /etc/crontab en ajoutant la ligne suivante (exécution toutes les 5 minutes)
    */5 * * * * root /media/usbdrive/share/Convert/convert_files.sh

Voilà. Toutes les 5 minutes on va vérifier si on n’encode pas de vidéos. Si c’est pas le cas, on vérifie si des vidéos sont à encoder.

N’hésitez pas à me donner votre avis sur la méthode et le script. Il y a surement moyen d’améliorer ça, surtout le user root, utilisé pour la conversion…

Vous aimez cet article ? Supportez-moi sur Patreon!

You may also like...