命名來源
Ogg全稱是OGG Vorbis, 是一種
音頻壓縮格式,類似於
MP3等的音樂格式。但有一點不同的是,它是完全免費、開放和沒有專利限制的。OGG Vorbis有一個特點是支持多聲道。
Ogg Vorbis檔案的擴展名是.OGG。這種檔案的設計格式是非常先進的。創建的OGG檔案可以在未來的任何播放器上播放,因此,這種檔案格式可以不斷地進行大小和
音質的改良,而不影響舊有的
編碼器或播放器。
優點與缺點
MP3是有損壓縮格式,因此壓縮後的數據與標準的CD音樂相比是有損失的。VORBIS也是
有損壓縮,通過使用更加先進的
聲學模型去減少損失,因此,同樣位速率(Bit Rate)編碼的OGG與MP3相比聽起來更好一些。另外,還有一個原因,
MP3格式是受專利保護的(mp3專利費已經極低,誕生近20年快該過保護期了)。如果你想使用MP3格式發布自己的作品,則需要付給Fraunhofer(發明MP3的公司)專利使用費。而VORBIS就完全沒有這個問題。對於樂迷來說想要高品質的音頻,使用FLAC是個更好的選擇,因為FLAC是無損壓縮音頻,又沒有專利授權費用,現在很多播放器都加入了FLAC的行列,就連sony的頂級高解析音頻播放器都已經支持。
優點1:Ogg Vorbis的音質和MP3不相上下,但無法和FLAC比。
由於Vorbis 使用了與MP3相比完全不同的數學原理,因此在壓縮音樂時受到的挑戰也不同。在聆聽測試中,同樣位速率編碼的Vorbis 和MP3檔案具有同等的聲音質量。
如果兩個檔案都是以同樣的位速率和CBR(常量位速率,指檔案從頭到尾都是一種位速率)方式來編碼的話,那他們的大小肯定相同。當前 Vorbis 是以VBR(可變位速率)方式編碼的,(很久以前MP3也可以用VBR方式編碼,除此以外還支持ABR(平局碼率)方式,ABR方式可以事先確定大小的情況下獲得儘可能好的音質,並且MP3支持通過左右聲道聯合立體聲編碼方式提高音質。)這使得Ogg的檔案可以更小,因為VBR方式可以處理能大幅度進行壓縮的
音頻數據(比如無聲的時段)而節省
空間。
優點2:Ogg Vorbis支持類似於MP3的ID3信息
Vorbis格式中包括有一個靈活而又完整的注釋欄,可用於填寫各種相關信息。
優點3:Ogg Vorbis格式支持流式播放
音頻流是Vorbis的一個重要組成部分.vorbis格式從設計的一開始就是立足於可以容易地進行流式處理。並且,Vorbis的設計者正與Icecast
流媒體軟體的創造者一起使Icecast兼容Vorbis。
優點4:Ogg Vorbis避免了像MP3檔案的ID3標記那樣煩瑣的操作(有很多針對MP3的ID3修改軟體標記早已不繁瑣)
Vorbis具有一個設計良好、靈活的注釋,避免了像MP3檔案的
ID3標記那樣煩瑣的操作;Vorbis還具有位速率縮放:可以不用重新編碼便可調節檔案的位速率。Vorbis檔案可以被分成小塊並以樣本粒度進行編輯;Vorbis支持多通道; Vorbis檔案可以以邏輯方式相連線等。
缺點1:播放兼容性差。mp3已經成了便攜隨身聽的代名詞。絕大多數播放器、包括手機、pad等設備都支持mp3格式(其實mp3專利晶片授權費極低),而支持ogg格式的播放器很少。
缺點2:mp3是1997年以前就已經誕生,將近20年壟斷了消費機市場。ogg音頻普及性非常差,相對於mp3而言音質也沒有競爭力,普及的可能性極低。
缺點3:相對於已經普及的微軟WMA格式,ogg沒有任何優勢。不管是播放軟體兼容性,碼率,流媒體等方面。
缺點4:多聲道系統已經由DOLBY、DTS兩家公司壟斷,他們都有完整的製作發行體系。大型多聲道電影、電視、音樂製作都是基於這兩家公司的技術和標準。ogg只能望洋興嘆了。
缺點5:很多專業音頻製作軟體不支持ogg檔案格式。
缺點6:現今HIFI已經被HIRES(高解析)代替,隨著存儲、網速等限制,用戶的聆聽設備已經上了一個台階,有損格式已經漸漸失去市場。
製作OGG音樂格式檔案
OGG格式的音樂檔案沒有大模規普及之前,一般需要利用CD唱片或網上下載的其它格式製作。下面介紹幾種的製作OGG格式的方法:
比如在
foobar2000中用滑鼠選中要轉換的歌曲,右鍵點擊,選中“
轉換”,然後選擇“轉換到同目錄”,這樣就不用找轉換出來的歌了。FOOBAR會彈出個“轉換器設定”,在“編碼預置”里選擇“Ogg Vorbis”。FOOBAR默認的是Q5。可以點擊“。。。”,然後在
“命令行
編碼器設定”將品質拉到最右邊即是最高品質Q10了。設定好後,點擊“確定”開始轉換。如果沒有設定好OGG編碼器的位置,FOOBAR會彈出提示叫你選擇OGG編碼器的位置。
在千千靜聽中,把想轉的歌曲加入到
千千靜聽,在歌曲上右鍵點轉換格式--輸出格式中選命令行編碼器1.0,點擊“配置“--新建1個編碼器方案,名稱任意--把編碼程式改為剛才下載的那個ogg編碼器--擴展名為ogg,命令參數為:-q10--o %d,其餘默認--確認後點擊“立即轉換”。不是Q10的話把“10”改成對應的數字即可。用Easy CD-DA Extractor9轉起來更方便,但是選擇第三方
編碼器時不方便用戶。
有些
MP3播放器增加了對OGG格式支持,如果選購的是小容量版本,建議使用Q2和Q4品質的OGG.
編碼
特點和原理
多通道編碼技術,統稱為
立體聲通道耦合StereoChannelCoupling。據官方聲稱,與其他會造成立體空間感減弱的編碼模型相比,這兩種技術都可以在保持
編碼器的靈活性的同時而不損害本來的立體聲空間影像--相信配合
iRiver的3d音效會有更好的表現力,而且實現的複雜程度比聯合立體聲方式要低。 Ogg的編碼中的比特率選項主要有ABR、
VBR和
Quality三種,Ogg的比特率是可變的,推薦使用設定簡單Quality模式,能滿足大多數人要求。
檔案結構
Ogg檔案格式封裝好壓縮編碼媒體流可用於存儲(磁碟檔案)或直接傳輸(
TCP或管道),這是因為Ogg比特流格式提供了封裝/同步、差錯同步捕獲、尋找標記以及其它足夠的信息使得這種分散開的數據能夠完全地還原為封裝之前的具有包邊界“
packet”形式的壓縮編碼媒體流,恢復到這種原來媒體流就具有的包邊界形式不需要依賴於針對壓縮編碼的解碼器。也就是說Ogg
映射與逆映射和媒體流的壓縮編碼、解碼具有相對獨立性。
映射到Ogg格式的媒體(如vorbis
音頻,Theora視頻)有相關詳細定義,這些定義使得這些媒體之間有更具體的約束關係。Ogg本身並沒詳細說明多個並發
媒體流之間的時間關係,這需要並發媒體流在映射到Ogg格式的時刻來指定,通常他們之間的交錯關係是按他們產生的時間先後順序來排列。
封裝
Ogg檔案需要解封裝的情況有兩種:(1)播放器要對媒體流解碼之前;(2)對媒體流進行RTP/UDP傳輸之前。解封裝的過程就是ogg逆映射過程,即還原為具有包邊界“packet”形式的媒體流,同時以預先填充好了的RTP首部欄位與相應一段媒體數據捆綁,形成RTP
封包。此過程便是媒體流從Ogg格式到RTP格式的轉換過程。
將以packet為單元的媒體流映射為以page為單元的Ogg格式比特流,其中間經過了
segment的劃分和重組環節,但方便了對媒體流的存儲與傳輸(TCP)。對源
緩衝區媒體數據(packet)的操作,需建立幾個中間環節的數據結構,只需將切割的媒體數據在記憶體移動一次,操作指向媒體數據的
指針便能達到媒體
數據遷移到目的緩衝區(page)的意圖,其過程可用兩個函式轉換來表述。
:ogg_stream_packetin()àogg_stream_pageout()。將Ogg格式比特流逆映射還原為packets媒體流,以備播放解碼或以RTP封裝進行
UDP傳輸。其中間環節是把page中的segment單元數據按順序重組為packet,同樣媒體數據在記憶體中的複製只有一次,其過程可用三個函式轉換來表述:ogg_sync_pageout()àogg_stream_pagein()àogg_stream_packetout(),媒體數據複製發生在第一個函式ogg_sync_pageout()。Ogg
映射與
逆映射的功能都體現在ogg函式館中。
Ogg格式是在吸收其它
流媒體檔案格式優點的基礎上針對具有“packet”包邊界形式的媒體流而制定的利於其存儲和傳輸的開源流媒體檔案格式,在icecast流
伺服器的傳輸中得到了很好的套用;根據icecast官方網站公布其測試結果,在GB
主幹網的條件下對Oggvorbis
音頻傳輸的客戶端
並發流可達14000個。
OGG檔案每個頁之間相互獨立,都包含了各自應有的信息,頁的大小是可變的,通常為4K-8KB,最大值不能超過65307bytes(27+255+255*255=65307)。
模式捕獲域
capture_pattern:模式捕獲域,4個位元組,表示頁的開始,其作用是分離Ogg封裝格式還原媒體編碼時識別新頁的作用,它包含了四個幻數(
ASCII字元集):
0x4f'O'0x67'g'0x67'g'0x53'S'
stream_structure_version:1個位元組,表示當前Ogg檔案格式的版本,為0。
header_type_flag:頭部類型標識,1個位元組。標識當前頁具體類型。其設定分三種情況:
bit0x01若已設定,頁包含的媒體編碼數據於前一頁同屬於一個邏輯流的同一packet。若未設定,本頁是一個新的packet。
bit0x02設定,表示邏輯流的第一個頁
bos。未設,不是第一個頁。
bit0x04設定,表示邏輯流的最後一頁eos。未設,不是最後一頁。
granule_position:8個位元組(位元組6-位元組13),包含了媒體編碼相關參數信息。對於
音頻流,包含了到頁為止邏輯流在PCM中採樣編碼的總次數。對於
視頻流,包含了邏輯流到本頁為止視頻
幀編碼的總次數。其值若為-1,則說明到此頁為止,邏輯流的packet還未結束。
bitstream_serial_number:流
序列號,4位元組,表示本頁所屬邏輯流與其他邏輯流相區別的序號。
page_sequence_number:表明了本頁在邏輯流中的序列號,Ogg解碼器能據此識別有無頁丟失。
CRC_checksum:循環冗餘
校驗碼校驗和,4位元組域,包含頁的32bitCRC校驗和(包括頁頭部零CRC校驗和頁
數據校驗),它的產生多項式為:0x04c11db7。
number_page_segments:1位元組,給定了在本頁的segment_tabale域中所出現的segement個數,其最大值為255segments(每片255個位元組),即頁頭部第26個位元組的取值範圍為:0x00-0xff(0-255)。頁最大物理尺寸為65307bytes,小於64KB。
segment_table:邏輯流中的每個packet每個segment長度的取值(lacingvalues,除了每個packet的最後一個segment小於255外,其它segment都為255),這些值以segment出現的先後順序依次排列。此域的
位元組數為number_page_segments域所表示的數字(即在0-255之間)。
bytevalue
270xff(255)
[.................]
n-10xff(255)
n0x00-0xfe(0-254,n=num_segments+26)
頁頭部長度的位元組數:
header_size=27+number_page_segments[Byte]
即頁頭部長度為上述9個域名所表述占據的位元組數之和。
頁的總長度:
page_size=header_size+sum(lacing_values:1...number_page_segments)[Byte]
即頁的總長度為頁頭部長度加上緊隨其後的若干segments長度之和(淨載荷長度)。
Ogg封裝處理過程檔案結構在音視頻編碼在提供給Ogg封裝之前是以具有包邊界的“Packets”形式呈現的,包邊界依賴於具體的編碼格式將邏輯流的各個包進行分片
segmentation,每片大小固定為255Byte,但包的最後一個
segment通常小於255位元組。因為packet的大小可以是任意長度,由具體的媒體
編碼器來決定。
進行頁封裝,每頁都被加上頁頭,每頁的長度可不等,由具體情況而確定。頁頭部segment_table域告知了“lacing_value”值的大小,即頁中最後一個segment的長度(可以為0,或小於255)。一次處理一個packet,此packet被封裝成一個或多個page頁(page的長度設定了上限,一般為4kB);下一個packet必須用新的page開始封裝,由首部欄位域header_type_flag的設定規定來表示。
多個已被頁格式封裝好的邏輯流(如語音、文本、圖片、
音頻、視頻等)按套用要求的時序關係合成物理流。