Audio 如何使用QuickTime API从MOV文件导出音频媒体?

Audio 如何使用QuickTime API从MOV文件导出音频媒体?,audio,export,quicktime,Audio,Export,Quicktime,我想用QuickTime API导出MOV文件的音频媒体,并将其保存到WAV文件(或类似文件)。我该怎么做?我使用Windows XP。很容易做到这一点,如果商业软件需要,可以在LGPL下编译。如果您需要更多可定制的挂钩,您可以使用同一项目中的libavcodec和libavformat。很容易做到这一点,如果商业软件需要,可以在LGPL下编译。如果您需要更多可定制的挂钩,您可以使用同一项目中的libavcodec和libavformat。如果我说的是显而易见的,很抱歉,但您应该能够通过与此处描

我想用QuickTime API导出MOV文件的音频媒体,并将其保存到WAV文件(或类似文件)。我该怎么做?我使用Windows XP。

很容易做到这一点,如果商业软件需要,可以在LGPL下编译。如果您需要更多可定制的挂钩,您可以使用同一项目中的libavcodec和libavformat。

很容易做到这一点,如果商业软件需要,可以在LGPL下编译。如果您需要更多可定制的挂钩,您可以使用同一项目中的libavcodec和libavformat。

如果我说的是显而易见的,很抱歉,但您应该能够通过与此处描述相同的方式实现这一点:

或者你需要以一种非互动的方式来做这件事

编辑

要使用电影导出器以非交互方式将电影文件的音频媒体导出为WAVE,请使用以下代码:

"include "QuickTimeComponents.h"
...
// aquire Movie
...
ComponentDescription  desc;
MovieExportComponent  exporter;
char  filename[255];
FSSpec  fsspec;
int flags;

// first we have to find a Movie Exporter capable of eporting the format we want
desc.componentType          = MovieExportType;
desc.componentSubType       = kQTFileTypeWave; // 'WAVE'
desc.componentManufacturer  = SoundMediaType;
desc.componentFlags         = 0;
desc.componentFlagsMask     = 0;

// and create an instance of it
exporter = OpenComponent( FindNextComponent( 0, &desc ) );

// then set up a FSSpec for our output file
sprintf( outfilename, "C:/test.wav" );
c2pstr( outfilename );
FSMakeFSSpec( 0, 0L, (ConstStr255Param)outfilename, &fsspec );
// if you do error handling take care to ignore fnfErr being returned 
// by FSMakeFSSpec - we're about to create a new file after all

// then finally initiate the conversion
flags= createMovieFileDeleteCurFile | movieToFileOnlyExport;
ConvertMovieToFile( movie, 0, &fsspec, kQTFileTypeWave, 'TVOD', 0, 0, flags, exporter );

CloseComponent( exporter );

...
// Clean up
...

抱歉,如果我说的是显而易见的,但您应该能够通过与此处描述相同的方式实现这一点:

或者你需要以一种非互动的方式来做这件事

编辑

要使用电影导出器以非交互方式将电影文件的音频媒体导出为WAVE,请使用以下代码:

"include "QuickTimeComponents.h"
...
// aquire Movie
...
ComponentDescription  desc;
MovieExportComponent  exporter;
char  filename[255];
FSSpec  fsspec;
int flags;

// first we have to find a Movie Exporter capable of eporting the format we want
desc.componentType          = MovieExportType;
desc.componentSubType       = kQTFileTypeWave; // 'WAVE'
desc.componentManufacturer  = SoundMediaType;
desc.componentFlags         = 0;
desc.componentFlagsMask     = 0;

// and create an instance of it
exporter = OpenComponent( FindNextComponent( 0, &desc ) );

// then set up a FSSpec for our output file
sprintf( outfilename, "C:/test.wav" );
c2pstr( outfilename );
FSMakeFSSpec( 0, 0L, (ConstStr255Param)outfilename, &fsspec );
// if you do error handling take care to ignore fnfErr being returned 
// by FSMakeFSSpec - we're about to create a new file after all

// then finally initiate the conversion
flags= createMovieFileDeleteCurFile | movieToFileOnlyExport;
ConvertMovieToFile( movie, 0, &fsspec, kQTFileTypeWave, 'TVOD', 0, 0, flags, exporter );

CloseComponent( exporter );

...
// Clean up
...
用mplayer

mplayer.exe -ao pcm:file=output.wav -vo null -vc dummy input.mov
用mplayer

mplayer.exe -ao pcm:file=output.wav -vo null -vc dummy input.mov

我说我需要它与Quicktime Api我说我需要它与Quicktime Api我说我需要它与Quicktime Api我说我需要它与Quicktime Api非交互式方式会更好,是的。我尝试了这种方式,Quicktime也创建了一个WAV文件,但它只有84kb大小。。。所以你可以说里面没有数据。。。为什么?如果检查ConvertMovieToFile()的返回值-它是否返回值!=诺尔?返回值可能会提示在这种情况下出现了什么错误……返回值==noErr;我是否必须迭代每一帧(或者:ConvertMovieToFile()是否只输出一帧的声音?)?或者你的代码应该导出完整的WAV吗?它应该导出完整的音频。当我昨天测试它时,它工作得很好。你怎么可能试过?此外,我使用上面链接的答案中的代码来获取QuickTime文件的电影。你用了不同的东西吗?如果,这可能是代码行为不同的原因…非交互方式会更好,是的。我尝试了这种方式,QuickTime也创建了一个WAV文件,但它只有84kb大小。。。所以你可以说里面没有数据。。。为什么?如果检查ConvertMovieToFile()的返回值-它是否返回值!=诺尔?返回值可能会提示在这种情况下出现了什么错误……返回值==noErr;我是否必须迭代每一帧(或者:ConvertMovieToFile()是否只输出一帧的声音?)?或者你的代码应该导出完整的WAV吗?它应该导出完整的音频。当我昨天测试它时,它工作得很好。你怎么可能试过?此外,我使用上面链接的答案中的代码来获取QuickTime文件的电影。你用了不同的东西吗?如果,这可能是代码行为不同的原因……您是否愿意使用Quicktime for Java api?您是否愿意使用Quicktime for Java api?