Obtenez des infos sur vos fichiers, en ligne de commande (ou pas)

closeCet article a été publié il y a 9 ans 7 mois 10 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Une réflexion que je me suis faite lorsqu’une fois de plus, j’étais connecté en SSH sur mon serveur et que je voulais avoir la durée d’une des trop nombreuses vidéos qui traînent dessus. Les outils sont nombreux, à peu près autant que les formats de fichiers qu’on peut rencontrer : photo, vidéo, archive, texte… Les méthodes, graphiques ou en ligne de commande, le sont aussi. Voici une sélection d’outils qu’on peut utiliser pour obtenir ces précieuses informations.

Les vidéos

Commençons par le premier type de fichiers qui m’a inspiré l’article à savoir les vidéos. Que ce soit sous Windows ou Linux, ligne de commande ou pas, il est très facile d’obtenir le poids d’une vidéo. Pour en obtenir la durée, les dimensions de l’image, les codecs utilisés, c’est déjà moins évident. Sous Windows, si tant est que le format de fichier est supporté (ce qui est le cas pour les AVI, MP4, MKV, mais pas les OGV/Webm pour ne citer que les plus répandus), un clic droit sur ledit fichier, on sélectionne propriétés, puis dans la fenêtre nouvellement ouverte, se rendre dans l’onglet « Détails » pour obtenir ces informations.

Pour les formats non supportés, mon dévolu s’est jeté sur un outil open-source et multiplateformes, à savoir MediaInfo. Il est donc utilisable sous Windows aussi bien que sous Linux, et pour ce dernier, aussi bien en ligne de commande qu’au travers de l’interface graphique. D’ailleurs, pour l’installer, plusieurs pistes :

  • Sous Windows, on télécharge l’installeur sur cette page
  • Sous Debian, à partir de Wheezy (7.x), il est inclus dans les dépôts, et un simple apt-get install mediainfo suffit.
  • Sous Manjaro/Arch, un pacman -S mediainfo fera l’affaire.

Généralement sous Linux, il faudra installer le paquet mediainfo-gui pour disposer de l’interface graphique.

Pour s’en servir, au choix : soit vous demandez à votre explorateur de fichiers d’ouvrir votre vidéo avec MediaInfo (qui invoquera mediainfo-gui), soit vous lancez MediaInfo seul, et choisissez le menu « File », pour choisir « Open », « Open File », et vous diriger vers le fichier. Au final, pour les amateurs d’interface graphique, ça donne ça :

fileinfo-mediainfo-gui

En ligne de commande, on appelle mediainfo très simplement de la manière suivante :

Bon là, aucun filtre, vous avez la totalité des informations. On remarque au passage, d’après les commentaires sur l’audio (la ligne « Title »), que l’encodage est le fait de Google. En effet, c’est une vidéo que j’ai récupéré sur Youtube, avec youtube-dl (la vidéo originale est disponible ici, et je ne peux que vous conseiller de la regarder et en tirer un enseignement si possible positif).

En ligne de commande ou par l’interface graphique, nous avons désormais toutes les informations que nous voulons : dimensions, durée, taille de l’image, codecs, taux de compression, ce qui permet, notamment sous Windows, de comprendre pourquoi le Lecteur Windows Media vous insulte avec cet affreux message :

fileinfo-windowsmediaerrorLes images

Pour les images, la « musique » est à peu près la même (hahahahaarrrrggl). Si Windows vous permettra d’obtenir des infos sur du BMP, du JPG, pas sur que le TIFF ou le PNG soit aussi accessible à cet attardé. MediaInfo saura là encore vous fournir les informations dont vous avez besoin. A un petit détail près :

fileinfo-mediainfo-image-default

C’est bien, mais ça, je savais déjà. Pour obtenir plus d’informations, il faut ouvrir le menu « Debug », et cocher « Complete » pour obtenir la totalité des informations concernant notre image. Une fois le bon réglage sélectionné, ça donne ça (faites défiler pour lire la totalité des infos) :

fileinfo-mediainfo-image-details

Sous Linux, il suffira là encore d’invoquer « bêtement » mediainfo :

La musique

Là encore, Windows ne saura vous donner les infos que des formats plus répandus, WAV et MP3 en tête; il ne saura par contre pas récupérer les infos des fichiers FLAC ou des OGG Vorbis. Plutôt que de les convertir en MP3 juste pour le plaisir de savoir combien de temps dure Highway To Hell (3 minutes 28 secondes– on dirait Hudson Hawk), on fera donc appel à MediaInfo pour nous renseigner sur le ou les morceaux :

fileinfo-mediainfo-music-default

En ligne de commande, là encore, la procédure est enfantine :

Les archives

Jusqu’ici, on cherchait à peu près les mêmes informations : dimensions, codec audio/vidéo, taux de compression. Dans la vidéo, c’est notamment pratique quand un fichier AVI peut contenir aussi bien du divx, que du mpeg, ou des codecs plus anciens et/ou plus exotiques (c’est pareil pour le MKV, notez bien : ce ne sont que des conteneurs), pour vérifier si votre appareil de salon ou votre smartphone (les iPhone et autres Windows Phone sont des demeurés dans le domaine)  sera capable de lire le fichier.

Dans le cadre des archives, les informations seront différentes : on cherchera principalement à visionner la liste des fichiers, puisqu’en général l’extension de l’archive suffit à déterminer le type de l’archive. Je dis généralement, parce que dans la pratique, on peut avoir des surprises. En effet, un fichier OpenDocument (Texte, tableau, présentation, même combat)  est en fait une archive zip qui contient les informations nécessaires qui constituent le texte. La preuve :

Oui, c’est bien un OpenDocument, et pourtant unzip sait le traiter tout à fait normalement comme n’importe quelle archive zip.

NOTE : On a utilisé ici la commande file pour déterminer le type du fichier. C’est utile surtout sous Linux car l’extension du fichier n’a au final que peu d’importance : mon image TrueCrypt porte l’extension txt, qu’on réserve d’habitude au texte brut. Mais je vous met au défi de l’ouvrir avec un éditeur de texte…

Revenons à nos moutons. Sous Windows, il suffira d’ouvrir l’archive dans un utilitaire adapté (généralement, un gestionnaire d’archives) pour en découvrir le contenu sans avoir à l’extraire au préalable. Comme Windows ne sait ouvrir que des archives ZIP, qui ne sont pas les plus répandues de nos jours, j’ai tendance à utiliser 7-Zip, open-source et multiplateforme (même si je ne m’en sers que très peu sous Linux). Il supporte une quantité assez importante de formats d’archive, y compris certains qui ne sont pas des archives à proprement parler (je pense aux images ISO, qu’on utilise pour les CD/DVD et les clés USB). Winrar, qui n’est pas open-source, mais qui est parfaitement utilisable en version gratuite (un message vous rappelant régulièrement de l’acheter–à la manière d’un Sublime Text), sait lui aussi ouvrir la plupart des formats d’archives, y compris celui utilisé par 7-Zip.

Sous Linux, il est aussi possible de faire ça graphiquement. Si vous utilisez le bureau KDE, Ark est tout indiqué pour vous rendre ce service. Les Gnomes utiliseront certainement file-roller. Comme je l’ai dit, 7-Zip existe aussi, et son fonctionnement est identique à la version Windows.

En ligne de commande, si chaque format d’archive est manipulable avec des utilitaires dédiés, il est possible, quand vous avez 7-Zip d’installé, de l’utiliser comme « visionneuse » universelle, encore qu’on verra après le cas de certains formats plus exotiques pour les Windowsiens, plus habitués aux ZIP et RAR, et pour les plus vieux, les ACE. Réutilisons notre document/archive :

Rapide explication :

  • 7z est le nom de la commande
  • l est la commande que doit effectuer 7-Zip, ici list; je vous invite soit à lire le manuel de 7z, soit à saisir 7z –help dans votre terminal pour en savoir plus.

Voyons maintenant le cas des archives au format tar.gz, tar.bz2, tar.lzma. Si Winrar s’accommode très bien des ces formats sous Windows, sous Linux, plus particulièrement en ligne de commande, les utilitaires de compression les plus usités (zip étant un format peu efficace, et rar un format propriétaire) vont au plus simple, et ne travaillent que sur un seul fichier/flux. C’est là qu’intervient le tarball, (d’où le .tar) format qui au final ne s’occupe que de regrouper plusieurs fichiers en un seul, qu’on peut dès lors compresser au moyen de son choix : gzip, bzip2, lzma (xz, utilisé par Arch/Manjaro, utilise un dérivé d’LZMA), pour les plus utilisés. voyons voir avec l’archive de mac Changer :

 On s’imagine bien qu’il faut plus d’un fichier, qu’il y a au moins le programme lui-même et un fichier README, LICENSE, bref, un ensemble pour que ça fonctionne. Et en effet, en l’occurrence, voilà ce qu’Ark nous dit :

fileinfo-archive-composed

Comment donc obtenir le listing en ligne de commande ? pour toutes les archives tarball, quelque soit l’algorithme de compression, c’est la commande tar qui va nous venir en aide :

 Décryptons les trois « switches » utilisés pour obtenir ce listing :

  • f permet de dire à tar de lire un fichier; il va de soit qu’il faut donner le nom du fichier (ici, macchanger-1.6.0.tar.gz)
  • t pour lister le contenu de l’archive
  • z est le plus « tricky », qui changera suivant l’extension de l’archive. z invoque gzip, j invoquera bzip2; pour les autres, on préferera ajouter –xz, –lzma, –xz en switch

Bien sur, c’est surtout la taille de l’archive qui va déterminer si vous allez simplement chercher la liste ou directement extraire l’archive. Dans le cas de MAC changer, ça ne serait pas grave, et l’extraction prendrait très, très peu de temps. Pour une archive de 600Mo par contre…

En mode barbu

De manière plus générale, on a vu plus haut que file permettait, dans une certaine mesure, de déterminer le type d’un fichier. Mais il n’existe que sous Linux, une autre méthode un peu plus bourrin consiste à ouvrir le fichier dans un éditeur Héxadécimal, qui va lire en brut le fichier et vous l’afficher tel quel. C’est faisable aussi bien sous Windows que sous Linux (j’utilise Okteta sous KDE, mais wxHexEditor existe aussi), notez. Vous pourrez alors découvrir, au début du fichier, un identifiant de type réel (appelé un peu abusivement selon moi « signature »), identifiant que lit d’ailleurs file pour vous indiquer le type de fichier :

fileinfo-hexeditor

On peut voir deux choses dans le « texte » affichable : les deux lettres PK, et le type MIME vnd.oasis.opendocument.text (je passe sur le reste, très « bouillie » pour le commun des mortels, dont je fais encore partie). file se sert donc du type mime pour dire à quel format nous avons affaire. PK lui, si on se réfère à la liste des signatures, désigne une archive ZIP. Voilà pourquoi unzip se débrouille très bien avec (n’importe quel gestionnaire d’archives supportant le ZIP d’ailleurs). Pour les plus barbus, en regardant les codes hexa-décimaux c’est plus précisément la suite 50 4B 03 04 qui désigne le format ZIP (50 et 4B étant le lettres P et K en ASCII, 03 et 04 des caractères « de contrôle »). Les fichiers « iwd » utilisés par Infinity Ward pour Call of Duty 2 et 4 (et suivants un peu aussi, mais de moins en moins, au profit d’un format binaire compilé) sont d’ailleurs eux aussi ni plus ni moins que des archives ZIP, rendant la construction de mods très facile.

Pourquoi vous montrer ça ? Si la plupart du temps les gestionnaires de fichiers sous Linux se basent sur le type MIME pour déterminer le format du fichier, et donc l’application la plus a même de l’exploiter, sous Windows, l’extension (.exe, .jpg, .odt, .zip) est la seule reine pour guider le système vers l’application. Un bon moyen pour contourner certains filtres (proxys d’entreprises, censure de Windows Live Messenger sur certains formats), est donc de changer le type de fichier pour le transmettre. Si on oublie de rétablir « la vérité », on aura l’impression d’avoir un fichier pourri. Avec les risques que ça comporte : ouvrir un fichier zip avec la visionneuse de photos n’a pas beaucoup de sens par exemple, et pourrait amener, dans le cas de fichiers spécialement formés, à ouvrir une ou plusieurs brèches sur votre machine.

Gwenview est une visionneuse d'images. Pas étonnant qu'elle ne sache pas lire une animation flash.

Gwenview est une visionneuse d’images. Pas étonnant qu’elle ne sache pas lire une animation flash.

Masquer l’extension par défaut (ce qui est le cas de toute installation de Windows, depuis 1995) est d’ailleurs  une très bonne opportunité pour les auteurs de virus, qui vont aller cacher leur programme en .jpg.exe : le .exe va donc être masqué par Windows, ne laissant affiché ce qui semble être donc une image, et si on dit aux mecs que c’est une femme à poil, il est évident que le fichier va être exécuté de nombreuses fois. Ayant toujours été un accroc aux extensions de fichiers (les anciens se souviendront probablement des fichiers que manipulaient l’amstrad CPC), J’ai toujours paramétré les Windows qui me passent sous la main pour qu’ils affichent clairement l’extension du fichier.

Si vous ne l’avez pas déjà fait, je vous invite d’ailleurs à le faire tout de suite. Méthode la plus simple, Pour Vista et suivants (utilisateurs d’XP, il est urgent soit de mettre à jour, soit de vous libérer), ouvrez le menu démarrer, et commencez à taper « Options des dossiers », il apparaîtra bien vite dans les résultats de recherche. En cliquant dessus, il vous ouvrira la fameuse fenêtre, et dans l’onglet Affichage, dans la liste les paramètres avancés, déroulez jusqu’à trouver la ligne « masquer l’extension de fichier dont le type est connu », qui est cochée par défaut:

fileinfo-windows-extrestore

Décochez-là, validez, et hop, l’explorateur affichera dès lors systématiquement l’extension, connue ou pas, si elle est présente évidemment (il est tout a fait possible de n’avoir que des fichiers sans extensions, mais ça rend leur utilisation bien plus compliquée). Dans cette même liste, recherchez la ligne « Ouvrir l’explorateur dans un processus séparé », ça n’a rien à voir avec le sujet principal du billet, mais ça sera toujours un poil de stabilité de gagné pour votre Windows (une fenêtre récalcitrante, sur un dossier réseau par exemple, ne bloquera plus les autres fenêtres ou le bureau).

Voilà ça y est, c’est fini

Maintenant, si vous n’arrivez pas à obtenir les informations que vous voulez sur vos fichiers, je ne peux plus rien faire pour vous 🙂