首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pyobjc中从UTType格式获取编解码器OSType

在pyobjc中从UTType格式获取编解码器OSType
EN

Stack Overflow用户
提问于 2012-02-18 04:09:17
回答 2查看 460关注 0票数 1

我目前正在编写一个处理批量快速时间的脚本,这是我第一次使用pyobjc (我只用实际的objective-c编写了另一个非常简单的脚本)。我需要能够确定quicktimes的编解码器的四个字符的OSType,这样我就可以使用addImage_forDuration_withAttributes_()正确地对图像使用相同的编解码器。

因为pyobjc只能访问obj-c框架,所以我不能从它访问任何C函数。我可以得到编解码器的字符串格式UTType:

代码语言:javascript
复制
from objc import YES, NO, nil
from Cocoa import *
from QTKit import *

movieAttribs = {
    QTMovieOpenAsyncOKAttribute: NSNumber.numberWithBool_(NO),
    QTMovieEditableAttribute: NSNumber.numberWithBool_(YES),
    QTMovieFileNameAttribute: "quicktime.mov"
}

clip, err = QTMovie.movieWithAttributes_error_(movieAttribs, None)
track = clip.tracks()[0]
print track.format()
# u'Avid DNxHD Codec'

此时,我需要获取OSType,对于这个编解码器,它应该是'AVdn‘我假设我想要这样的东西:https://developer.apple.com/library/mac/#documentation/MobileCoreServices/Reference/UTTypeRef/Reference/reference.html,但我不能在pyobjc中访问它

我的最后一招是向qt_thing支付类似如下的东西:

代码语言:javascript
复制
qt_thing --type=imco | grep "AVID DNxHD Codec" | awk -F: '{print $2}'
# Result: AVdn

但是这样比较慢,而且我更愿意用代码来完成。在Cocoa/QTKit方面,我一定遗漏了一些可用的东西。有没有人有经验?

还有另一个问题,再次引用了使用can来解析编解码器:Find out the Codec for a Quicktime Movie,但据我所知,我显然不能直接从pyobjc中解析。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-25 05:26:10

在我等待有人回答的时候,我一直在挖掘,甚至在碳模块中……我发现有相当多的方法被包装到QTKit对象中,这些方法在文档中并没有真正记录下来,甚至在原生pyobjc对象中也没有。我认为这是为了弥补对Quicktime C-api层的访问不足。

首先,我的搜索找到了这个QTKit类:QTFormatDescription

但是没有明确的方法来创建其中的一个。显然我不是唯一一个confused as to how to retrive one

当我开始搜索QTMovie、QTTrack和QTMedia对象的实际成员,寻找可能的方法来检索QTFormatDescription对象时,我偶然发现了一个方法调用:QTTrack.mediaSubType

代码语言:javascript
复制
>>> movie = QTMovie.alloc().initWithFile_error_("/path/to/quicktime.mov", None)
>>> track = movie.tracks()[1]
>>> track.mediaSubType()
u'AVdn'

我猜他们确实在pyobjc实例中封装了很多方便的方法,这样您就可以在没有C-api的情况下检索这种信息。这只是一个耻辱,因为它是如此的没有记录。

对于任何想要像这样的随机功能的人,我所能推荐的就是做一些像这样的事情来寻找任何可能对你可用的添加的非arg方法:

代码语言:javascript
复制
>>> print '\n'.join([attrib for attrib in dir(QTTrack) if not '_' in attrib])
....
mediaName
mediaRetained
mediaSubType
mediaType
mediaTypeInMedia
...
票数 2
EN

Stack Overflow用户

发布于 2015-08-05 14:10:15

pyobjc包含对LaunchServices下的UTType的访问。

代码语言:javascript
复制
from LaunchServices import *

UTCreateStringForOSType()
UTGetOSTypeFromString()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9334715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档