簡體   English   中英

c ++音頻轉換(mp3 - > ogg)問題

[英]c++ audio conversion ( mp3 -> ogg ) question

我想知道是否有人知道如何將mp3音頻文件轉換為ogg音頻文件。 我知道你可以在線購買程序,但我寧願擁有自己的小應用程序,它允許我轉換我想要的多個文件。

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

你需要一個MP3解碼器和一個OGG編碼器以及一些膠水代碼(打開文件,設置編解碼器,管道原始音頻數據等)。

對於MP3解碼器,我建議您查看liblame庫或使用此解碼庫http://www.codeproject.com/KB/audio-video/madlldlib.aspx作為起點。

對於OGG來說,選擇並不多。 你需要libogg和libvorbis。 很簡單。 libs附帶的示例代碼向您展示了如何進行編碼。

祝好運。

這是個壞主意。 引用Vorbis常見問題解答

您可以將任何音頻格式轉換為Ogg Vorbis。 然而,從一種有損格式(如MP3)轉換為另一種有損格式(如Vorbis)通常是一個壞主意。 MP3和Vorbis編碼器都可以通過丟棄您可能聽不到的部分音頻波形來實現高壓縮比。 然而,MP3和Vorbis編解碼器是非常不同的,因此它們每個都會丟棄音頻的不同部分,盡管肯定存在一些重疊。 將MP3轉換為Vorbis涉及將MP3文件解碼為未壓縮格式(如WAV),並使用Ogg Vorbis編碼器對其進行重新壓縮。 解碼的MP3將丟失MP3編碼器選擇丟棄的原始音頻部分。 然后,Ogg Vorbis編碼器在壓縮數據時將丟棄其他音頻組件。 充其量,結果將是一個聽起來與原始MP3相同的Ogg文件,但最終文件聽起來可能比原始MP3更糟糕。 在任何情況下,您都不會得到比原始MP3更好的文件。

由於許多音樂播放器可以同時播放MP3和Ogg文件,因此您沒有必要將所有文件切換為一種格式或另一種格式。 如果您喜歡Ogg Vorbis,那么當您使用原始的無損音頻源(如CD)進行編碼時,我們建議您使用它。 從原件進行編碼時,您會發現可以制作比MP3更小或質量更好(或兩者兼有)的Ogg文件。

(如果必須絕對必須從MP3轉換為Ogg, Freshmeat上有幾個轉換腳本。)

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

並且,為了准確起見,來自同一個FAQ:

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

Vorbis Vorbis是特定音頻壓縮方案的名稱,旨在包含在Ogg中。 請注意,其他格式可以嵌入到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,就像您現在一樣。 它不會對你做任何新的事情。 它只是讓您可以選擇進行各種其他轉換。

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

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

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

Foobar2000( http://www.foobar2000.org/ )是免費的,可以很容易地在文件格式之間進行轉換。 只需幾次點擊即可將MP3轉換為OGG。

請記住,從有損格式轉換為有損格式會降低音頻質量,而不是從無損格式(FLAC,CD音頻,Apple無損編解碼器)轉換為有損格式(MP3,OGG,M4A)。 如果您可以訪問無損源音頻,請使用它來轉換它。

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

我自己只使用過WMFSDK9。 它包含一個名為UncompAVIToWMV的示例,可以幫助您入門。 從自述文件:

它顯示了如何合並來自多個AVI文件的音頻和視頻流的樣本,並將它們合並到類似的流中,或者根據源流配置文件創建新的流。 它還顯示了如何創建任意流,執行多通道編碼和添加SMPTE時間代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM