VGM: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
m (EXtended-play Video Disc moved to VGM: proper name)
(Add actual container information.)
Line 1: Line 1:
* Company: XVD Corporation (DigitalStream-USA)
* Company: XVD Corporation (DigitalStream-USA)
* Website: http://www.xvdcorp.com/
* Website: http://www.xvdcorp.com/
* Extension: vg2
* Extension: vgm, vg2
* Samples: http://xvd.bha.co.jp/download/sample.html
* Samples: http://xvd.bha.co.jp/download/sample.html


VGM (aka XVD (eXtended-play Video Disc)) is format includes [[VGM Audio]] codec and [[VGM Video]] codec.
VGM (presumably from VideoGraM since originally this format was used for sending short video messages from one user to another) aka XVD (eXtended-play Video Disc) is a format that includes [[VGM Audio]] codec and [[VGM Video]] codec.


There are some historical variants:
There are some historical variants:
Line 23: Line 23:
* http://smw.internet.com/video/docs/vidgram/
* http://smw.internet.com/video/docs/vidgram/


== VGM1 Format ==
This format uses big-endian data in its structure and intended to be used with Muzip 1-4, TELP, VT and Domen codecs.
Container format:
  4 bytes - file size (may be zero)
  4 bytes - duration in milliseconds
  4 bytes - "head" marker
  4 bytes - header size
  1 byte  - number of streams
  (header_size - 1) bytes - stream headers
  4 bytes - "data" marker
  data packets
Stream header format:
  1 byte  - codec name length
  N bytes - codec name
  1 byte  - stream ID
  4 bytes - codec ID
  4 bytes - codec priority
  4 bytes - codec extradata
Packet header:
  1 byte  - stream ID
  4 bytes - timestamp in milliseconds
  4 bytes - data size
== VGM2 Format ==
This format uses little-endian integers
  4 bytes - "VGM2"
  4 bytes - file size (may be zero)
  4 bytes - duration in milliseconds
  1 byte  - number of streams
  1 byte  - file comment length
  N bytes - file comment (usually "Created by BHA dumper")
  1 bytes - string terminator?
  stream headers
  data packets
Stream header:
  1 byte  - stream type
  4 bytes - codec ID
  4 bytes - stream header extradata size
  extradata
Stream types:
  1    - audio stream
  2    - video stream
  5    - stream with end-of-stream marker (single packet almost at the end of file), maybe other system messages
  6    - stream with seek table (?), also single packet at the end of file
  >128 - just some padding that occurs time from time
Packet header:
  1 byte - stream number (in the order they appear in the header)
  1 byte - flags
  2/4 bytes - timestamp in milliseconds (4 bytes if bit 2 in flags is set, 2 bytes otherwise)
  2/4 bytes - packet size including the header (4 bytes if bit 1 in flags is set, 2 bytes otherwise)
  2/4 bytes - some size for video streams only, maybe second field or for P+B frame combination (4 bytes if bit 1 in flags is set, 2 bytes otherwise). Usually it is zero.
== Known codec IDs and their headers ==
* 3 - Muzip first version
* 4 - TELP
* 5..9 - Muzip
* <code>0xAC3</code> - AC-3
* <code>0x010001</code> - VT
* <code>0x010002</code> - Domen
* <code>0x010006</code> - V2K
* <code>0x010007</code> - V2K-II
* <code>0x010027</code> - probably XVD 1.x
* <code>0x110027</code> - XVD 2.4
* <code>0x210027</code> - XVD 2.5
Audio and video header have the same format in VGM 1 and 2 except that in version 2 there are two additional 4-byte fields in the beginning that can be ignored. All data is in little-endian format.
Audio header:
  2 bytes - should be 0x300
  2 bytes - number of channels
  4 bytes - sampling rate
For Muzip starting at byte 18 there is also codec sub-flavour, known flavours are <code>CTP03</code>-<code>CTP07</code> and <code>MZIP13R</code> (for the latest known version).
Video header:
  2 bytes - width
  2 bytes - height
  4 bytes - unknown
  (the rest is for newer versions only)
  4 bytes - width
  4 bytes - height
  4 bytes - bitrate
  4 bytes - frames per second


[[Category:Container Formats]]
[[Category:Container Formats]]
[[Category:Formats missing in FFmpeg]]
[[Category:Formats missing in FFmpeg]]

Revision as of 10:24, 10 February 2021

VGM (presumably from VideoGraM since originally this format was used for sending short video messages from one user to another) aka XVD (eXtended-play Video Disc) is a format that includes VGM Audio codec and VGM Video codec.

There are some historical variants:

Timeline:

VGM1 Format

This format uses big-endian data in its structure and intended to be used with Muzip 1-4, TELP, VT and Domen codecs.

Container format:

 4 bytes - file size (may be zero)
 4 bytes - duration in milliseconds
 4 bytes - "head" marker
 4 bytes - header size
 1 byte  - number of streams
 (header_size - 1) bytes - stream headers
 4 bytes - "data" marker
 data packets

Stream header format:

 1 byte  - codec name length
 N bytes - codec name
 1 byte  - stream ID
 4 bytes - codec ID
 4 bytes - codec priority
 4 bytes - codec extradata

Packet header:

 1 byte  - stream ID
 4 bytes - timestamp in milliseconds
 4 bytes - data size

VGM2 Format

This format uses little-endian integers

 4 bytes - "VGM2"
 4 bytes - file size (may be zero)
 4 bytes - duration in milliseconds
 1 byte  - number of streams
 1 byte  - file comment length
 N bytes - file comment (usually "Created by BHA dumper")
 1 bytes - string terminator?
 stream headers
 data packets

Stream header:

 1 byte  - stream type
 4 bytes - codec ID
 4 bytes - stream header extradata size
 extradata

Stream types:

 1    - audio stream
 2    - video stream
 5    - stream with end-of-stream marker (single packet almost at the end of file), maybe other system messages
 6    - stream with seek table (?), also single packet at the end of file
 >128 - just some padding that occurs time from time

Packet header:

 1 byte - stream number (in the order they appear in the header)
 1 byte - flags
 2/4 bytes - timestamp in milliseconds (4 bytes if bit 2 in flags is set, 2 bytes otherwise)
 2/4 bytes - packet size including the header (4 bytes if bit 1 in flags is set, 2 bytes otherwise)
 2/4 bytes - some size for video streams only, maybe second field or for P+B frame combination (4 bytes if bit 1 in flags is set, 2 bytes otherwise). Usually it is zero.

Known codec IDs and their headers

  • 3 - Muzip first version
  • 4 - TELP
  • 5..9 - Muzip
  • 0xAC3 - AC-3
  • 0x010001 - VT
  • 0x010002 - Domen
  • 0x010006 - V2K
  • 0x010007 - V2K-II
  • 0x010027 - probably XVD 1.x
  • 0x110027 - XVD 2.4
  • 0x210027 - XVD 2.5

Audio and video header have the same format in VGM 1 and 2 except that in version 2 there are two additional 4-byte fields in the beginning that can be ignored. All data is in little-endian format.

Audio header:

 2 bytes - should be 0x300
 2 bytes - number of channels
 4 bytes - sampling rate

For Muzip starting at byte 18 there is also codec sub-flavour, known flavours are CTP03-CTP07 and MZIP13R (for the latest known version).

Video header:

 2 bytes - width
 2 bytes - height
 4 bytes - unknown
 (the rest is for newer versions only)
 4 bytes - width
 4 bytes - height
 4 bytes - bitrate
 4 bytes - frames per second