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).