OSX: asignar extensión al tipo de contenido

14

Aquí tengo una carpeta que contiene un montón de archivos * .mkv (video, obviamente) y archivos * .srt (subtítulos, obviamente). Quiero mantenerlos dentro de una carpeta pero no quiero que se mezclen entre sí. Parece una buena idea organizarlos visualmente en dos grupos separados.

Sin embargo, el sistema no reconoce ninguna de las extensiones, y todavía se colocan en un grupo de "Documentos", que claramente no es lo que quiero.

La pregunta: ¿cómo decirle al sistema que todos los archivos * .mkv deben tratarse como 'Medios' (o 'Videos', o cualquiera que sea el nombre del grupo de tipos de archivos para archivos de video)?

Gracias.ingrese la descripción de la imagen aquí

EDITAR:

@Daniel, el programa asociado es MPlayerX y la salida de ese comando es la siguiente:

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$ 

Por extraño que parezca, el "Tipo de elemento" aparece como "Video Media". Y para un archivo de subtítulos es 'Subtitle'. Aún así, no ayuda a Finder a organizar esos archivos correctamente por alguna razón ...

Arnold
fuente
¿Qué programa está asociado con estos archivos? ¿Cuál es la salida de mdlsen Terminal para uno de estos archivos, por ejemplo mdls "Game of Thrones episode 2.mkv"?
Daniel Beck
¿Esta característica de agrupación es nueva en Lion? Los íconos también dicen "Subtítulos" y "Video", respectivamente, por lo que realmente no debería ser un problema.
slhck
@slhck Es nuevo en Lion. Los íconos son imágenes 100% proporcionadas por la aplicación asociada, por lo que eso no significa nada. Arnold, gracias por el mdlsresultado. ¿Está utilizando MPlayer OSX o MPlayer OSX Extended ?
Daniel Beck
@DanielBeck, es solo el MPlayerX regular de la App Store .
Arnold
@DanielBeck Ah, pensé que estaba representado por kMDContentType. Sin embargo, ¿qué tipo de contenido es el que se menciona arriba?
slhck

Respuestas:

12

Debe utilizar una aplicación que declare la asociación correcta del tipo de archivo, por ejemplo, la .mkvextensión del nombre del archivo.

Por ejemplo, los tipos de archivo definidos por el sistema /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plistdeclaran lo siguiente en la sección UTI de tipo exportado :

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Esto permite que el sistema asocie la UTI public.jpeg con el "grupo UTI" public.image, que es (muy probablemente) lo que Finder usa para el grupo Imágenes ; el public.filename-extensions tipo equivalente se asigna a la extensión del archivo.

Esto permite que OS X determine que ese .jpgarchivo tiene la UTI public.jpeg, y que es una sub-UTI de public.image(y así sucesivamente, con public.itemy public.data). Finder luego toma todos los archivos que están (también) public.imagey los coloca en el mismo grupo de Imágenes .

Lo mismo se aplica a public.mpeg-4y public.moviey al mapeo de nombre de archivo allí.


Desafortunadamente, el autor de MPlayerX no se molestó en mapear las infecciones urinarias.

Ni siquiera se molestó en crear tipos de archivos adecuados para todas las extensiones que admite el programa. Es por eso que en la vista de lista de Finder , todos los .mkvarchivos no se llaman, por ejemplo, Matroska Video , y tienen una etiqueta MKV correspondiente en su icono, sino simplemente Video Media con una etiqueta genérica de Video . Todos los tipos de archivos compatibles se enumeran por extensión de archivo para este "formato de archivo", por lo que MPlayerX puede abrirlos:

ingrese la descripción de la imagen aquí

Eso significa, por ejemplo, si prefiere reproducir .m4aarchivos en MPlayerX a iTunes, pierde el audio descriptivo MPEG-4 de Apple en la columna Tipo del Finder y obtiene Audio Media en su lugar.


Puede corregir la agrupación editando el /Applications/MPlayerX.app/Contents/Info.plistarchivo y declarando correctamente, por ejemplo, una mplayerx.videoUTI que se ajuste public.moviey agregue la asignación de extensión de nombre de archivo adecuada.

Puede corregir la columna Tipo editando el mismo archivo, declarando correctamente los tipos de archivo con una mejor descripción y creando un archivo de icono para cada uno.

Simplemente use el archivo de Tipos principales Info.plist como plantilla, reemplazando, por ejemplo, public.jpegcon su propio identificador personalizado (por ejemplo, mplayerx.videosi no desea las columnas e íconos de tipo adecuados , o mplayerx.mkvsi los quiere). Necesita Xcode para editar estos archivos, o convertirlos a XML editable en cualquier editor de texto mediante plutil -convert xml1 <filename>.

Sus cambios, que son bastante fáciles de equivocar, se anularán con cada actualización de la aplicación.

Alternativamente, al menos para el Finder Arrange By Kind , puede editar las definiciones de tipos principales y agregar las suyas propias. Asegúrese de editar una copia del archivo y reemplazarlo después de editar para evitar problemas de permisos. Tenga en cuenta que estará editando y reemplazando los archivos centrales del sistema (es decir, solicitando problemas) al hacer esto.

Una solución más sensata sería crear una nueva aplicación "ficticia" que simplemente declare las UTI de tipo de archivo como UTI de tipo exportado . Esto será utilizado por la base de datos de tipo de archivo de OS X y puede actualizar tanto OS X como MPlayerX sin perder las asociaciones de tipo de contenido. Incluso si cambia, por ejemplo, .m4aa MPlayerX, solo se cambia la columna Tipo , todavía está en la categoría Película , debido a las declaraciones en otra aplicación independiente de la aplicación asociada.

Por lo tanto, cree una nueva aplicación, por ejemplo, usando Automator que en realidad no hace nada cuando se inicia, y agregue lo siguiente a su Contents/Info.plistarchivo:

ingrese la descripción de la imagen aquí

Guarde más /Applicationso menos y reinicie Finder.

ingrese la descripción de la imagen aquí

mdlsSalida parcial del .mkvarchivo, tipo de contenido proporcionado por la "aplicación auxiliar", tipo de elemento proporcionado por el reproductor asociado (MPlayerX):

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

Dado que esta es solo una integración descuidada de la plataforma por parte del desarrollador, probablemente deba presentar un error.

Daniel Beck
fuente
Muy interesante. Aprendí algo nuevo hoy. Entonces, ¿por eso kMDItemContentTypeTreeno agrega nada útil a los metadatos?
slhck
@slhck Exactamente. El sistema necesita una forma de asociar el archivo con el tipo de contenido UTI. Eso falta, ya que no está en el sistema de manera predeterminada (como, por ejemplo, .mp4está), y la aplicación que agrega el tipo de archivo al sistema no declara ni la UTI (por lo que es justa dyn.xyz) ni la relación (por lo que es justa public.data). Tendrían que declarar la ITU y asociarla con public.movie(en lugar de, por ejemplo public.data).
Daniel Beck
1
¡Guauu! Gracias por una investigación tan informativa y exhaustiva sobre el problema. Esto es muy educativo y útil. Todavía tengo que probar su solución, pero estoy seguro de que funcionará. ¡Muy agradable!
Arnold
¡El más hackeo de todos los hacks es simplemente cambiar el nombre .mkvde .avi jadear! Lo hago un poco menos horrible dejando un comentario destacado (en Obtener información) diciendo que es realmente un mkv. ..esto, por supuesto, supone que su reproductor multimedia está bien con la extensión incorrecta - VLC está inactivo;)
Joel Mellon
... Lo olvidé, también puedes cambiarle el nombre a .mkv.avila solución menos malvada pero con un nombre de archivo un poco menos bonito.
Joel Mellon