web-dev-qa-db-ja.com

OSX:コンテンツの種類に拡張子を割り当てる

ここに、*。mkvファイル(明らかにビデオ)と* .srtファイル(明らかに字幕)の束を含むフォルダーがあります。それらを1つのフォルダー内に保持したいのですが、一緒に混在させたくありません。それらを2つの別々のグループに視覚的に配置することは良い考えのように見えます。

ただし、どちらの拡張機能もシステムによって認識されず、1つのグループ「ドキュメント」に分類されます。これは明らかに私が望んでいることではありません。

質問:すべての* .mkvファイルを「メディア」(または「ビデオ」、またはビデオファイルのファイルの種類グループの名前)として扱う必要があることをシステムに伝えるにはどうすればよいですか?

ありがとう。enter image description here

編集:

@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がこれらのファイルを正しく配置するのに役立ちません…

14
Arnold

たとえば、正しいファイルタイプの関連付けを宣言するアプリケーションを使用する必要があります。 .mkvファイル名拡張子。

たとえば、/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plistのシステム定義ファイルタイプは、Exported Type UTIsセクションで次のように宣言します。

enter image description hereenter image description here

これにより、システムは [〜#〜] uti [〜#〜]public.jpegを「UTIグループ」public.imageに関連付けることができます。これは(おそらく)Finderです。 Imagesグループに使用します。 public.filename-extensions同等のタイプはファイル拡張子にマップされます。

これにより、OS Xは、.jpgファイルにUTIpublic.jpegがあり、それがpublic.imageのサブUTIである(以下同様、public.itemおよびpublic.data)。次に、Finderは(また)public.imageであるすべてのファイルを取得し、それらを同じImagesグループに配置します。

同じことがpublic.mpeg-4public.movieおよびそこでのファイル名マッピングにも当てはまります。


残念ながら、MPlayerXの作成者はUTIのマッピングを気にしませんでした。

彼は、プログラムがサポートするすべての拡張機能に対して適切なファイルタイプを作成することすらしませんでした。そのため、Finderのリストビューでは、すべての.mkvファイルないと呼ばれます。 Matroska Video、一致する[〜#〜] mkv [〜#〜]ラベルがアイコンにありますが、単にVideo Mediaジェネリックビデオラベル。サポートされているすべてのファイルタイプは、この「ファイル形式」のファイル拡張子別に一覧表示されるため、MPlayerXはそれらを開くことができます。

enter image description here

つまり、たとえば、iTunesよりもMPlayerXで.m4aファイルを再生したい場合は、説明的なApple MPEG-4 audio in theFinder's- 種類列を取得し、代わりにオーディオメディアを取得します。


/Applications/MPlayerX.app/Contents/Info.plistファイルを編集し、適切に宣言することで、グループ化を修正できます。 mplayerx.videoに準拠するpublic.movie UTIであり、適切なファイル名拡張子マッピングを追加します。

Kind列を修正するには、同じファイルを編集し、より適切な説明でファイルタイプを適切に宣言し、それぞれにアイコンファイルを作成します。

コアタイプInfo.plistファイルをテンプレートとして使用し、たとえば、 public.jpeg独自のカスタム識別子を使用します(例:適切な種類列とアイコンが必要な場合はmplayerx.video、必要な場合はmplayerx.mkv)。これらのファイルを編集するには、Xcodeが必要です。または、plutil -convert xml1 <filename>を使用して任意のテキストエディタで編集可能なXMLに変換する必要があります。

間違えやすい変更は、アプリケーションが更新されるたびに上書きされます。

または、少なくともFinder Arrange By Kindの場合は、コアタイプの定義を編集して、独自の定義を追加することができます。パーミッションの問題を回避するために、必ずファイルのコピーを編集し、編集後にファイルを置き換えてください。これを行うことで、コアシステムファイルを編集および置換する(つまり、トラブルを要求する)ことに注意してください。

賢明な解決策は、ファイルタイプUTIをエクスポートされたタイプUTIとして宣言するだけの新しい「ダミー」アプリケーションを作成することです。これはOSXのファイルタイプデータベースによって使用され、コンテンツタイプの関連付けを失うことなくOSXとMPlayerXの両方を更新できます。あなたが変更したとしても.m4aからMPlayerXへ、Kind列のみが変更され、関連付けられたアプリケーションから独立した別のアプリケーションでの宣言により、Movieカテゴリに残ります。

したがって、新しいapplicationを作成します。例:起動時に実際には何もしないAutomatorを使用し、そのContents/Info.plistファイルに以下を追加します。

enter image description here

/Applications程度で保存し、Finderを再起動します。

enter image description here

.mkvファイルの部分的なmdls出力、「ヘルパーアプリ」によって提供されるコンテンツタイプ、関連するプレーヤー(MPlayerX)によって提供されるアイテムの種類:

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

これは開発者によるだらしのないプラットフォーム統合であるため、おそらくバグを報告する必要があります。

12
Daniel Beck