13

Здесь у меня есть папка, содержащая кучу файлов * .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 ответ1

11

Вам необходимо использовать приложение, которое объявляет правильную ассоциацию типов файлов, например, для расширения имени файла .mkv .

Например, определяемые системой типы файлов в /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist объявляют следующее в разделе UTIs экспортированных типов :

Это позволяет системе связывать UTI public.jpeg с "UTI group" public.image , который (очень вероятно) то, что Finder использует для группы изображений ; эквивалентный тип public.filename-extensions соответствует расширению файла.

Это позволяет OS X определить, что у файла .jpg есть UTI public.jpeg , и это является sub-UTI public.image (и так далее, с public.item и public.data). Затем Finder берет все файлы, которые (тоже) public.image и помещает их в одну группу изображений .

То же самое относится к public.mpeg-4 и public.movie и отображению имени файла там.


К сожалению, автор MPlayerX не удосужился нанести на карту UTI.

Он даже не удосужился создать надлежащие типы файлов для всех расширений, которые поддерживает программа. Вот почему в представлении списка Finder все файлы .mkv не называются, например, Matroska Video, и имеют соответствующую метку MKV на значке, а просто Video Media с общей меткой Video . Все поддерживаемые типы файлов перечислены по расширению файла для этого "формата файла", поэтому MPlayerX может открыть их:

Это означает, что, например, если вы предпочитаете проигрывать файлы .m4a в MPlayerX, а не iTunes, вы теряете описательный звук Apple MPEG-4 в столбце « Вид Finder» и вместо этого получаете Audio Media .


Вы можете исправить группировку, отредактировав файл /Applications/MPlayerX.app/Contents/Info.plist и должным образом объявив, например, UTI mplayerx.video который соответствует public.movie и добавив соответствующее сопоставление расширения имени файла.

Вы можете исправить столбец Kind , отредактировав один и тот же файл, правильно объявив типы файлов с лучшим описанием и создав файл значков для каждого из них.

Просто используйте файл Info.plist Core Types в качестве шаблона, заменив, например, public.jpeg своим собственным пользовательским идентификатором (например, mplayerx.video если вам не нужны правильные столбцы и значки Kind , или mplayerx.mkv если они вам нужны). Вам нужен Xcode, чтобы редактировать эти файлы или конвертировать их в XML, редактируемый в любом текстовом редакторе, используя plutil -convert xml1 <filename> .

Ваши изменения, которые довольно легко ошибиться, будут отменены при каждом обновлении приложения.

В качестве альтернативы, по крайней мере для Finder Arrange By Kind, вы можете редактировать определения основных типов и добавлять свои собственные. Обязательно отредактируйте копию файла и замените ее после редактирования, чтобы обойти проблемы с разрешениями. Имейте в виду, что при этом вы будете редактировать и заменять основные системные файлы (то есть, вызывать проблемы).

Более разумным решением было бы создание нового "фиктивного" приложения, которое просто объявляет UTI типа файла как UTI экспортированного типа. Это будет использоваться базой данных типов файлов OS X, и вы можете обновить как OS X, так и MPlayerX, не теряя связи типов контента. Даже если вы измените, например, .m4a на MPlayerX, изменится только столбец Kind , он все еще находится в категории 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"

Так как это просто небрежная интеграция с платформой разработчика, вам, вероятно, следует сообщить об ошибке.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .