【问题标题】:extract every audio-channel in a quicktime file提取 quicktime 文件中的每个音频通道
【发布时间】:2010-07-06 07:57:00
【问题描述】:

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

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

【问题讨论】:

  • 如果您解释您使用的是什么库,您可能会得到更多答案..
  • 好的,刚刚补充说我使用的是Quicktime-API / QuickTime-SDK

标签: c++ c audio export quicktime


【解决方案1】:

您是否与this 核对过?

【讨论】:

    【解决方案2】:

    不确定这是否有帮助 - 有一种不使用 Quicktime-SDK 的方法:

    您需要解析 Quicktime“moov”原子以获取音轨类型/bps/采样率/字节序等,然后找到“stsc”和“stco”原子到 samples_per_chunk 和每个块偏移量。然后,您只需使用这些偏移量读取“mdat”原子原始数据并将样本写入目标文件。

    这不是简单的方法 - 但它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2020-02-07
      • 2011-06-05
      相关资源
      最近更新 更多