2009-06-03 90 views
4

我想知道如果有人知道如何將mp3音頻文件轉換爲ogg音頻文件。我知道有些程序可以在線購買,但我寧願只有我自己的小應用程序,它允許我轉換任意數量的文件。C++音頻轉換(mp3 - > ogg)

+1

這對於即將到來的superuser.com來說是一個很好的問題。 – 2009-06-03 14:04:05

+4

我不這麼認爲,海報想創建一個應用程序。在我看來,這是編程 – 2009-06-03 14:36:27

回答

4

它很簡單。我不會使用Windows Media Format SDK。僅僅因爲它對於這項工作來說太過分了。

你需要一個MP3解碼器和OGG編碼器和周圍的膠水代碼一點點(打開文件,建立編解碼器,圍繞ECT管道原始音頻數據。)

對於MP3解碼器,我建議你可以看一下liblame庫或者使用這個解碼庫文件作爲起點。

對於OGG沒有太多的選擇。你需要libogg和libvorbis。那樣容易。 libs附帶的示例代碼顯示瞭如何執行編碼。

祝你好運。

0

你當然可以在C++中用Windows Media Format SDK來做到這一點。

我只使用了WMFSDK9我自己。它包含一個名爲UncompAVIToWMV的示例,可能會使您開始。自述:

它展示瞭如何從幾個 AVI文件合併爲 音頻和視頻流的樣本,要麼合併到這些 類似的流或創建基於源流分佈的新流 。 它還顯示瞭如何創建一個 任意流,做多通 編碼並添加SMPTE時間碼。

1

你需要解碼mp3然後編碼成ogg。

一種可能性是使用liblame進行mp3解碼,並使用libogg/libvorbis編碼進入ogg。或者只是使用這些命令行版本。

但我不會說從一種有損格式轉換爲另一種格式是一個好主意。

1

Foobar2000(http://www.foobar2000.org/)是免費的,可以很容易地轉換文件格式。只需點擊幾下即可將MP3轉換爲OGG。請注意,從有損格式轉換爲有損格式會比從無損格式(FLAC,CD Audio,Apple Lossless Codec)轉換爲有損格式(MP3,OGG, M4A)。如果您有權訪問無損源音頻使用來轉換它。

2

這是一個壞主意。引用來自Vorbis的常見問題

您可以將任何音頻格式轉換爲 Ogg Vorbis。但是,從 一個有損格式,如MP3轉換爲另一個 有損格式,如Vorbis,是 通常是一個壞主意。 MP3和 Vorbis編碼器通過丟棄 可能會聽不到的音頻波形部分來實現高壓縮比。但是,MP3 和Vorbis編解碼器差別很大,所以它們每個都會扔掉不同的 部分音頻,儘管 肯定有些重疊。將MP3轉換爲Vorbis包括將 MP3文件轉換回非壓縮的 格式(如WAV),並使用Ogg Vorbis編碼器重新壓縮 。解碼後的MP3將丟失編碼器選擇丟棄的原始音頻的部分 。 Vorbis編碼器在壓縮 數據時將丟棄其他 音頻組件。充其量,結果將是 一個Ogg文件,這聽起來與您的原始MP3相同,但它最可能是 相當於 聽起來比您的原始MP3差。在 沒有任何情況下你會得到一個文件, 聽起來比原來的MP3更好。

由於許多音樂播放器可以播放兩種 MP3和OGG文件,沒有理由 ,你應該有所有的 文件轉換到一種格式或其他。 如果您喜歡Ogg Vorbis,那麼我們鼓勵您在使用 編碼原始無損音頻 來源(如CD)時使用它。當從 原件編碼時,您會發現可以使 使Ogg文件比您的 MP3更小或更好質量(或兩者均爲 )。

(如果你必須絕對必須從MP3到奧格轉換 ,有幾個 轉換腳本可在 Freshmeat。)

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

而且,爲準確起見,從相同的常見問題解答:

Ogg Ogg是o f Xiph.org的 音頻,視頻和 元數據的容器格式。

Vorbis格式 Vorbis是的 它的設計要包含在 奧格特定的音頻壓縮方案 名稱。請注意,其他格式爲 能夠作爲FLAC和Speex嵌入在Ogg中,例如 。

我想在理論上可以在Ogg中嵌入MP3,但我不確定爲什麼有人會想要。 FLAC是一種無損音頻編解碼器。 Speex是針對編碼語音進行優化的非常有損音頻編解碼器。 Vorbis是一款通用的有損音頻編解碼器。因此,「Ogg音頻」有點用詞不當。 Ogg Vorbis是我想象的你的意思。如果你仍然想從MP3轉換到Ogg Vorbis,你可以(a)嘗試上面的Freshmeat鏈接,(b)看看其他答案,或者(c)看看FFmpeg。 FFmpeg是一個用於轉換大量視頻和音頻編解碼器和格式的通用庫。它可以做很多聰明的事情。我聽說它的默認Vorbis編碼器質量很差,但它可以配置爲使用libvorbis而不是內置的Vorbis編碼器。 (最後一句可能已過時,我不知道)

請注意,FFmpeg將使用LAME和libvorbis,就像你已經是。它不會爲你做任何新的事情。它只是讓您可以選擇進行各種其他轉換。