Lire des images et des vidéos sans serveur X (dans un TTY)
Saviez-vous qu’il était possible de lire des images et des vidéos dans un TTY, sans serveur X ? Je ne parle pas de les afficher en ASCII-art, mais bien de les afficher « graphiquement » :
Je ne le savais pas jusqu’à aujourd’hui. En fait, c’est possible grâce à des programmes qui écrivent directement dans le framebuffer.
Pour tester les outils suivants, lancez un TTY grâce aux raccourcis Ctrl+Alt+F[1-6]. Pour revenir à votre session graphique, faites Ctrl+Alt+F7 (sur certaines distributions, par défaut la session graphique est plutôt accessible avec Ctrl+Alt+F1, Ctrl+Alt+F8 ou Ctrl+Alt+F9, essayez…).
Images
Pour afficher des images, il faut installer le paquet fbi
(framebuffer imageviewer) :
sudo apt-get install fbi
Puis simplement exécuter :
fbi monimage.jpg
ou même
fbi *.jpg
(PgUp et PgDown permettent de naviguer entre les images)
Cet outil est vraiment très rapide (sauf pour le zoom). C’est un peu l’équivalent de feh qui, lui, fonctionne en mode graphique.
Vidéos
Pour les vidéos, nous avons besoin de MPlayer :
sudo apt-get install mplayer
En lançant dans un TTY :
mplayer mavidéo.avi
MPlayer choisit le pilote fbdev
. Nous pouvons aussi le choisir explicitement :
mplayer -vo fbdev mavidéo.avi
Par contre, la vidéo s’affiche à sa taille originale, alors que nous la voulons en plein écran. Il faut donc la mettre à l’échelle, grâce aux paramètres de mplayer
. Sur un écran 1680×1050 par exemple :
mplayer -fs -vf scale=1680:-3 mavidéo.avi
-3
permet de calculer la seconde composante à partir de la première et de l’aspect-ratio. C’est dans le man :
0: largeur/hauteur dimmensionnées à d_width/d_height -1: largeur/hauteur originales -2: Calcule l/h en utilisant l'autre dimension et le rapport hauteur/largeur redimensionné. -3: Calcule l/h en utilisant l'autre dimension et le rapport hauteur/largeur original. -(n+8): Comme -n ci-dessus, mais en arrondissant les dimensions au plus proche multiple de 16.
Sur mon pc portable, j’arrive sans problème à lire dans un TTY une vidéo 1080p (j’ai testé avec Big Buck Bunny en MP4, redimensionnée lors de la lecture à la taille de mon écran, 1680×1050).
Par contre, sur une machine moins puissante (une EeeBox, qui hébergeait ce blog par le passé), MPlayer saccade, même sur des vidéos basse définition, que VLC lit sans problèmes.
Pour améliorer les performances de lecture de MPlayer, il est possible de changer l’algorithme de zoom logiciel, grâce à l’option -sws
. Par exemple, pour utiliser bilinéaire rapide au lieu de bicubique :
mplayer -fs -vf scale=1680:-3 -sws 0 mavidéo.avi
Avec ce paramètre, ça ne saccade plus.
Cependant, sur la EeeBox, dans ce cas les couleurs sont incorrectes apparemment à cause d’un bug de pilote vidéo Intel. J’ai donc quand même installé un serveur X avec un gestionnaire de fenêtres minimaliste, awesome. Mais c’est une autre histoire…
ASCII-art
Je vous parlais d’ASCII-art au début du billet, il est également possible de lire les images ou les vidéos en ASCII (c’est juste moins joli), grâce à des commandes d’une élégance toute particulière.
Pour les images, nous pouvons installer le paquet caca-utils
sudo apt-get install caca-utils
Puis utiliser cacaview
:
cacaview monimage.jpg
Pour les vidéos :
mplayer -vo caca mavidéo.avi
Conclusion
Je n’en revenais pas qu’il soit possible de lire des vidéos sans serveur X.
Sur une machine destinée à une utilisation multimédia (branchée sur la TV par exemple), il n’y a donc nullement besoin d’un serveur X (paradoxalement).