2010-07-06 23 views
3

我想使用QuickTime-API提取quicktime电影中的每个音频通道。这意味着如果文件有5.1环绕声,我最终需要6个音频文件。 但目前我不知道如何管理。到现在为止,我有:提取QuickTime文件中的每个音频通道

OSStatus err = noErr; 
MovieAudioExtractionRef extractionSessionRef = nil; 
Boolean allChannelsDiscrete = true; 
int flags; 
int numFrames; 
AudioBufferList *mBufferList; 
err = MovieAudioExtractionBegin(movie, 0, &extractionSessionRef); 


// disable mixing of audio channels 
err = MovieAudioExtractionSetProperty(extractionSessionRef, 
    kQTPropertyClass_MovieAudioExtraction_Movie, 
    kQTMovieAudioExtractionMoviePropertyID_AllChannelsDiscrete, 
    sizeof (Boolean), &allChannelsDiscrete); 

err = MovieAudioExtractionFillBuffer(extractionSessionRef, &numFrames, 
    mBufferList, &flags); 
if (flags & kQTMovieAudioExtractionComplete) 
{ 
    // extraction complete! 
} 
err = MovieAudioExtractionEnd(extractionSessionRef); 

的问题是,我不知道怎么去mBufferList以及如何每通道为WAV 48kHz的出口。你可以帮我吗?该示例来自this page

+0

如果你解释你正在使用的库,你可能会得到更多的答案。 – 2010-07-06 09:32:57

+0

好吧,只是补充说我使用Quicktime-API/QuickTime-SDK – Berschi 2010-07-06 09:47:39

回答

0

不知道这是否有助于 - 有这样做不使用QuickTime的SDK的方法:

您需要解析QuickTime的“MOOV乐”原子得到音轨类型/ bps的/采样率/端等。 ,然后找到“stsc”和“stco”原子到samples_per_chunk和每个块偏移量。然后,您只需使用这些偏移量读取“mdat”atom原始数据并将样本写入目标文件。

这不是一个简单的方法 - 但它适用于我。

相关问题