Lire des images et des vidéos sans serveur X (dans un TTY)
07 Apr 2012Saviez-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
(f
rameb
uffer
i
mageviewer) :
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).
Héhé, que de bons outils. Il y a aussi links qui a une option de compilation pour afficher les images avec le frame buffer.
J’ai passé quelques mois avec un système sans X il fut un temps, et ça se fait à peu près bien.