索阅 100例 首 页| 资 讯| 下 载| 论 坛| 博 客| Webinar| 高 校| 杂 志| 会展| EETV| 百科| 问答| 电路图| 工程师手册| Datasheet

OGG

浏览16779次
Ogg全称应该是OGGVobis(oggVorbis)是一种新的音频压缩格式,类似于MP3等的音乐格式。Ogg是完全免费、开放和没有专利限制的。OggVorbis文件的扩展名是.OGG。Ogg文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。


目录 [隐藏]
1 概述
2 优点和制作
3 编码
4 文件结构
5 相关词条
6 参考资料
OGG-概述
OGG格式音频图
Ogg全称应该是OGG Vobis(ogg Vorbis) 是一种新的音频压缩格式,类似于MP3等的音乐格式。但有一点不同的是,它是完全免费、开放和没有专利限制的。OGG Vobis有一个特点是支持多声道,随着它的流行,以后用随身听来听DTS编码的多声道作品将不会是梦想。
Vorbis 是这种音频压缩机制的名字,而Ogg则是一个计划的名字,该计划意图设计一个完全开放性的多媒体系统。
Ogg Vorbis文件的扩展名是.OGG。这种文件的设计格式是非常先进的。创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
OGG-优点和制作
OGG的商标
一、优点
MP3是有损压缩格式,因此压缩后的数据与标准的CD音乐相比是有损失的。VORBIS也是有损压缩,但通过使用更加先进的声学模型去减少损失,因此,同样位速率(Bit Rate)编码的OGG与MP3相比听起来更好一些。另外,还有一个原因,MP3格式是受专利保护的。如果你想使用MP3格式发布自己的作品,则需要付给 Fraunhofer(发明MP3的公司)专利使用费。而VORBIS就完全没有这个问题。对于乐迷来说,使用OGG文件的显著好处是可以用更小的文件获得优越的声音质量。而且,由于OGG是完全开放和免费的,制作OGG文件将不受任何专利限制,可望可以获得大量的编码器和播放器。这也是为何现在MP3编码器如此少而且大多是商业软件的原因,因为Fraunhofer要收取专利使用费。
优点1:Ogg Vorbis的音质和MP3不相上下
由于Vorbis 使用了与MP3相比完全不同的数学原理,因此在压缩音乐时受到的挑战也不同。在聆听测试中,同样位速率编码的Vorbis 和MP3 文件具有同等的声音质量。
如果两个文件都是以同样的位速率和CBR(常量位速率,指文件从头到尾都是一种位速率)方式来编码的话,那他们的大小肯定相同。当前 Vorbis 是以VBR(可变位速率)方式编码的,这使得Ogg的文件可以更小,因为VBR方式可以处理能大幅度进行压缩的音频数据(比如无声的时段)而节省空间。 Vorbis能以什么位速率进行编码?
理论上,没有固定的位速率。Vorbis的设计是可以以16kbps~128kbps/通道的位速率进行编码。但规格说明中并没有限制将文件以512kbps或8kbps方式编码。
优点2:Ogg Vorbis支持类似于MP3的ID3信息
Vorbis格式中包括有一个灵活而又完整的注释栏,可用于填写各种相关信息。
优点3:Ogg Vorbis格式支持流式播放
音频流是Vorbis的一个重要组成部分.vorbis格式从设计的一开始就是立足于可以容易地进行流式处理。并且,Vorbis的设计者正与Icecast 流媒体软件的创造者一起使Icecast兼容Vorbis。
优点4:Ogg Vorbis避免了象MP3文件的ID3标记那样烦琐的操作
Vorbis具有一个设计良好、灵活的注释,避免了象MP3文件的ID3标记那样烦琐的操作;Vorbis还具有位速率缩放:可以不用重新编码便可调节文件的位速率。Vorbis文件可以被分成小块并以样本粒度进行编辑;Vorbis支持多通道; Vorbis文件可以以逻辑方式相连接等。
二、制作OGG音乐格式文件
OGG格式的音乐文件现在没有大规模普及之前,一般需要利用CD唱片或网上下载的其它格式制作。下面介绍几种的制作OGG格式的方法:
转换OGG格式的方法有很多,但最简单的方法是就是用Foobar2000+OGGENC外部编码器。Foobar2000现在很流行,它是一个Windows 平台下的高级音频播放器。不仅音质很出色,功能也很强大。Foobar2000支持WAV、AIFF、VOC、AU、SND、Ogg Vorbis、MPC、MP2、MP3等音乐格式,通过插件还能支持MPEG-4、AAC、FLAC、Ogg、FLAC、MonkeysAudio、WavPack、Speex、CDDA、SPC及各种MOD类型,支持的类型是已经足够了。利用Foobar2000的转换功能,可以方便的其它的音频格式制作成OGG格式。
Foobar2000转换OGG需要OGG外部编码器的支持(OGGENC),可供选择的OGGENC外部编码器版本很多,音质也有差距。
基于音质的aoTuV beta 4.51制作的编码器使用SSE大幅优化了编码速度非常快。
这是一个命令行编码器可以在foobar2000/EAC/千千静听等软件中方便的调用
比如在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格式支持,比如说魅族的MINIPLAYER(支持OGG/Q-1~Q10)。如果选购的是小容量版本,建议使用Q2和Q4品质的OGG。Q2品质的歌曲文件的音质水平全面超过了128KBPS码率的MP3,而文件体积却还要下1/4以上,无疑是音质和体积的很好结合,适合绝大多树普通用户。事实上即使Q0品质的音质就超过了同样采用64Kbps码率的WMA格式,非常接近128KBPS码率的MP3,而64k的wma的音质根本无法达到128kmp3的水平。如果不是很挑剔音质的用户用Q0品质也完全没有任何问题。
对于音质要求较高的用户可以选择使用Q4品质的OGG,Q4品质的OGG文件体积与128KMP3相当,而音质超过了Lame压缩的192Kbps/VBRMP3,这一点对支持OGG的数码播放器用户很具有吸引力--同样的容量下你存储更多高音质歌曲。对于容量较高切对希望用数码播放器达到CD随身听音质的用户来说,Q10品质的OGG是一个好的选择,Q10的OGG从频谱上看基本和WAV文件完全一致,而体积只有后者的1/3,一首4分钟的歌曲大约有10MB左右。
在支持OGG/Q10格式的数码音乐播放器诞生之前,很多注重音质的用户对MP3格式并不在意--即使普通人也能听出来无损的CD音轨和最高品质的320Kbps码率MP3的音质区别。OGG/Q5、OGG/Q6音质可以达到256KbpsMP3以上的音质水平,可以根据用户需要自行选择。
OGG-编码

OGG编码
Ogg编码特点和原理
OggVorbis中的主要算法是利用MDCT(修饰离散余弦变换ModifiedDiscreteCosineTransform)而不是用现在比较时兴的小波(wavelet)技术。Ogg采用可channelinterleaving和squarepolarmapping两种技术组成的多通道编码技术,统称为立体声通道耦合StereoChannelCoupling。据官方声称,与其他会造成立体空间感减弱的编码模型相比,这两种技术都可以在保持编码器的灵活性的同时而不损害本来的立体声空间影像--相信配合iRiver的3d音效会有更好的表现力,而且实现的复杂程度比联合立体声方式要低。
Ogg的编码中的比特率选项主要有ABR、VBR和Quality三种,Ogg的比特率是可变的,推荐使用设置简单Quality模式,能满足大多数人要求。
Ogg编码优势与前景
优势一:不断改良与完善的升级概念。由于采用了向前适应算法结构(forwardadaptivealgorithmformat),其文件格式已经固定下来后还能对音质进行明显的调节,所以创建的OGG文件可以在任何播放器上播放,并且不断地进行大小和音质的改良,同时也不影响旧有的编码器或播放器。
优势二:支持多声道。OggVorbis可以在相关软件的支持下对所有的声道进行编码,而不像MP3只能编码2个声道。而多声道音乐的兴起,给音乐欣赏带来了革命性的变化,尤其在欣赏交响乐时,会带来更多临场感。
优势三:音质上在低比特率下有很好的表现力。在保持优秀音质的同时又无形中提高了播放器的容量。
优势四:OggVorbis格式完全免费、开放源码且没有专利限制。没有人会拒绝免费而优秀的产品,而对于流行的mp3格式,正式的mp3播放器生产商每年都要向德国FraunhoferInstitution及ThomsonMultimeda缴纳一笔使用权利金,而这笔使用权利金mp3是向消费者收取的。
OGG-文件结构
Ogg 文件结构
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的设置规定来表示。
多个已被页格式封装好的逻辑流(如语音、文本、图片、音频、视频等)按应用要求的时序关系合成物理流。



如果您认为本词条还有待完善,需要补充新内容或修改错误内容,请编辑词条     查看历史版本
开放分类
音频    

参考资料

贡献者
gsfei2009    


本词条在以下词条中被提及:

关于本词条的评论共:(0条)
匿名不能发帖!请先 [ 登陆 ]