c++ 音频转换 ( mp3 -> ogg ) 问题
Posted
技术标签:
【中文标题】c++ 音频转换 ( mp3 -> ogg ) 问题【英文标题】:c++ audio conversion ( mp3 -> ogg ) question 【发布时间】:2009-06-03 13:58:42 【问题描述】:我想知道是否有人知道如何将 mp3 音频文件转换为 ogg 音频文件。我知道有些程序可以在线购买,但我宁愿拥有自己的小应用程序,让我可以转换任意数量的文件。
【问题讨论】:
这对于即将到来的 superuser.com 来说是一个很好的问题。 我不这么认为,发帖人想创建一个应用程序。在我看来,这就是编程 大部分转换器都可以在脚本中使用来转换一批文件。无需编写应用程序。 “Ogg 音频”不存在,因此。 Ogg 是一种容器格式,它可能包含视频、音频或两者兼有。如果它包含音频,则该音频可能位于无损 FLAC 编解码器、有损 Vorbis 编解码器(最常见)或其他编解码器(较少见,但可能)中。 【参考方案1】:这很简单。我不会使用 Windows Media Format SDK。仅仅因为它对这份工作来说太过分了。
您需要一个 MP3 解码器和一个 OGG 编码器以及一些胶水代码(打开文件、设置编解码器、管道传输原始音频数据等)
对于 MP3 解码器,我建议您查看 liblame 库或使用此解码库 http://www.codeproject.com/KB/audio-video/madlldlib.aspx 作为起点。
对于 OGG,选择并不多。你需要 libogg 和 libvorbis。就这么简单。库附带的示例代码向您展示了如何进行编码。
祝你好运。
【讨论】:
【参考方案2】:这是个坏主意。引用 Vorbis 常见问题解答
您可以将任何音频格式转换为 奥格·沃尔比斯。但是,从 一种有损格式,如 MP3,到另一种 有损格式,如 Vorbis,是 通常是个坏主意。 MP3 和 Vorbis 编码器实现了高 通过丢弃压缩比 音频波形的一部分 可能不会听到。然而,MP3 和 Vorbis 编解码器非常不同, 所以他们每个人都会扔掉不同的东西 部分音频,虽然有 肯定是有些重叠的。转换 到 Vorbis 的 MP3 涉及解码 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
为了准确起见,来自同一个常见问题解答:
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,就像您已经使用的一样。它不会为你做任何新的事情。它只是让您可以选择进行各种其他转换。
【讨论】:
【参考方案3】:Foobar2000 (http://www.foobar2000.org/) 是免费的,可以很容易地在文件格式之间进行转换。只需点击几下即可从 MP3 转换为 OGG。
请记住,与从无损格式(FLAC、CD 音频、Apple 无损编解码器)转换为有损格式(MP3、OGG、M4A)相比,从有损格式转换为有损格式会降低音频质量)。如果您可以访问无损源音频,请改用它来转换它。
【讨论】:
Ogg 不是音频编解码器,有损、无损或紫色。这是一种容器格式。 Vorbis 是一种通常与 Ogg 相关联的音频编解码器,但 Ogg 文件也可以包含 FLAC 或其他音频。【参考方案4】:您需要解码 mp3,然后编码为 ogg。
一种可能性是使用 liblame 进行 mp3 解码,使用 libogg/libvorbis 编码成 ogg。或者只使用这些的命令行版本。
但我不会说从一种有损格式转换为另一种格式是个好主意。
【讨论】:
【参考方案5】:您当然可以使用 Windows Media Format SDK 在 C++ 中执行此操作。
我自己只使用过 WMFSDK9。它包含一个名为 UncompAVIToWMV 的示例,可以帮助您入门。来自自述文件:
它展示了如何合并样本 来自多个音频和视频流 AVI 文件,或者将它们合并到 类似的流或创建一个新的流 基于源流配置文件。 它还展示了如何创建一个 任意流,做多遍 编码并添加 SMPTE 时间码。
【讨论】:
以上是关于c++ 音频转换 ( mp3 -> ogg ) 问题的主要内容,如果未能解决你的问题,请参考以下文章
天啊!跪求用Exact Audio Copy把CD转化为OGG格式的音乐?
.mp3 音频对于 iOS 应用程序是不是足够,或者您还需要 .ogg?