c ++音频转换(mp3 - > ogg)问题

时间:2009-06-03 13:58:42

标签: c++ audio

我想知道是否有人知道如何将mp3音频文件转换为ogg音频文件。我知道你可以在线购买程序,但我宁愿拥有自己的小应用程序,它允许我转换我想要的多个文件。

5 个答案:

答案 0 :(得分:4)

这很简单。我不会使用Windows Media Format SDK。仅仅是因为这对工作来说太过分了。

你需要一个MP3解码器和一个OGG编码器以及一些胶水代码(打开文件,设置编解码器,管理原始音频数据等)。

对于MP3解码器,我建议您查看liblame库或使用此解码库http://www.codeproject.com/KB/audio-video/madlldlib.aspx作为起点。

对于OGG来说,选择并不多。你需要libogg和libvorbis。很简单。 libs附带的示例代码向您展示了如何进行编码。

祝你好运。

答案 1 :(得分:2)

这是一个坏主意。引用Vorbis常见问题解答

  

您可以将任何音频格式转换为   Ogg Vorbis。但是,转换自   一种有损格式,如MP3,另一种   像Vorbis一样有损格式   通常是个坏主意。 MP3和MP3都有   Vorbis编码器实现了很高的性能   扔掉压缩率   你的音频波形的一部分   可能不会听到。但是,MP3   和Vorbis编解码器非常不同,   所以每个人都会抛弃不同的东西   部分音频,虽然有   肯定是有些重叠。转换   MP3到Vorbis涉及解码   MP3文件回到未压缩状态   格式,如WAV,并重新压缩它   使用Ogg Vorbis编码器。该   解码后的MP3将缺少部件   MP3的原始音频   编码器选择丢弃。奥格   Vorbis编码器将丢弃其他编码器   压缩时的音频组件   数据。充其量,结果将是   一个听起来像的Ogg文件   你原来的MP3,但它是最多的   可能是生成的文件   声音比原来的MP3差。在   没有案例你会得到一个文件   听起来比原来的MP3好。

     

由于许多音乐播放器都可以同时播放   MP3和Ogg文件,没有理由   你应该切换所有   您的文件为一种格式或另一种格式。   如果你喜欢Ogg Vorbis,我们会的   鼓励你在你使用它   从原始的无损音频编码   来源(如CD)。编码时   原件,你会发现你可以   制作更小或更小的Ogg文件   比你的质量更好(或两者兼而有之)   MP3文件。

     

(如果你必须绝对必须转换   从MP3到Ogg,有几个   可用的转换脚本   Freshmeat。)

http://www.vorbis.com/faq/#transcode

并且,为了准确起见,来自同一个FAQ:

  

Ogg Ogg是Xiph.org的名字   音频,视频和音频的容器格式   元数据。

     

Vorbis Vorbis就是这个名字   特定的音频压缩方案   那个被设计成包含在   奥格。请注意,其他格式是   能够嵌入Ogg这样的   作为FLAC和Speex。

我认为理论上可以在Ogg中嵌入MP3,但我不确定为什么有人会想要。 FLAC是一种无损音频编解码器。 Speex是一种非常有损的音频编解码器,针对语音编码进行了优化。 Vorbis是一种通用的有损音频编解码器。因此,“Ogg音频”有点用词不当。 Ogg Vorbis是我想象的合适术语。

所有这一切,如果您仍然希望从MP3转换为Ogg Vorbis,您可以(a)尝试上面的Freshmeat链接,(b)查看其他答案,或(c)查看FFmpeg。 FFmpeg是一个通用库,用于转换大量视频和音频编解码器和格式。它可以做很多聪明的事情。我听说它的默认Vorbis编码器质量很差,但它可以配置为使用libvorbis而不是内置的Vorbis编码器。 (最后一句话现在可能已经过时了。我不知道。)

请注意,FFmpeg将使用LAME和libvorbis,就像您现在一样。它不会对你做任何新的事情。它只是让您可以选择进行各种其他转换。

答案 2 :(得分:1)

你需要解码mp3然后编码成ogg。

一种可能性是使用liblame进行mp3解码,使用libogg / libvorbis进行编码进入ogg。或者只使用那些命令行版本。

但我不会说从一种有损格式转换为另一种格式是一个好主意。

答案 3 :(得分:1)

Foobar2000(http://www.foobar2000.org/)是免费的,可以很容易地在文件格式之间进行转换。只需点击几下即可将MP3转换为OGG。

请记住,从有损格式转换为有损格式会降低音频质量,而不是从无损格式(FLAC,CD音频,Apple无损编解码器)转换为有损格式(MP3,OGG,M4A) )。如果您可以访问无损源音频,请使用它来转换它。

答案 4 :(得分:0)

您当然可以使用Windows Media Format SDK在C ++中执行此操作。

我自己只使用过WMFSDK9。它包含一个名为UncompAVIToWMV的示例,可以帮助您入门。从自述文件:

  

它显示了如何合并样本   来自几个的音频和视频流   AVI文件并将它们合并到   类似的流或创建新流   基于源流配置文件。   它还显示了如何创建   任意流,做多通道   编码并添加SMPTE时间码。