Ceci est une ancienne révision du document !
Comment utiliser Mplayer en esclave ?
Introduction
Mplayer est un puissant logiciel de lecture de vidéos et de musique. Ce tutoriel explique comment l'utiliser en tant qu'esclave, autant pour la musique que pour la vidéo. Cette technique permet de se passer d'une interface graphique et d'ainsi d'économiser de la mémoire RAM, de s'économiser de la place à l'écran (et de faire über-geek). De plus, cette option permet un contrôle du lecteur via de simples scripts shell.
Cette méthode est plutôt déconseillée aux adeptes de solutions «usine à gaz», qui préfèreront alors une interface graphique complète, il existe de nombreux lecteurs de musique et lecteurs vidéos de qualité.
Prérequis
Cette utilisation de mplayer est dite en tant que «backend», c'est-à-dire que mplayer devient contrôlable par n'importe quel programme ou script. C'est cette deuxième solution qui va nous intéresser. Pour suivre ce tutoriel, il faudra donc de rapides connaissance sur les scripts shell. La lecture du man de mplayer permettra une meilleure compréhension de la suite.
man mplayer man bash
il faut aussi comprendre les notions de flux, et de redirection de flux.
Pour continuer le tutoriel, assurez-vous d'avoir installé le paquet mplayer (apt://mplayer), mkfifo. Munissez vous de votre terminal favoris, d'un peu de patience, et de courage .
Let's go ?
Trouver la commande
Tout d'abord, il faut trouver la commande adéquate pour lancer mplayer. Le manuel nous informe qu'il faut utiliser l'argument –slave.
Cette option enclenche le mode esclave. Ceci est prévu pour l’utilisation de MPlayer en tant que base (backend) pour d’autres programmes. Au lieu d’intercepter les évènements clavier, MPlayer va lire ses commandes séparées par un retour chariot (\n) via l’entrée stdin. NOTE : Voir −input cmdlist pour une liste des commandes esclaves, et DOCS/tech/slave.txt pour leur description.
Il faudra, comme indiqué aussi utiliser l'argument –input file="chemin/vers/mon/fichier/de/controle". Cette fois-ci, je vous laisse lire le manuel :p. De même, pour plus de clarté, l'argument –quiet sera passé, pour un stdout plus «épuré».Voici ce que vous devriez obtenir après une petite torture mentale :p :
mplayer -slave -input file=/tmp/music-control
NB : l'argument -shuffle permet de rendre la playlist aléatoire ,-idle évite à mplayer de quitter si rien n'est joué et -playlist permet de préloader une playlist.
Utiliser la commande
Comme indiqué dans le man, cette commande implique l'utilisation d'un fifofile. C'est à dire un «fichier» qui servira à rediriger ce qui rentre dans son stdin vers celui de mplayer. Ainsi, les commandes passées au fifofile seront transmises à mplayer, qui les exécutera. Pour obtenir une liste des commandes disponibles, c'est :
mplayer -input cmdlist
Le principe est donc simple, il suffit de passer des commandes à notre fifofile ce qui influencera le comportement de mplayer.
Mise en pratique
Nous allons tout d'abord créer notre fichier fifofile. Pour cela, simplement exécuter la commande "mkfifo".
mkfifo /tmp/music-control
Ensuite, il faut lancer la commande de mplayer. Avoir un lecteur en background n'a d'interêt que s'il est en background (tâche de fond, non dépendante d'un terminal). Pour ce faire, ajouter un & en fin de ligne.
Cependant, le stdout et le stderr nous intéressent, car ils permettent de récupérer le nom du titre joué, par exemple dans le cas d'une chanson (cf fixme). Nous allons donc les rediriger vers deux fichiers distincts.
mplayer -slave -input file=/tmp/music-control -shuffle -playlist ~/Musique/ma-playlist.m3u -idle &> ~/.mplayer/mplayer.log 2> ~/.mplayer/mplayer-err.log
Pour contrôler mplayer, il suffit de rediriger le stdout d'un echo vers le stdin du fifofile.
echo 'macommande' > /tmp/music-control
Pour liste toutes les commandes, c'est mplayer -input cmdlist
. On notera "seek" pour se déplacer dans la chanson, "volume", "loadfile" pour ouvrir un fichier, "loadlist" pour ouvrir une playlist. Pour plus d'infos : en.
Comment récupérer les infos sur le média en cours de lecture ? Une méthode consiste à rechercher à coup de "grep", de "tail" et de "cut" les infos sur la dernière chanson :
grep Title ~/.mplayer/mplayer.log | cut -d ":" -f 2 | tail -n 1
Aller plus loin
Cet aspect de mplayer nous permet de le contrôler via des scripts bash. Pour ne citer qu'eux, il est possible
- de passer à la chanson suivante (en utilisant une fonction détournée de seek)
#!/bin/sh # Go to next file echo 'seek 100 1' > /tmp/music-control exit 0
- de mettre mplayer en pause
#!/bin/sh # Pause or start mplayer playback echo 'pause' > /tmp/music-control exit 0
- d'arrêter mplayer
#!/bin/sh # Exit mplayer echo 'quit' > /tmp/music-control exit 0
Ces petits scripts, combinés par exemple à zenity, permettent un excellent contrôle de mplayer. On notera par exemple la possibilité de créer un petit script qui affichera un navigateur et permettra d'ouvrir un morceau, et de le jouer dans mplayer. Allez je suis gentil, je vous le donne aussi :p
#!/bin/sh # Open a file echo "loadfile '`zenity --question --text="If you play another track, the playlist will end \!" && zenity --file-selection --title "Select a file to be play now"`' 0" > /tmp/music-control exit 0
De même, une méthode pas très conventionnelle permet de récupérer dans le fichier log le titre de la dernière chanson. Exemple (décidément, je vous donne tout !), et pardonnez la mauvaise qualité de ces scripts.
#!/bin/sh # Find nearly everything about the track cd ~/.mplayer title=`grep Title mplayer.log | cut -d ":" -f 2 | tail -n 1` artist=`grep Artist mplayer.log | cut -d ":" -f 2 | tail -n 1` album=`grep Album mplayer.log | cut -d ":" -f 2 | tail -n 1` year=`grep Year mplayer.log | cut -d ":" -f 2 | tail -n 1` genre=`grep Genre mplayer.log | cut -d ":" -f 2 | tail -n 1` #display it in a window zenity --info --text="`echo $title"\n"$artist"\n"$album"\n"$year"\n"$genre`" --title="Current song" --no-wrap
Infos utiles
A l'aide de xbindkeys, on peut facilement arriver à tout contrôler au clavier !
- Si vous êtes fainéants, vous trouverez des scripts pré-fait pour pas mal de fonctions
Contributeurs: blackbg