标题：ogm
OGM的发展
OGM起源于一个互联网上的黑客想用ogg vorbis音频格式作为视频的音轨，然而他发现由于AVI的天生结构缺陷，使得声画难以同步，最后在尽力多次尝试之后，他终于得到了结果，不是把ogg vorbis并入到AVI中，而是把一个视频文件并入到OGG中，这最终导致了OGM格式的出现，因此OGM文件的格式和OGG文件是相同的。 
OGM作为一个全新的多媒体容器，在视频上可以使用DivX/XviD的编码画面，音频上可以使用ogg vorbis/AC3/(CBR/ABR/VBR)MP3等，文本上可以使用srt字幕，支持Chapetr。 
尤为重要的一点是OGM可以方便的嵌入多个音轨和字幕，然后只要安装了相应的解码器，就可以使用wmp6.4无困难的播放，OGM在索引上要远快于AVI，拖动进度条再也不用像AVI情况下等上好一阵子，同时Chapter又可以把DVD中的章节信息完美载入。而且在声画同步上OGM做得更好，不用出现某些AVI情况下画面要快进才能赶上声音的场面，同时在制作上还能进一步节省为同步而占用的空间。 
OGM目前已经有一整套完整的工具支持 ；
Ogg Vorbis Direct Show Filters——wmp6.4 需要用来回放OGM的插件 ；
Ogg subtitle filter——wmp6.4 用来回放OGM内置字幕的插件 ；
HeadAC3he or BeSweet and OggMachine——用来将AC3转成ogg vorbis的工具 ；
Ogg Cutter——用于切割OGM的工具 ；
OggMux——用于制作OGM的工具 。
同时线性编辑之王VirtualDub的一个特殊版本VirutalDubMOD也全面支持OGM格式。尽管OGM不会完全取代AVI，但是有理由相信古老的AVI格式被替代是不可避免的。
OGM文件的格式
逻辑流以页（page）为单位组织链接成物理流。每个页之间相互独立，都包含了各自应有的信息，页的大小是可变的，通常为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个字节。标识当前页具体类型。其设置分三种情况： 
*  bit 0x01  若已设置，页包含的媒体编码数据于前一页同属于一个逻辑流的同一packet。若未设置，本页是一个新的packet。
*  bit 0x02   设置，表示逻辑流的第一个页bos。未设，不是第一个页。
*  bit 0x04   设置，表示逻辑流的最后一页eos。未设，不是最后一页。 
⑷ granule_position:8个字节（字节6－字节13），包含了媒体编码相关参数信息。对于音频流，包含了到本页为止逻辑流在PCM中采样编码的总次数。对于视频流，包含了逻辑流到本页为止视频帧编码的总次数。其值若为－1，则说明到此页为止，逻辑流的packet还未结束。
⑸ bitstream_serial_number:流序列号，4字节，表示本页所属逻辑流与其他逻辑流相区别的序号。 
⑹ page_sequence_number: 表明了本页在逻辑流中的序列号，Ogg解码器能据此识别有无页丢失。
⑺ CRC_checksum: 循环冗余校验码校验和，4字节域，包含页的32bit CRC校验和（包括页头部零CRC校验和页数据校验），它的产生多项式为：0x04c11db7。
⑻ number_page_segments:1字节，给定了在本页的segment_tabale域中所出现的segement个数，其最大值为255segments(每片255个字节)，即页头部第26个字节的取值范围为:0x00-0xff (0-255)。页最大物理尺寸为65307bytes,小于64KB。
⑼ segment_table:逻辑流中的每个packet每个segment长度的取值（lacing values，除了每个packet的最后一个segment小于255外，其它segment都为255），这些值以segment出现的先后顺序依次排列。此域的字节数为number_page_segments域所表示的数字（即在0－255之间）。页头部长度的字节数header_size = 27 + number_page_segments [Byte]  
即页头部长度为上述9个域名所表述占据的字节数之和。页的总长度page_size = header_size + sum(lacing_values: 1...number_page_segments)   [Byte]
即页的总长度为页头部长度加上紧随其后的若干segments长度之和。
OGM 文件的封装过程
(1)音视频编码在提供给Ogg封装之前是以具有包边界的“Packets”形式呈现的，包边界依赖于具体的编码格式。
(2)将逻辑流的各个包进行分片segmentation，每片大小固定为255Byte,但包的最后一个segment通常小于255字节。因为packet的大小可以是任意长度，由具体的媒体编码器来决定。
(3)进行页封装，每页都被加上页头，每页的长度可不等，由具体情况而确定。页头部segment_table域告知了 “lacing_value”值的大小，即页中最后一个segment的长度（可以为0，或小于255）。一次处理一个packet，此packet被封装成一个或多个page页（page的长度设定了上限，一般为4kB）；下一个packet必须用新的page开始封装，由首部字段域header_type_flag的设置规定来表示。
(4)多个已被页格式封装好的逻辑流（如语音、文本、图片、音频、视频等）按应用要求的时序关系合成物理流。
OGM的处理
处理音频采用Vorbis编码的OGM影片的三种方法
经常接触计算机视频的朋友相信对DivX并不陌生，它是目前很流行的一种视频编码格式，而Vorbis则是一种音频编码格式，由于其完全免费且开放源码，正受到越来越多的关注。以下文中所讲的OGM影片，也就是视频采用DivX或XviD编码，音频采用Ogg编码的影片。
要想观看OGM影片并不困难，只要你安装了相应的解码器就可以了。不过，如果你想要用视频编辑软件对OGM影片进行处理，就不是很容易了，因为多数视频编辑软件并不支持处理这种格式的影片。这里介绍三种处理OGM格式影片的方法，供读者参考。转换并制作成VCD如果要将OGM影片转换成VCD，就比较简单了。运行TMPGEnc Plus，在程序操作主界面中点击“视频源”右侧的“浏览”按钮，打开要转换的影片，然后点击界面右下方的“设定”按钮，对有关参数进行设置。例如要剪接影片，可以打开“详细视频设定”选项卡，双击“源文件范围”选项，然后在弹出的对话框中进行设置。设置完成后，回到程序主界面，单击上方的“开始压缩”按钮就可以开始转换了。转换成其它视频格式使用TMPGEnc Plus可以将OGM影片转制成VCD，但如果要转换成其它的视频格式，例如AVI、WMV，怎么办？我们可以试试Zealot All Video Joiner这款工具。
运行该软件，打开程序主界面。首先添加需要转换的影片文件，单击“Add”按钮，打开需要转换的影片文件。回到程序主界面后，可以在列表框中看到添加的文件，单击选中后，按下右侧的“Preview”按钮，查看影片播放是否正常。
在“Output File Format”选项组中指定相应的选项，可以将OGM影片转换成MPEG、AVI或者是WMV格式。例如要将影片转换成AVI格式，可以点选AVI一项，如果勾选了右侧的“Use Video Compressor（使用视频压缩）”和“Use Audio Compressor（使用音频压缩）”，下方的视频编码和音频编码下拉列表框就会激活，我们可以根据需要选择合适的编码器。这里还需要注意对画面尺寸及拉伸模式进行设置。确认无误后，单击界面右上方的“Join”按钮执行转换，等到软件处理完毕，就可以在原文件夹中找到转换后的视频文件。分割与合并如果要对OGM影片进行分割，我们可以试试另一款工具All Video Splitter，它也能够对这类影片进行处理。此外，要想分割、合并这种格式的影片，还有一种简单的方法，那就是利用文件分割器。这里以WinSplit为例，介绍一下具体的操作方法：
运行WinSplit程序（如图2），首先在左侧窗格中选择需要分割的影片文件，这时工作窗口左上方就会显示出文件名和文件的字节大小。然后单击右侧区域“Parts”下拉列表框，按照需要剪裁的部分选择分片数。同时，确认下方的“Batch File”复选框已经勾选，这样程序在分割时会自动生成一个批处理文件。最后选择存放文件块的目标文件夹。确认上述设置无误后，单击工具栏中的“Split”按钮，即可对影片文件进行分割。分割完成后，可以在指定的文件夹中找到分割的文件块以及一个合并用的批处理文件。
接下来，我们需要对合并批处理文件重新编辑。例如要删除影片的第二部分，用记事本打开与影片同名的批处理文件，找到合并文件这行命令：
Copy /b "filename.001" + "filename.002" + "filename.003" + "filename.004" "filename.avi"
将其改为：
Copy /b "filename.001" + "filename.003" + "filename.004" "filename.avi"
最后双击执行该批处理文件，将分割文件块合并即可。这里需要注意的是，不能将文件头部分剪掉，否则就无法正常播放。