OSX: przypisz rozszerzenie do rodzaju zawartości

14

Tutaj mam folder zawierający kilka plików * .mkv (oczywiście wideo) i * .srt (oczywiście napisy). Chcę je przechowywać w jednym folderze, ale nie chcę, aby były ze sobą mieszane. Dobrym pomysłem jest zorganizowanie ich w dwie osobne grupy.

Jednak żadne rozszerzenia nie są rozpoznawane przez system i nadal są zaliczane do jednej grupy „Dokumentów”, co oczywiście nie jest tym, czego chcę.

Pytanie: jak powiedzieć systemowi, że cały plik * .mkv powinien być traktowany jako „Media” (lub „Wideo” lub jakakolwiek nazwa grupy rodzajów plików dla plików wideo)?

Dzięki.wprowadź opis zdjęcia tutaj

EDYTOWAĆ:

@Daniel, powiązany program to MPlayerX, a wynik działania tej komendy jest następujący:

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$ 

Co dziwne, „Item Kind” pojawia się jako „Media wideo”. A plik z napisami to „Subtitle”. Mimo to z jakiegoś powodu nie pomaga Finderowi poprawnie ułożyć tych plików…

Arnold
źródło
Jaki program jest skojarzony z tymi plikami? Jakie są dane wyjściowe mdlsw Terminalu dla jednego z tych plików, np. mdls "Game of Thrones episode 2.mkv"?
Daniel Beck
Czy ta funkcja grupowania jest nowa w Lion? Ikony mówią również odpowiednio „Napisy” i „Wideo”, więc tak naprawdę nie powinno to stanowić problemu.
slhck
@slhck Jest nowy w Lionie. Ikony to w 100% obrazy dostarczone przez powiązaną aplikację, więc to nic nie znaczy. Arnold, dzięki za mdlswynik. Czy używasz MPlayer OSX lub MPlayer OSX Extended ?
Daniel Beck
@DanielBeck, to tylko zwykły MPlayerX z App Store .
Arnold
@DanielBeck Ach, myślałem, że jest reprezentowany przez kMDContentType. Jakiego rodzaju treść jest wymieniona powyżej?
slhck

Odpowiedzi:

12

Musisz użyć aplikacji, która deklaruje prawidłowe powiązanie typu pliku, np .mkv. Dla rozszerzenia nazwy pliku.

Na przykład zdefiniowane przez system typy plików /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plistdeklarują następujące w sekcji UTI typu eksportowanego :

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Pozwala to systemowi powiązać UTI public.jpeg z „grupą UTI” public.image, co jest (bardzo prawdopodobne) tym, czego używa Finder dla grupy Obrazy ; public.filename-extensions równoważny typ mapy do rozszerzenia pliku.

Pozwala to OS X ustalić, czy .jpgplik ma identyfikator UTI public.jpegi jest to pod-UTI public.image(i tak dalej, z public.itemi public.data). Finder następnie pobiera wszystkie pliki, które są (również), public.imagei umieszcza je w tej samej grupie obrazów .

To samo odnosi się do public.mpeg-4a public.moviei mapowanie nazwy pliku tam.


Niestety autor MPlayerX nie zawracał sobie głowy mapowaniem UTI.

Nawet nie zadał sobie trudu stworzenia odpowiednich typów plików dla wszystkich rozszerzeń obsługiwanych przez program. Dlatego w widoku listy Findera wszystkie .mkvpliki nie są nazywane np. Matroska Video i mają na ikonie pasującą etykietę MKV , ale po prostu Video Media z ogólną etykietą Video . Wszystkie obsługiwane typy plików są wymienione według rozszerzenia dla tego „formatu pliku”, więc MPlayerX może je otworzyć:

wprowadź opis zdjęcia tutaj

Oznacza to na przykład, że jeśli wolisz odtwarzać .m4apliki w MPlayerX niż iTunes, tracisz opisowy dźwięk Apple MPEG-4 w kolumnie Rodzaj Findera i zamiast tego dostajesz Audio Media .


Możesz naprawić grupowanie, edytując /Applications/MPlayerX.app/Contents/Info.plistplik i odpowiednio deklarując np. mplayerx.videoUTI, który jest zgodny public.moviei dodając odpowiednie mapowanie rozszerzenia pliku.

Możesz naprawić kolumnę Rodzaj , edytując ten sam plik i odpowiednio deklarując typy plików z lepszym opisem i tworząc dla każdego plik ikony.

Wystarczy użyć Typy rdzenia Info.plist plik jako szablon, zastępując np public.jpegz własnym identyfikatorem użytkownika (na przykład mplayerx.video, jeśli nie chcesz odpowiednie Kind kolumny i ikony, lub mplayerx.mkvjeśli chcesz je). Potrzebujesz Xcode, aby edytować te pliki lub przekonwertować je na edytowalny XML w dowolnym edytorze tekstowym za pomocą plutil -convert xml1 <filename>.

Twoje zmiany, które można łatwo pomylić, będą zastępowane przy każdej aktualizacji aplikacji.

Alternatywnie, przynajmniej dla Finder Arrange By Kind , możesz edytować definicje typów podstawowych i dodawać własne. Pamiętaj, aby edytować kopię pliku i zastąpić ją po edycji, aby uniknąć problemów z uprawnieniami. Pamiętaj, że będziesz w ten sposób edytować i zamieniać podstawowe pliki systemowe (tj. Prosząc o problemy).

Rozsądniejszym rozwiązaniem byłoby utworzenie nowej „obojętnej” aplikacji, która po prostu deklaruje UTI typu pliku jako UTI typu eksportowanego . Będzie to wykorzystane przez bazę danych typów plików OS X. Możesz aktualizować zarówno OS X, jak i MPlayerX bez utraty powiązań typów zawartości. Nawet jeśli zmienisz np. .m4aNa MPlayerX, zmieniana jest tylko kolumna Rodzaj , nadal znajduje się ona w kategorii Film , ze względu na deklaracje w innej aplikacji niezależnej od powiązanej aplikacji.

Utwórz nową aplikację, np. Za pomocą Automatora, który właściwie nic nie robi po uruchomieniu, i dodaj do Contents/Info.plistpliku:

wprowadź opis zdjęcia tutaj

Zapisz się /Applicationsmniej więcej i uruchom ponownie Findera.

wprowadź opis zdjęcia tutaj

Częściowe mdlswyjście .mkvpliku, typ zawartości dostarczony przez „aplikację pomocniczą”, rodzaj elementu dostarczony przez powiązany odtwarzacz (MPlayerX):

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

Ponieważ jest to po prostu niechlujna integracja platformy przez programistę, prawdopodobnie powinieneś zgłosić błąd.

Daniel Beck
źródło
Bardzo interesujące. Nauczyłem się dziś czegoś nowego. To dlatego kMDItemContentTypeTreenie dodaje niczego przydatnego do metadanych?
slhck
@slhck Dokładnie. System potrzebuje sposobu na skojarzenie pliku z typem zawartości UTI. Tego brakuje, ponieważ domyślnie nie ma go w systemie (jak np. .mp4Jest), a aplikacja dodająca typ pliku do systemu nie deklaruje ani UTI (więc jest po prostu dyn.xyz), ani relacji (więc jest po prostu public.data). Musieliby zadeklarować UTI i powiązać go public.movie(zamiast np public.data.).
Daniel Beck
1
Łał! Dzięki za tak pouczające i dokładne badania problemu. Jest to bardzo pouczające i pomocne. Jeszcze nie wypróbowałem twojego rozwiązania, ale jestem pewien, że zadziała. Bardzo dobrze!
Arnold
Hackiest wszystkich hacków jest po prostu zmienić nazwę .mkvna .avi gasp !!! Robię to trochę mniej przerażające, zostawiając Komentarz w centrum uwagi (w Get Info), mówiąc, że to naprawdę mkv. .. to oczywiście zakłada, że ​​twój odtwarzacz multimediów jest w porządku z niewłaściwym rozszerzeniem - VLC nie działa;)
Joel Mellon
... Zapomniałem, możesz też zmienić nazwę .mkv.avina najmniej zły sposób, ale z nieco mniej ładną nazwą pliku.
Joel Mellon,