OSX:为内容类型分配扩展名

OSX:为内容类型分配扩展名

这里我有一个文件夹,里面有一堆 *.mkv 文件(显然是视频)和 *.srt 文件(显然是字幕)。我想将它们保存在一个文件夹中,但又不想将它们混在一起。将它们直观地分成两个独立的组似乎是个好主意。

但是,系统无法识别这两种扩展名,并且它们仍然被放在一个“文档”组下,这显然不是我想要的。

问题:如何告诉系统所有 *.mkv 文件都应被视为“媒体”(或“视频”,或视频文件的文件类型组的名称)?

谢谢。在此处输入图片描述

编辑:

@Daniel,相关程序是 MPlayerX,该命令的输出如下:

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$ 

奇怪的是,“项目类型”确实显示为“视频媒体”。而对于字幕文件,则是“字幕”。然而,出于某种原因,它无法帮助 Finder 正确排列这些文件……

答案1

您需要使用一个声明正确文件类型关联的应用程序,例如.mkv文件扩展名。

例如,系统定义的文件类型在/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist声明中如下出口型 UTI部分:

在此处输入图片描述 在此处输入图片描述

这使得系统能够关联尿路感染 public.jpeg使用“UTI 组” public.image,这很可能是 Finder 用于图片群体;public.filename-extensions 等效类型映射到文件扩展名。

这样 OS X 就可以确定该.jpg文件具有 UTI public.jpeg,并且是 的子 UTI public.image(等等,还有public.itempublic.data)。然后 Finder 会获取所有(也是)的文件,public.image并将它们放在同一个图片团体。

这同样适用于public.mpeg-4public.movie那里的文件名映射。


不幸的是,MPlayerX 的作者没有费心映射 UTI。

他甚至懒得为程序支持的所有扩展名创建适当的文件类型。这就是为什么在 Finder 的列表显示, 全部.mkv文件不是例如Matroska 视频并有一个匹配的美军标签在他们的图标上,而只是视频媒体使用通用的视频标签。所有支持的文件类型都按此“文件格式”的文件扩展名列出,因此 MPlayerX 可以打开它们:

在此处输入图片描述

这意味着,例如,如果你更喜欢.m4a在 MPlayerX 中播放文件而不是 iTunes,那么你就失去了描述性Apple MPEG-4 音频在 Finder 的种类列并获取音频媒体反而。


/Applications/MPlayerX.app/Contents/Info.plist您可以通过编辑文件并正确声明(例如mplayerx.video符合的 UTI)public.movie并添加正确的文件扩展名映射来修复分组。

您可以修复种类通过编辑同一个文件,并正确地声明具有更好描述的文件类型,并为每个文件创建一个图标文件,可以实现此目的。

只需使用核心类型 Info.plist文件作为模板,用public.jpeg你自己的自定义标识符替换(例如,mplayerx.video如果你不想要正确的种类列和图标,或者mplayerx.mkv如果您想要的话)。您需要 Xcode 来编辑这些文件,或者使用 将它们转换为可在任何文本编辑器中编辑的 XML plutil -convert xml1 <filename>

您的更改很容易出错,并且将在每次应用程序更新时被覆盖。

或者,至少对于 Finder按种类排列,您可以编辑核心类型定义并添加您自己的定义。请确保编辑文件的副本并在编辑后替换它以避免权限问题。请注意,这样做会编辑和替换核心系统文件(即自找麻烦)。

一个更明智的解决方案是创建一个新的“虚拟”应用程序,简单地将文件类型 UTI 声明为出口型 UTI。这将由 OS X 的文件类型数据库使用,您可以更新 OS X 和 MPlayerX,而不会丢失内容类型关联。即使您更改.m4a为 MPlayerX,也只有种类列已更改,但仍在电影类别,因为另一个应用程序中的声明独立于关联应用程序。

因此,创建一个新的应用例如使用 Automator,它在启动时实际上并不执行任何操作,并将以下内容添加到其Contents/Info.plist文件中:

在此处输入图片描述

保存/Applications左右,然后重新启动 Finder。

在此处输入图片描述

文件的部分mdls输出.mkv,“辅助应用程序”提供的内容类型,关联播放器(MPlayerX)提供的项目类型:

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

由于这只是开发人员对平台集成不严谨的结果,您可能应该提交一个错误。

相关内容