blog.bressure.net

Carnet professionnel d'un informaticien

Application, Paramétrage

Automatisation encodage vidéo pour N900

admin

L’objectif de ce billet et de mettre en œuvre un processus de transfert de vidéo depuis un répertoire d’un PC vers le N900 avec un ré-encodage des fichiers afin d’en assurer une lecture optimale sur le terminal. Ce cas d’utilisation s’avère utile quand on veut visionner des programmes TV enregistrés par exemple.

Nous disposons sur le PC d’un répertoire dans lequel on va mettre les vidéos à encoder pour transfert sur le N900. Disons que ce répertoire est le suivant:

/home/thierry/Vidéos/n900

L’idée est de passer au crible le répertoire ci-dessus à la recherche de fichier à convertir. Comme les fichiers ont une résolution d’image variable, nous allons utiliser un script qui sélectionne le bon encodage en fonction du fichier. Le billet précédent montre une correspondance entre chaine de la TNT par ADSL et la taille du fichier encodé.

Le fichier /home/thierry/Vidéos/n900/convert_all.sh suivant contient le script d’encodage:

#!/bin/bash

echo "***********************************"
echo "*                                 *"
echo "*    video converter for N900     *"
echo "*                                 *"
echo "***********************************"



INPUT_DIR=.
OUTPUT_DIR=$INPUT_DIR/converted

# do not allow concurrency
if [ -e "$INPUT_DIR/.lock" ]; then
 exit 1
else
 touch "$INPUT_DIR/.lock"
fi

function convert_file {
 original_def=$2
 original_file=$1
 converted_file="$OUTPUT_DIR/$original_file.mp4"

 if [ -e "$converted_file" ]; then
 return 1
 fi

 if [ $original_def == "mpeg" ]; then
 SIZE="400x480"
 elif [ $original_def == "dvd" ]; then
 SIZE="592x480"
 elif [ $original_def == "hd" ]; then
 SIZE="640x480"
 else
 echo "format $original_def inconnu"
 return 1
 fi

 (ffmpeg -i "$original_file" -acodec libfaac -vcodec libx264  -vpre hq -vpre baseline -crf 25 -maxrate 1000k -bufsize 2000k -threads 0 -flags2 -fastpskip  -s "$SIZE" "$converted_file" ) &
 wait
 if [ $? -eq 0 ]; then
 rm "$original_file"
 fi

}

find $INPUT_DIR -maxdepth 1 -type f ( -name "France 3*.ts" -o -name "France 4*.ts" -o -name "France 5*.ts" -o -name "La Chaîne*.ts" -o -name "NT1*.ts" -o -name "TMC*.ts" ) -print | ( while read i; do convert_file "$i" mpeg; done )

find $INPUT_DIR -maxdepth 1 -type f ( -name "DirectStar*.ts" -o -name "RTL9*.ts" -o -name "AB*.ts" ) -print | ( while read i; do convert_file "$i" dvd; done )

find $INPUT_DIR -maxdepth 1 -type f ( -name "Arte*.ts" -o -name "Direct 8*.ts" -o -name "France 2*.ts" -o -name "NRJ*.ts" ) -print | ( while read i; do convert_file "$i" hd; done )

rm "$INPUT_DIR/.lock"

Ce script encode les fichiers vers le sous répertoire /home/thierry/Vidéos/n900/converted en supprimant les fichiers originaux après leur conversion.

L’automatisation de la conversion se fait par un script que l’on va mettre dans /etc/crond.hourly/convertReplayN900 dont voici le contenu:

#!/bin/sh
N900_DIR=/home/thierry/Vidéos/n900
cd $N900_DIR
./convert_all.sh
chown -R thierry:thierry  ./converted

Ce script sera lancé toutes les heures. Il exécutera le premier script vu plus haut puis changera le propriétaire des fichiers encodés (ici avec l’utilisateur thierry) car sinon les fichiers encodés appartiendront à root.

Il ne reste plus qu’à plannifier le transfert des fichiers encodés vers le N900. Comme d’habitude, ce sera au terminal d’initier le transfert car il est plus facile d’avoir un deamon rsync sur le PC que sur le N900. On suppose donc que le répertoire contenant les fichiers encodés est accessible par le module videos du serveur rsync.

Voici le script à utiliser depuis le terminal pour y rapatrier les fichiers convertis:

#!/bin/sh
rsync -v --remove-sent-files --ignore-existing 192.168.0.12::"videos/n900/converted/*.mp4" /home/user/MyDocs/.videos/replay

Le lecteur prendra soin de modifier l’adresse 192.168.0.12 par celle du PC où se trouve le serveur rsync.

Tags:

Comments

    1. Bonsoir,

      Vous avez-raison. Cela est dû au fait sur l’algorithme de compression utilise des blocs de 16 pixels donc les dimensions doivent être multiple de 16 pour optimiser le décodage.
      Pouvez-vous nous faire partager la modification en publient un patch ?

      Cdt.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back to top