2013-03-07 50 views
3

這一直使我瘋狂了一段時間。從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

回答

1

對,我找到了一個辦法!感謝二元君主!

這裏是我的解決方案:

QTTime time = [movie currentTime]; 

NSArray *videoTracks = [movie tracksOfMediaType:QTMediaTypeVideo]; 
QTTrack *tcTrack = [videoTracks objectAtIndex:0]; 

Track track = tcTrack.quickTimeTrack; 

Media media = GetTrackMedia(track); 

SInt64 frameNum; 

MediaDisplayTimeToSampleNum(media, 
          time.timeValue, 
          &frameNum, 
          NULL, 
          NULL); 

NSLog(@"Save frame number %lli", frameNum); 

工程就像一個魅力,尤其是爲了什麼,我希望它太,這是告訴手剎CLI從一個特定的圖像保存3秒剪輯( - -start-at frame:xxx)。

我現在可以ha我自己的賞金嗎?

+0

雖然這不是QTKit。 – martinjbaker 2013-03-12 19:50:00

+0

@martinjbaker - 嗯,我正在QTMovieView中使用QTMovie並使用QTKit。誠然,爲了這個工作,似乎我必須導入Quicktime框架,但它只是意味着結束:) – Andre 2013-03-13 20:44:04