Utilisation de la commande linux 'file' pour déterminer le type (image, audio ou vidéo)

Le mot fichier fait ici référence à la commande fichier du shell, et pas de fichiers réels. Je souhaite déterminer si un fichier est, par exemple, un fichier vidéo ( .mpg , .mkv , .avi ). fichier permet de renvoyer image pour les fichiers image, vidéo pour les fichiers vidéo et audio pour les fichiers audio ( et application/x-empty pour une raison quelconque de texte). Ma question est de savoir à quel point c'est fiable pour identifier les types. Si je faisais un simple

file -ib deliverance.avi | grep video

Cela fonctionnerait-il pour tous les fichiers vidéo principaux décrits dans ici ? ?

10

3 Réponses

Les résultats de fichier ne sont pas parfaits et il y a plus de problèmes avec certains types de fichiers que d'autres. Fondamentalement, File recherche uniquement des éléments de données binaires particuliers dans des modèles prévisibles pour déterminer les types de fichiers.

Malheureusement, en particulier, certains types de fichiers souvent utilisés pour la vidéo entrent dans cette catégorie "problématique". Les formats de conteneur les plus récents, tels que .mp4 et .mkv , comportent généralement plusieurs types MIME différents, qui doivent correctement dépendre du type de données contenu. Par exemple, un .mp4 pourrait être correctement identifié comme video/mp4 , audio/mp4 ou application/mp4 en fonction du contenu.

En pratique, fichier émet souvent des suppositions simplement conformes à l’usage courant, et cela peut parfaitement fonctionner pour vous. Par exemple, alors que j'ai mentionné certaines difficultés théoriques pour identifier correctement les fichiers Matroska, fichier suppose simplement que tout fichier Matroska est une vidéo. D'autre part, l'utilisation du conteneur Ogg est divisée de manière plus uniforme entre audio et vidéo, et je pense que la version actuelle de fichier divise simplement la différence et identifie les fichiers Ogg en tant que application/ogg , qui ne tomberait dans aucune de vos catégories.

Ce que je peux dire avec certitude, c’est que vous souhaitez disposer de la version la plus récente du fichier . Les fichiers "magiques" contenant les motifs à comparer et les types MIME résultant d'une correspondance sont mis à jour assez souvent pour inclure des types de fichiers plus récents, tels que WebM, ou simplement pour améliorer la précision des types plus anciens.

9
ajouté
Pouvez-vous fournir des conseils/liens sur la manière de rendre cela plus précis? De mémoire, vérifiez peut-être l'extension du fichier en utilisant Fonctions PHP . Il est certain que des sites tels que YouTube traitent du même problème. Merci
ajouté l'auteur puk, source
J'ai fait un test préliminaire et le fichier était assez précis. Bien entendu, il ne sera pas facile d'obtenir un échantillon fiable de 25 000 fichiers vidéo différents, par exemple.
ajouté l'auteur puk, source
Savez-vous comment les grands sites traitent ce problème? Peut-être que mplayer essaie de le jouer.
ajouté l'auteur puk, source
Ceci est une erreur. La commande de fichier ne regarde pas "des éléments particuliers de données binaires dans des modèles prévisibles pour comprendre les types de fichiers". Il examine les premiers caractères du fichier, qui détermine un type de fichier dans unix-land. Il est aussi appelé le nombre magique de fichiers. La table des nombres magiques est alors levée dans une table. la réponse de frankc ci-dessous est la bonne réponse
ajouté l'auteur Doo Dah, source
Je ne veux pas paraître négatif. fichier est probablement aussi bon que ce que vous allez obtenir. Vous pouvez également vérifier par rapport à l'extension si vous voulez être sûr que certaines extensions sont détectées d'une certaine manière (ou pour contrer un problème que vous rencontrez dans la pratique).
ajouté l'auteur John Flatness, source
Le format actuel du fichier magique que vous trouverez pratiquement partout permet de créer des modèles bien plus compliqués que "les premiers caractères du fichier", y compris des modèles avec des décalages statiques ou variables, et d'exprimer des tests à plusieurs niveaux permettant de déterminer plus précisément une type de fichier. (En outre, je décrirais le "nombre magique" typique comme un élément particulier de données binaires dans un modèle prévisible, de toute façon.)
ajouté l'auteur John Flatness, source

file fonctionne en référençant l'en-tête du fichier à un fichier "nombre magique". Je soupçonne que la meilleure façon de voir la robustesse d’un fichier est de vérifier votre fichier de numéro magique local (éventuellement/usr/share/magic mais consultez le fichier man pour plus de détails) pour les types de fichiers de votre liste référencée.

1
ajouté

Il semble que cela devrait fonctionner pour la plupart des fichiers vidéo/audio/image. Mais si ce n'est pas le cas, il existe un fichier contenant les relations entre une extension et son type:

Les informations d'identification de ces fichiers sont lues dans le fichier magique compilé /usr/share/magic.mgc, ou dans/usr/share/magic si le fichier de compilation n'existe pas.

see: http://linux.about.com/library/cmd/blcmdl1_file.htm

J'espère que cela t'aides!

1
ajouté