OGG
音频压缩格式
Ogg全称是OGGVobis(oggVorbis)是一种音频压缩格式,类似于MP3等的音乐格式编码器或播放器。
命名来源
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格式的方法:
转换OGG格式的方法有很多,但最简单的方法是就是用Foobar2000+OGGENC外部编码器。Foobar2000现在很流行,它是一个Windows 平台下的高级音频播放器。不仅音质很出色,功能也很强大。Foobar2000支持WAVAIFFVOC、AU、SND、Ogg Vorbis、MPC、MP2、MP3等音乐格式,通过插件还能支持MPEG-4AACFLAC、Ogg、FLAC、MonkeysAudio、WavPackSpeexCDDASPC及各种MOD类型,支持的类型是已经足够了。利用Foobar2000的转换功能,可以方便的其它的音频格式制作成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、VBRQuality三种,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的设置规定来表示。
多个已被页格式封装好的逻辑流(如语音、文本、图片、音频、视频等)按应用要求的时序关系合成物理流。
参考资料
最新修订时间:2023-01-05 05:20
目录
概述
命名来源
优点与缺点
参考资料