我试图使用 Xuggler 将音频格式转换为 ogg ( vorbis ) 文件。
首先,我已经尝试了非常基本的方法,
IMediaReader readermp3 = ToolFactory.makeReader(sourcefile);
IMediaWriter writer = ToolFactory.makeWriter(targetfilemp3, readermp3);
readermp3.addListener(writer);
while (readermp3.readPacket() == null)
目标文件以 .ogg 结尾。这实际上有效,但是它编码为 ogg FLAC 而不是 ogg vorbis。
然后我尝试手动完成它的一些部分,
首先 - 获取原始采样率和通道号,其次 - 添加音频流,使用这些采样率、通道号和 vorbis 的编解码器 ID。
IMediaReader readermp3 = ToolFactory.makeReader(sourcefile);
IContainer readercontainer = readermp3.getContainer();
readercontainer.open(sourcefile, IContainer.Type.READ,null);
int numStreams = readercontainer.getNumStreams();
IStream stream = null;
for(int i = 0; i < numStreams; i++) {
stream = readercontainer.getStream(i); }
IStreamCoder mycoder = stream.getStreamCoder();
int sourcechannels,sourcesamplerate;
sourcechannels = mycoder.getChannels();
sourcesamplerate = mycoder.getSampleRate();
/* 这些是用于获取采样率和通道,我认为它们不相关,但我*/复制它只是为了以防万一
IMediaWriter writer = ToolFactory.makeWriter(targetfilemp3, readermp3);
writer.addAudioStream(0, 0,ICodec.ID.CODEC_ID_VORBIS,sourcechannels, sourcesamplerate);
readermp3.addListener(writer);
while (readermp3.readPacket() == null)
;
当我尝试运行它时,它给了我一个错误“错误 org.ffmpeg - [libvorbis @ 0436F300] 不支持指定的 sample_fmt。” “警告 com.xuggle.xuggler - 错误:无法打开编解码器 (../../../../../../../csrc/com/xuggle/xuggler/StreamCoder.cpp:831) "
旁注 = 它适用于 mp3、wav 和 flac ogg 文件。另外,我尝试将扩展名更改为 .vorbis 而不是 .ogg。还是同样的错误。
然后当然,我用谷歌搜索了它。关于这个问题只有 1 个相关的 q/a https://groups.google.com/forum/?fromgroups=#!topic/xuggler-users/18hsI_LGxI4
但是,我不明白答案=)。
非常感谢您的回答。