"Comment accélérer l'encodage d'une vidéo en utilisant plusieurs ordinateurs sous GNU/Linux"
Ce tutoriel est destiné à un large public, c'est pourquoi je l'ai volontairement vraiment détaillé. J'apprécie quotidiennement ce mode cluster, et je souhaite le faire découvrir à un maximum de passionnés. Les utilisateurs plus expérimentés sous Linux/Ubuntu pourront sauter de nombreuses étapes, ou bien me corriger si des erreurs se sont glissées dans cette présentation.
Transcode est un outil très puissant permettant de manipuler les fichiers multimédia (vidéo / audio).
Il peut, entre autres, vous permettre d'encoder vos DVD dans un format compressé pour vos sauvegardes personnelles. Son utilisation se fait en ligne de commande.
Dvdrip est une interface graphique de Transcode facilitant ainsi son utilisation. Il intègre le mode cluster ou "grappe" en français.
Le clustering est une technique permettant de combiner plusieurs ordinateurs lorsque de nombreux calculs sont à effectuer, chaque machine connectée s'appelle « nœud » ou node en anglais. Dans notre cas, nous allons créer un réseau local NFS / SSH (réseau local classique Linux) et laisser le démon cluster répartir le travail sur tous les ordinateurs de ce réseau. Le temps d'encodage sera donc plus faible. À ma connaissance il n'y a pas de limite du nombre de PC connectés.
Voilà un aperçu de ce que l'on peut obtenir avec un réseau de 3 PC, les « nœuds » correspondant aux machines connectées.
Sur mon installation, l'encodage d'un film me prenait 4h avec mon ordinateur le plus récent. Maintenant en ajoutant mes deux autres PC cela ne prend que 2h20 environ. Ça vaut le coup de s'y mettre. La configuration de mes PC figure sur le schéma un peu plus bas.
Vous pouvez utiliser des ordinateurs de puissance différente, même les vieilles machines qui traînent dans un coin de votre grenier. Tout le travail effectué par celles-ci, sera toujours ça de moins à faire par vos bêtes de course. Il est quand même préférable d'avoir un réseau homogène, constitué de PC de puissance égale, nous verrons plus tard pourquoi.
* Une carte réseau Fast Ethernet 10/100 Mbps reconnue et fonctionnelle sur chaque ordinateur. * Un routeur ou un switch. * Le tout relié par des câbles Ethernet droits RJ45
Voici un schéma qui représente globalement ce que nous souhaitons réaliser. Pour me faciliter la tâche je me suis basé sur mon propre réseau local, à savoir un réseau de 3 PC derrière un routeur et j'ai remplacé les noms de machines par PC1 PC2 et PC3 et les noms d'utilisateurs par tux1 tux2 et tux3 selon la machine.
PC1 sera le PC principal qui servira de serveur et de lieu de stockage, c'est sur ce PC qu'il y aura le plus gros du travail à réaliser. Concernant PC2 et PC3, la configuration est assez rapide, à vous de rajouter autant de machines que vous pouvez, les réglages seront toujours les mêmes (PC4, PC5…).
Note: Ce schéma reste valable pour toute version supérieure d'Ubuntu.
Installer les paquets
Les applications à installer sont moins nombreuses.
apt://ssh,openssh-server,openssh-client,nfs-common,transcode,libdvdcss2,libxvidcore4,ogmtools
Je rappelle que pour une question de clarté, j'ai choisi "tux" comme nom d'utilisateur suivi du numéro du PC auquel il appartient, tux1 pour pc1… à vous d'adapter selon vos noms d'utilisateurs.
Sur chaque PC, nous allons créer le dossier "Divx" situé dans /home/tux(1,2,3…)/
Tous les fichiers à encoder seront stockés "réellement" dans /home/tux1/Divx.
Il est donc primordial que PC2 et PC3 aient le droit d'écrire dans ce dossier en utilisant le partage de fichier NFS.
gksudo gedit /etc/hosts.allow
et insérer les lignes suivantes dans le fichier texte :
portmap:192.168.2.3 192.168.2.4 lockd:192.168.2.3 192.168.2.4 mountd:192.168.2.3 192.168.2.4 rquotad:192.168.2.3 192.168.2.4 statd:192.168.2.3 192.168.2.4
Enregistrez et fermez.
gksudo gedit /etc/exports
et insérer la ligne suivante dans le fichier texte :
/home/tux1/Divx 192.168.2.3(rw,sync) 192.168.2.4(rw,sync)
Enregistrez et fermez.
sudo /etc/init.d/nfs-kernel-server restart
Voilà pour la configuration du serveur NFS sur PC1.
En cas de souci, je vous renvoie sur ce lien du Wiki.
Le duo SSH / demon cluster peut être considéré comme le chef d'orchestre de toute cette organisation. Il va permettre de faire circuler l'information et de distribuer les différentes tâches. Grâce à SSH vous pouvez prendre le contrôle de la machine PC2 tout en restant sur PC1.
Bien sûr, ce système fort pratique pour toutes manipulations à distance, nécessite l'entrée du mot de passe de l'utilisateur du PC distant. C'est ce qui nous gêne dans notre cas.
Lors d'un encodage en mode cluster, le démon cluster interroge toutes les machines (noeuds) disponibles et répartit le travail sur chacun. Seulement il faut entrer le mot de passe à chaque nouvelle connexion et nouvelle portion de travail créée. Cela devient vite infernal voire impossible à gérer.
C'est pourquoi nous allons automatiser cette tâche afin de ne plus avoir à donner aucun mot de passe, le démon cluster pourra travailler sans être bloqué.
Tout se fait de PC1 :
ssh-keygen -t dsa
à la phrase
"Enter file in which to save the key (/home/tux1/.ssh/id_dsa)" faites juste Entrée
et à la phrase
"Enter passphrase (empty for no passphrase):" entrer le mot de passe ou passphrase de votre choix (5 caractères minimum).
puis
ssh-copy-id -i ~/.ssh/id_dsa.pub tux3@192.168.2.3
mot de passe utilisateur tux3
ssh-copy-id -i ~/.ssh/id_dsa.pub tux2@192.168.2.4
mot de passe utilisateur tux2
ainsi de suite pour toutes les machines connectées….
ssh-add
et entrer le mot de passe ou passphrase donné un peu plus haut.
Si vous devez redémarrer PC1, vous devrez retaper après chaque redémarrage
ssh-add
et le mot de passe ou passphrase, c'est tout.
On arrive à la fin de la configuration de SSH. Normalement aucun mot de passe ne sera demandé lors de l'utilisation du mode cluster.
Tout à l'heure, nous avons configuré le serveur NFS sur PC1 pour partager son répertoire /home/tux1/Divx
(rappelez-vous le gksudo gedit /etc/exports), et bien maintenant nous allons donc monter (virtuellement) ce répertoire dans PC2 et PC3.
Exemple à effectuer sur la machine PC2 :
gksudo gedit /etc/fstab
et insérer la ligne suivante :
192.168.2.2:/home/tux1/Divx /home/tux2/Divx nfs rw 0 0
Enregistez et fermez.
gksudo gedit /etc/hosts.allow
portmap:192.168.2.2 192.168.2.3 lockd:192.168.2.2 192.168.2.3 mountd:192.168.2.2 192.168.2.3 rquotad:192.168.2.2 192.168.2.3 statd:192.168.2.2 192.168.2.3
Enregistrez et fermez.
Pour que le montage soit pris en compte tout de suite :
sudo mount -a
Faites un essai en créant un fichier dans /home/tux2/Divx
Normalement il devrait apparaître dans /home/tux1/Divx
Et ainsi de suite pour toutes les machines connectées.
Si tout s'est bien déroulé, nous n'avons plus à intervenir sur PC2, PC3… Tout se passe maintenant sur PC1. Allez courage, le plus intéressant arrive.
Selon la version utilisée de dvdrip, nous pouvons trouver le bouton Grappe ou Cluster, c'est la même chose.
Lancer dvdrip puis Edition –> préférences
La configuration concernant le lecteur de DVD doit être correcte. Pour la suite cela doit ressembler à ça :
Toujours dans les préférences, à "Options de la grappe" ou "Options du cluster" selon votre version :
Il est temps d'ajouter enfin toutes les machines de votre réseau, que l'on va à présent appeler "noeuds".
Grappe –> panneau de contrôle –> ajouter un noeud
D'abord on ajoute le noeud du PC principal PC1 :
Un petit "test", et vous devriez voir ceci :
On ajoute ensuite tous les autres noeuds un par un, "ajouter un noeud" toujours, mais cette fois avec ce genre de configuration, un exemple avec PC2 :
Un autre "test", et on obtient un seul "not ok" :
C'est normal, cool. Ajouter au fur et à mesure toutes les machines de votre réseau, en prenant comme exemple PC2.
Votre panneau de contrôle doit maintenant contenir tous vos noeuds/machines disponibles et ils sont pour le moment arrêtés.
Faites "démarrer le noeud" pour chacun d'eux. PC1 est le plus rapide à se connecter, pour les deux autres la connexion met une dizaine de secondes, jusqu'à se mettre en position "idle", c'est à dire prêt à travailler.
Insérer un DVD, je vous conseille de juste lire le début de ce DVD dans votre lecteur multimédia afin de déverrouiller la sécurité (grâce à libdvdcss2). Une fois que le DVD passe bien:
dvdrip –> Extraction –> lire la table des matières du DVD
Les différents plages du DVD apparaissent comme ceci:
Utilisez "visualiser les titres ou chapitres sélectionnés" pour être sûr de sélectionner la bonne plage. Pour cet essai, prenez plutôt une plage de courte durée 5 à 10 minutes, de façon à faire la procédure en entier en peu de temps.
Prévoyez au moins 7 Go de libre (film complet) sur le disque dur de PC1
Quand vous avez sélectionné votre plage
–> faites "extraire les titres ou chapitres sélectionnés"
L'extraction commence.
Pendant l'extraction, profitez-en pour regarder sur PC2 et PC3 dans leur /home/tux(2et3)/Divx respectif.
Le fichier "22" devrait être présent.
Il faut garder à l'esprit que les répertoires /home/tux2/Divx et /home/tux3/Divx ne sont rien d'autre qu'un accès direct à /home/tux1/Divx. Rien n'est écrit sur le disque dur de PC2 et PC3. Mais toute mauvaise manipulation dans le fichier "Divx" que l'on soit sur PC2, PC3… aura des répercussions sur toute la procédure.
En revanche, et c'est là que cette technique est appréciable, si une machine tombe en panne ou se bloque pour diverses raisons, à part PC1 évidemment, il n'y aura aucun problème. Le démon cluster attribuera la tâche en cours de la machine fautive à une autre machine, c'est un système très souple et très stable. Vous pourrez à tout moment arrêter n'importe quel noeud, même PC1.
Je ne rentre pas dans les détails d'encodage proprement dit : redimensionnement, sous-titres… chacun ses goûts.
Juste pour information, le trio : conteneur avi –> xvid4 mode pass 2 –> Sons AC3 fonctionne parfaitement en mode cluster.
En revanche, j'ai rencontré des problèmes lors de l'encodage du son en MP3 et Ogg
J'attends des retours là dessus.
Le mode cluster ne permet pas la prévisualisation d'un échantillon. Pour cela vous utiliserez uniquement PC1.
Lorsque vous avez suivi les précédentes étapes, et que vos paramètres sont bons :
Encoder –> "ajouter à la grappe" en bas à droite, cette fenêtre apparaît:
Ici je vous conseille de mettre Oui pour la suppression des fichiers avi temporaires, en revanche Non pour les fichiers Vob, car si votre encodage ne vous convient pas, vous pourrez le reprendre sans problème. Validez.
Vérifier que vos noeuds sont démarrés et faites "Programmer ce projet" ou "Schedule Project". Normalement tous vos noeuds doivent se mettre au travail, comme ceci:
Elle est pas belle la vie!!!
Comme je l'ai annoncé dans la section matériel, tout ordinateur même le vieux coucou peut être utile dans ce genre de configuration, car tout calcul effectué par celui-ci ne sera pas à faire par vos bêtes de course. Comme c'est un système très souple, le petit PC peut commencer une tâche tranquillement, mais il n'est pas obligé de la finir, vous pouvez sans problème le "stopper", un autre PC prendra le relais.
C'est pourquoi, je vous conseille de surveiller la fin de l'encodage, car il se peut (c'est très fréquent) que vos PC puissants aient fini toutes leurs tâches et soient en position d'attente, pendant que votre petit PC poussif peine à finir son travail.
Le mode cluster perd tout son sens car vous allez peut-être attendre des heures.
Stoppez le noeud du PC poussif, puis les autres, en ne laissant que celui de la machine la plus puissante, c'est celui-ci qui prendra le relais et qui finira le travail beaucoup plus rapidement.
Dans le même cas de figure, plutôt que d'être en position d'attente, les PC puissants sont déjà passés au projet suivant, laissant seul le petit PC finir le travail.
Dans ce cas stoppez "tous les noeuds" –> sélectionnez le projet à finir (en haut du panneau de contrôle) et redémarrez le PC le plus puissant en premier, il finira le travail. Puis redémarrez tous les autres noeuds qui se remettront au boulot sur les autres projets.
ssh-add
et ré-entrer le mot de passe :
Redémarrez portmap
sudo /etc/init.d/portmap restart
Vérifiez que le montage du dossier "Divx" sur les PC distants fonctionne bien. Assurez-vous qu'un firewall ne bloque pas l'accès.
Si toujours rien lire la suite…
Si le démon refuse de démarrer
Redémarrez dvdrip
Redémarrez portmap
sudo /etc/init.d/portmap restart
Si toujours rien
dvdrip-master 2
Le message vous donne des informations sur les noeuds, les projets en cours…. Si vous avez le message suivant:
"Changement de fichier du projet" '/home/tux1/.dvdrip-master/projects/00000……22(exemple).rip'
Allez dans : /home/tux1/.dvdrip-master/projects/ Et supprimez le projet en question.
Puis dvdrip –> Grappe –> panneau de contrôle.
Mails: julian_duhamel@yahoo.fr
Pour toutes remarques sur ce tutoriel:
http://forum.ubuntu-fr.org/viewtopic.php?pid=43136#p43136
Site Officiel de dvdrip: http://www.exit1.org/dvdrip/index.cipp
Site Officiel francophone Ubuntu: http://www.ubuntu-fr.org/
Forum francophone Ubuntu: http://forum.ubuntu-fr.org/
Le site Funix: http://www.funix.org/fr/linux/conversion.htm
Pour tout savoir sur SSH: http://doc.ubuntu-fr.org/ssh
Contributeurs : Rédigé par Julian