OSX: attribuer une extension au type de contenu

13

Ici, j'ai un dossier contenant un tas de fichiers * .mkv (vidéo, évidemment) et * .srt (sous-titres, évidemment). Je veux les conserver dans un dossier, mais je ne veux pas qu’ils soient mélangés. Cela semble une bonne idée de les organiser visuellement en deux groupes distincts.

Cependant, ni les extensions ne sont reconnues par le système et elles sont toujours classées dans un groupe "Documents", ce qui n'est clairement pas ce que je veux.

La question: comment dire au système que tous les fichiers * .mkv doivent être traités comme des "médias" (ou des "vidéos", ou quel que soit le nom du groupe de types de fichiers pour les fichiers vidéo)?

Merci. enter image description here

MODIFIER:

@Daniel, le programme associé est MPlayerX et le résultat de cette commande est le suivant:

imac:Game of Thrones arnold$ mdls "Game of Thrones 1×2.mkv"
kMDItemContentCreationDate     = 2011-12-15 10:31:20 +0000
kMDItemContentModificationDate = 2011-12-27 09:09:55 +0000
kMDItemContentType             = "dyn.ah62d4rv4ge804450"
kMDItemContentTypeTree         = (
    "public.data",
    "public.item"
)
kMDItemDateAdded               = 2011-12-27 09:22:55 +0000
kMDItemDisplayName             = "Game Of Thrones 1×2.mkv"
kMDItemFSContentChangeDate     = 2011-12-27 09:09:55 +0000
kMDItemFSCreationDate          = 2011-12-15 10:31:20 +0000
kMDItemFSCreatorCode           = ""
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "Game of Thrones 1×2.mkv"
kMDItemFSNodeCount             = 220877659
kMDItemFSOwnerGroupID          = 99
kMDItemFSOwnerUserID           = 99
kMDItemFSSize                  = 220877659
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Video Media"
kMDItemLogicalSize             = 220877659
kMDItemPhysicalSize            = 220880896
imac:Game of Thrones arnold$ 

Curieusement, le ‘Type d’article’ apparaît comme un ‘Média vidéo’. Et pour un fichier de sous-titres, c’est ‘Sous-titre’. Cela n’aide pas le Finder à organiser ces fichiers correctement pour une raison quelconque…

Arnold
la source
Quel programme est associé à ces fichiers? Quelle est la sortie de mdls dans Terminal pour l’un de ces fichiers, par ex. mdls "Game of Thrones episode 2.mkv"?
Daniel Beck
Cette fonctionnalité de regroupement est-elle nouvelle dans Lion? Les icônes indiquent également "Sous-titres" et "Vidéo", respectivement, donc cela ne devrait pas vraiment être un problème.
slhck
@slhck C'est nouveau dans Lion. Les icônes sont 100% images et fournies par l'application associée, ce qui ne veut rien dire. Arnold, merci pour le mdls sortie. Utilises-tu MPlayer OSX ou MPlayer OSX Extended ?
Daniel Beck
@DanielBeck, c’est juste le MPlayerX régulier de l'App Store .
Arnold
@DanielBeck Ah, je pensais que c'était représenté par kMDContentType. Quel type de contenu est celui mentionné ci-dessus?
slhck

Réponses:

11

Vous devez utiliser une application qui déclare l'association de type de fichier correcte, par exemple. la .mkv extension du nom de fichier.

Par exemple, les types de fichiers définis par le système dans /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist déclarer ce qui suit dans la Type UTI exporté section:

enter image description here enter image description here

Cela permet au système d’associer le UTI public.jpeg avec le "groupe UTI" public.image, qui est (très probablement) ce que Finder utilise pour le Images groupe; la public.filename-extensions type équivalent mappe à l'extension de fichier.

Cela permet à OS X de déterminer que .jpg le fichier a l'UTI public.jpeg, et c’est une sous-UTI de public.image (et ainsi de suite, avec public.item et public.data ). Le Finder prend alors tous les fichiers qui sont (aussi) public.image et les met dans le même Images groupe.

de même pour public.mpeg-4 et public.movie et le mappage de nom de fichier là-bas.


Malheureusement, l'auteur de MPlayerX n'a ​​pas pris la peine de cartographier les UTI.

Il n'a même pas pris la peine de créer les types de fichiers appropriés pour toutes les extensions prises en charge par le programme. C'est pourquoi dans Finder voir la liste , tout .mkv des dossiers ne sont pas appelé par exemple Matroska Vidéo , et avoir une correspondance MKV étiquette sur leur icône, mais simplement Média vidéo avec un générique Vidéo étiquette. Tous les types de fichiers pris en charge sont répertoriés par extension pour ce "format de fichier". MPlayerX peut donc les ouvrir:

enter image description here

Cela signifie, par exemple, si vous préférez jouer .m4a fichiers dans MPlayerX vers iTunes, vous perdez le descriptif Apple MPEG-4 audio dans le Finder Gentil colonne et obtenir Médias Audio au lieu.


Vous pouvez corriger le regroupement en modifiant la /Applications/MPlayerX.app/Contents/Info.plist fichier et en déclarant correctement, par exemple, une mplayerx.video UTI conforme à public.movie et en ajoutant le mappage correct d'extension de nom de fichier.

Vous pouvez réparer le Gentil colonne en modifiant le même fichier et en déclarant correctement les types de fichier avec une meilleure description et en créant un fichier icône pour chacun.

Il suffit d'utiliser le Types de base Info.plist fichier en tant que modèle, en remplaçant par exemple public.jpeg avec votre propre identifiant personnalisé (par exemple, mplayerx.video si vous ne voulez pas convenable Gentil des colonnes et des icônes, ou mplayerx.mkv si vous les voulez). Vous avez besoin de Xcode pour éditer ces fichiers ou les convertir en XML éditable dans n’importe quel éditeur de texte en utilisant plutil -convert xml1 <filename>.

Vos modifications, qui sont plutôt faciles à se tromper, seront remplacées à chaque mise à jour d’application.

Alternativement, au moins pour le Finder Organiser par genre , vous pouvez éditer les définitions de types de base et y ajouter les vôtres. Veillez à modifier une copie du fichier et à la remplacer après modification afin de contourner les problèmes d'autorisations. Sachez que vous allez modifier et remplacer les fichiers système essentiels (c’est-à-dire poser des problèmes) en procédant ainsi.

Une solution plus saine consisterait à créer une nouvelle application "fictive" qui déclare simplement que les UTI de type de fichier sont: Type UTI exporté . Cette base de données sera utilisée par la base de données de types de fichiers d’OS X et vous pourrez mettre à jour OS X et MPlayerX sans perdre les associations de types de contenu. Même si vous changez par exemple .m4a MPlayerX, seul le Gentil la colonne est modifiée, il est toujours dans le Film catégorie, en raison des déclarations dans une autre application indépendante de l'application associée.

Alors, créez un nouveau application par exemple. en utilisant Automator qui ne fait réellement rien lors de son lancement, et ajoutez ce qui suit à sa Contents/Info.plist fichier:

enter image description here

Sauver dans /Applications ou si, et redémarrez le Finder.

enter image description here

Partiel mdls sortie du .mkv fichier, type de contenu fourni par "l'application d'assistance", type d'élément fourni par le lecteur associé (MPlayerX):

kMDItemContentType             = "superuser.371939.mkv"
kMDItemContentTypeTree         = (
    "superuser.371939.mkv",
    "public.movie",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
...
kMDItemKind                    = "Video Media"

Comme il ne s'agit que d'une intégration de plate-forme bâclée par le développeur, vous devriez probablement enregistrer un bogue.

Daniel Beck
la source
Très intéressant. Appris quelque chose de nouveau aujourd'hui. Voilà pourquoi le kMDItemContentTypeTree n'ajoute rien d'utile aux métadonnées?
slhck
@slhck Exactement. Le système doit pouvoir associer le fichier au type de contenu UTI. Cela manque, car ce n'est pas dans le système par défaut (comme par exemple. .mp4 est), et l'application ajouter le type de fichier sur le système ne déclare pas non plus l’UTI (il est donc juste dyn.xyz ) ou la relation (donc c'est juste public.data ) non plus. Ils auraient besoin de déclarer l'UTI et associer avec public.movie (au lieu de par exemple public.data ).
Daniel Beck
Supprimé pour le moment car je ne pouvais pas le faire fonctionner comme je l'ai décrit. Devra faire des recherches supplémentaires.
Daniel Beck
Non supprimé la réponse alors que je découvrais la pièce manquante. Fonctionne à merveille maintenant, comme indiqué par la capture d'écran du Finder.
Daniel Beck
1
Hou la la! Merci pour cette recherche approfondie et informative sur le problème. C'est très éducatif et utile. Je n’ai pas encore testé votre solution, mais je suis sûr que cela fonctionnera. Très agréable!
Arnold