Как я могу получить информацию о кодеке для быстрого видео в Objective C / Cocoa? (Без FFMPEG) - PullRequest
3 голосов
/ 15 июля 2011

Здравствуйте и спасибо за ваше время, Я создаю приложение, которое перемещает видео файлы для обработки другими приложениями. Раньше я использовал mediainfo и ffmpeg в ruby ​​для получения информации о кодеке для каждого файла. Однако я хотел бы перенести все это в одно прекрасное приложение с какао. Я искал и искал и до сих пор не могу найти решение (без использования ffmpeg) о том, как это сделать. Я в основном ищу ту же самую информацию, которую вы получаете в окне быстрого видеоинспектора (apple + i). Любая помощь будет принята с благодарностью, пример кода, тем более. Спасибо.

1 Ответ

6 голосов
/ 18 июля 2011

Вы можете использовать Spotlight Queries (NSMetadataQuery), как команда mdls делает:

> mdls ~/Music/iTunes/iTunes\ Media/iTunes\ U/WWDC\ 2011\ Session\ Videos\ -\ HD/1-01\ Apple\ Platforms\ Kickoff.m4v 
kMDItemAudioBitRate            = 103
kMDItemAudioChannelCount       = 2
kMDItemCodecs                  = (
    AAC,
    "H.264"
)
kMDItemContentCreationDate     = 2011-07-01 15:49:56 +0000
kMDItemContentModificationDate = 2011-07-01 16:13:39 +0000
kMDItemContentType             = "com.apple.m4v-video"
kMDItemContentTypeTree         = (
    "com.apple.m4v-video",
    "public.movie",
    "public.audiovisual-content",
    "public.data",
    "public.item",
    "public.content"
)
kMDItemDateAdded               = 2011-07-01 16:13:39 +0000
kMDItemDisplayName             = "1-01 Apple Platforms Kickoff.m4v"
kMDItemDurationSeconds         = 2787.754421087755
kMDItemFSContentChangeDate     = 2011-07-01 16:13:39 +0000
kMDItemFSCreationDate          = 2011-07-01 15:49:56 +0000
kMDItemFSCreatorCode           = "hook"
kMDItemFSFinderFlags           = 0
kMDItemFSHasCustomIcon         = 0
kMDItemFSInvisible             = 0
kMDItemFSIsExtensionHidden     = 0
kMDItemFSIsStationery          = 0
kMDItemFSLabel                 = 0
kMDItemFSName                  = "1-01 Apple Platforms Kickoff.m4v
kMDItemFSNodeCount             = 1147843844
kMDItemFSOwnerGroupID          = 20
kMDItemFSOwnerUserID           = 502
kMDItemFSSize                  = 1147843844
kMDItemFSTypeCode              = ""
kMDItemKind                    = "Video Media"
kMDItemLogicalSize             = 1147843844
kMDItemMediaTypes              = (
    Sound,
    Video
)
kMDItemPhysicalSize            = 1147846656
kMDItemPixelHeight             = 540
kMDItemPixelWidth              = 958
kMDItemProfileName             = "HD (1-1-1)"
kMDItemStreamable              = 0
kMDItemTotalBitRate            = 3287
kMDItemVideoBitRate            = 3184

Или вы можете проверить структуру AVFoundation.

Пример кода:

 -(NSDictionary *) metadataForFileAtPath:(NSString *) path {
    NSURL *url = [[[NSURL alloc] initFileURLWithPath:path] autorelease];

    MDItemRef itemRef = MDItemCreateWithURL(NULL, (CFURLRef)url);
    NSArray *attributeNames = (NSArray *)MDItemCopyAttributeNames(itemRef);
    NSDictionary *attributes = (NSDictionary *) MDItemCopyAttributes(itemRef, (CFArrayRef) attributeNames);
    CFRelease(itemRef);

    // probably it is leaking memory (attributeNames and attributes), better check with Instruments

    return attributes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...