2012-02-17 3 views
1

저는 현재 pyxjc를 사용하여 퀵타임을 처리하는 스크립트를 작성하고 있습니다. (실제 목적으로는 다른 하나의 간단한 스크립트 만 작성했습니다 -c). addImage_forDuration_withAttributes_()를 사용하여 이미지에 대해 동일한 코덱을 제대로 사용할 수 있도록 퀵타임의 코덱의 네 가지 문자 OSType을 결정할 수 있어야합니다.pyobjc에서 UTType 형식의 코덱 OSType 가져 오기

pyobjc는 obj-c 프레임 워크에만 액세스 할 수 있으므로 그것으로부터 C 함수에 접근하지 마라. 나는 내가 이런 식으로 뭔가를 원하는 있으리라 믿고있어이 코덱 '을 AVdn'이 될 것 OSTYPE를 얻을 필요가이 시점에서

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' 

: 나는 코덱의 문자열 형식 UTType을 얻을 수 있어요 : https://developer.apple.com/library/mac/#documentation/MobileCoreServices/Reference/UTTypeRef/Reference/reference.html는하지만 pyobjc에 대한 액세스 권한이없는

내 최후의 수단이 같은 뭔가 qt_thing에 밖으로 껍질하는 것입니다

qt_thing --type=imco | grep "AVID DNxHD Codec" | awk -F: '{print $2}' 
# Result: AVdn 

을하지만이 느린 내가 오히려 코드에서 모든 것을 할 것 . 나는 물건의 코코아/QTKit 측면에서 나에게 가능한 것을 놓치고 있어야한다. 경험이있는 사람은 누구입니까?

코 피어를 해결하기 위해 C api를 사용하여 참조하는 또 다른 질문이 있습니다. Find out the Codec for a Quicktime Movie,하지만 분명히 내가 알고있는 한 pyobjc을 직접 만들 수는 없습니다.

답변

2

누군가가 대답을 기다렸다가 Carbon 모듈에 파고 들기를 기다리는 동안 나는 문서 나 실제로 존재하지 않는 pyobjc 객체로 포장 된 많은 메소드가 있음을 발견했다. 네이티브 QTKit objc. 이것은 Quicktime C-api 레이어에 대한 액세스 부족을 상쇄하기위한 것이라고 생각합니다.

먼저 내 검색이 QTKit이 클래스 켜져 : QTFormatDescription

을하지만이 중 하나를 만드는 방법 명확한 방법이 없었다. 분명히 나는 ​​아니었다 confused as to how to retrive one

나는 QTFormatDescription 개체를 검색 할 가능성이있는 방법을 찾고, QTMovie, QTTrack 및 QTMedia 객체의 실제 회원을 검색을 시작 하나, 나는 메서드 호출을 우연히 발견 만 : QTTrack.mediaSubType

>>> movie = QTMovie.alloc().initWithFile_error_("/path/to/quicktime.mov", None) 
>>> track = movie.tracks()[1] 
>>> track.mediaSubType() 
u'AVdn' 

나는 C-api없이 이러한 종류의 정보를 검색 할 수 있도록 pyobjc 인스턴스에 많은 편의 메소드를 제공한다고 생각합니다. 그것의 단지 수치심 그것의 그렇게 문서화되지 않은.

>>> print '\n'.join([attrib for attrib in dir(QTTrack) if not '_' in attrib]) 
.... 
mediaName 
mediaRetained 
mediaSubType 
mediaType 
mediaTypeInMedia 
... 
0

pyobjc가 UTType에 대한 액세스를 포함하지 :이 같은 임의의 기능을 찾고있는 사람들을위한

, 나는 이런 식으로 뭔가를하고 추천 할 수있는 모든 당신에게 사용할 수있는 추가 된 비 - 인수 방법을 찾을 수 그것은 LaunchServices입니다.

from LaunchServices import * 

UTCreateStringForOSType() 
UTGetOSTypeFromString() 
+0

나는 이것을 시도했으며 반환 된 OSType은 정수 ID이다. 4 자 유형을 얻는 방법에 대한 예가 있습니까? 예를 들어,이 예제를 h.264 퀵타임에 대해 실행하면 궁극적으로'avc1'을 얻으려고합니다. 숫자 ID를 문자열로 변환하는 방법이 있습니까? – jdi