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


14

在这里,我有一个文件夹,其中包含一堆* .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正确排列这些文件…


这些文件与什么程序关联?mdls这些文件之一的Terminal 的输出是什么mdls "Game of Thrones episode 2.mkv"
丹尼尔·贝克

这个分组功能是Lion中的新增功能吗?图标还分别显示“字幕”和“视频”,因此这实际上不是问题。
slhck 2011年

@slhck这是Lion中的新功能。图标是100%图片,由关联的应用程序提供,因此没有任何意义。阿诺德,感谢您的mdls输出。您正在使用MPlayer OSX还是MPlayer OSX Extended
丹尼尔·贝克

@DanielBeck,它只是App Store中常规 MPlayerX 。
阿诺德

@DanielBeck啊,我以为由代表kMDContentType。上面列出的内容类型是什么?
slhck 2011年

Answers:


12

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

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

在此处输入图片说明 在此处输入图片说明

这使系统可以将UTI public.jpeg与“ UTI组” 相关联public.image,这(很可能)是Finder用于“ 图像”组的内容。在public.filename-extensions 同等类型映射到文件扩展名。

这样,OS X可以确定该.jpg文件是否具有UTI public.jpeg,并且该文件是UTI 的子UTI public.image(以此类推,带有public.itempublic.data)。然后,Finder提取(也是)所有文件,public.image并将它们放在同一“ 图像”组中。

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


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

他甚至没有为程序支持的所有扩展名创建适当的文件类型的麻烦。这就是为什么在Finder的列表视图中,所有.mkv文件都未称为例如Matroska Video,并且在其图标上具有匹配的MKV标签,而只是Video Media的原因。带有通用Video标签的。此文件格式按文件扩展名列出所有受支持的文件类型,因此MPlayerX可以打开它们:

在此处输入图片说明

这意味着,例如,如果您更喜欢.m4a在MPlayerX中播放文件而不是iTunes中的文件,则会失去描述性而不是在Finder的“ 种类”列中 Apple MPEG-4音频,而是获取“ 音频媒体”


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

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

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

您所做的更改(很容易出错)将在每次应用程序更新时被覆盖。

或者,至少对于Finder 按种类排列,您可以编辑核心类型定义并向其中添加您自己的定义。确保编辑该文件的副本,并在编辑后将其替换以规避权限问题。请注意,您将通过这样做来编辑和替换核心系统文件(例如,查找问题)。

一个更明智的解决方案是创建一个新的“虚拟”应用程序,该应用程序简单地将文件类型UTI声明为Exported Type UTI。这将由OS X的文件类型数据库使用,您可以在不丢失内容类型关联的情况下更新OS X和MPlayerX。即使你改变如.m4a要MPlayerX,只有一种更改列,但由于另一个应用程序中的声明独立于关联的应用程序,因此列仍在Movie类别中。

因此,例如使用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"

由于这只是开发人员草率的平台集成,因此您可能应该提交一个错误。


很有意思。今天学到了新东西。因此,这就是为什么kMDItemContentTypeTree不会向元数据添加任何有用的东西吗?
slhck 2011年

@slhck确实如此。系统需要一种将文件与内容类型UTI相关联的方法。这是缺少的,因为默认情况下它不在系统中(例如.mp4is),并且文件类型添加到系统的应用程序既没有声明UTI(也就是dyn.xyz),也没有声明关系(也就是public.data)。他们需要声明UTI 并将其关联public.movie(而不是例如public.data)。
丹尼尔·贝克

1
哇!感谢您对问题进行了如此详尽的研究。这是很有教育意义的,而且很有帮助。我仍然没有尝试您的解决方案,但是我敢肯定它会起作用。非常好!
阿诺德

所有骇客中最骇人的就是将重命名.mkv.avi 喘气!!!我通过留下Spotlight评论(在“获取信息”中)说它确实是mkv来使它变得不那么恐怖。..这当然是假设您的媒体播放器可以使用错误的扩展名-VLC断开了;)
Joel Mellon 2013年

...我忘了,您也可以将其重命名.mkv.avi为最不邪恶的解决方法,但文件名稍少一些。
乔尔·梅隆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.