這一直使我瘋狂了一段時間。從QTKit獲取幀編號(如Quicktime Player 7)
我對QTKit/QTMovie的知識非常少,但已經創建了一個小預覽視頻的Cocoa應用程序,並且可以使用Handbrake保存它的3秒鐘版本。
問題是將QTKit(QTTime)上的當前時間翻譯爲幀數,該時間非常模糊(似乎是最接近的第二個)。
如果您在Quicktime Player 7中打開視頻,您可以選擇查看標準時間或當前幀。 如果我將該幀編號直接傳遞給Handbrake CLI,則預覽顯示超級準確。
所以我一直在試圖找到一種方法來將QTTime轉換爲絕對幀編號,這似乎是基於QTMedia中的樣本(非常混亂)。
例如,對於這樣的:
NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo]; QTTrack *tcTrack = [videoTracks objectAtIndex:0]; if (tcTrack != nil) { QTMedia * media = [tcTrack media]; if (media != nil) { NSLog(@"sample : %@", [media attributeForKey:QTMediaSampleCountAttribute]); } }
我得到的樣本總數,這是一樣的Quicktime播放的最後一幀7號
我需要什麼,我認爲,在我所處的特定時間點,不是總數,而是樣本數量的值。
任何想法,我怎麼能夠得到那個?
謝謝!
PS:
使用以下也試過:
NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo]; QTTrack *tcTrack = [videoTracks objectAtIndex:0]; if (tcTrack != nil) { QTMedia * media = [tcTrack media]; if (media != nil) { NSLog(@"sample : %@", [media attributeForKey:QTMediaSampleCountAttribute]); Media qtMedia = [media quickTimeMedia]; MediaHandler mh = GetMediaHandler(qtMedia); long frameNum; TimeCodeDef tcDef; TimeCodeRecord tcData; UserData srcRefH; TCTimeCodeToFrameNumber(mh, &tcDef, &tcData, &frameNum); NSLog(@"frameNum %ld", frameNum); NSLog(@"tcData %d:%d:%d.%d", tcData.t.hours, tcData.t.minutes, tcData.t.seconds, tcData.t.frames); } }
但我得到的是:
幀號-1/tcData 0:2:0.0
雖然這不是QTKit。 – martinjbaker 2013-03-12 19:50:00
@martinjbaker - 嗯,我正在QTMovieView中使用QTMovie並使用QTKit。誠然,爲了這個工作,似乎我必須導入Quicktime框架,但它只是意味着結束:) – Andre 2013-03-13 20:44:04