Microsoft Video 1 or MS-CRAM[1] is an early lossy video compression and decompression algorithm (codec) that was released with version 1.0 of Microsoft'sVideo for Windows in November 1992. It is based on MotiVE, a vector quantization codec which Microsoft licensed from Media Vision. In 1993, Media Vision marketed the Pro Movie Spectrum, an ISA board that captured video in both raw and MSV1 formats (the MSV1 processing was done in hardware on the board).
Compression algorithm[edit]
Microsoft Video 1 operates either in an 8-bitpalettized color space or in a 15-bit RGB color space.[2] Each frame is split into 4×4 pixel blocks.[2] Each 4×4 pixel block can be coded in one of three modes: skip, 2-color or 8-color.[2] In skip mode, the content from the previous frame is copied to the current frame in a conditional replenishment fashion.[2] In 2-color mode, two colors per 4×4 block are transmitted, and 1 bit per pixel is used to select between the two colors.[2] In 8-color mode, the same scheme applies with 2 colors per 2×2 block.[2] This can be interpreted as a 2-color palette which is locally adapted on either a 4×4 block basis or a 2×2 block basis. Interpreted as vector quantization, vectors with components red, green, and blue are quantized using a forward adaptive codebook with two entries.
Download Video compressor & Trimmer for Windows 10 for Windows to video compressor & Trimmer is a powerful but totally free video converter, compressor and trimmer. Compressing video streams in order to achieve the best quality also requires some specialized components, just like Microsoft Windows Media Video 9 VCM. This compressor makes it possible for. Best 14 Video Compressor software, free download There are countless video compressor software available, but selecting one that best suits your requirement can be a task. Not only do you need a compressor that does the job but it also should be able to retain maximum quality of the original video.
Use in NetShow Encoder[edit]
- Download this app from Microsoft Store for Windows 10, Windows 10 Mobile, Windows 10 Team (Surface Hub), HoloLens. See screenshots, read the latest customer reviews, and compare ratings for File Compression.
- Download Video compressor & Trimmer for Windows 10 for Windows to video compressor & Trimmer is a powerful but totally free video converter, compressor and trimmer.
The codec was available in Microsoft NetShow Encoder,[3] which was later renamed Windows Media Encoder, and made available via the SDK. The NetShow encoder allowed the user to select a 2 pass option, where in the first pass the video was analyzed to create a color palette, and in the second pass converted to the palettized color space and encoded. Before encoding, the video could be scaled. Later versions of Windows Media Encoder dropped support for Microsoft Video 1 and only supported Windows Media Video.
See also[edit]
- Block truncation coding, a similar coding technique for grayscale content
- Color Cell Compression, a similar coding technique for color content, based on block truncation coding
- Apple Video, a codec based on a similar design
- QuickTime Graphics, a codec based on a similar design
- Smacker video, a codec based on a similar design
- S3 Texture Compression, a texture compression format based on a similar design
References[edit]
- ^'Troubleshooting Video Codecs in Windows 95'. Support.microsoft.com. 2006-11-15. Retrieved 2009-10-25.
- ^ abcdefMike Melanson (13 March 2003). 'Description of the Microsoft Video-1 Decoding Algorithm'. Retrieved 5 April 2013.
- ^'Creating NetShow™ Video'. Microsoft. Archived from the original on 2014-01-12.
External links[edit]
This page is based on the document 'Description of the Microsoft Video-1 Decoding Algorithm' by Mike Melanson found at http://multimedia.cx/video1.txt.'
Video Compressor Download
- FOURCCs: CRAM, MSVC, WHAM
- Company: Microsoft, Media Vision
- Samples: http://samples.mplayerhq.hu/V-codecs/CRAM/
Microsoft Video 1 is a vector quantizer video codec with frame differencing that operates in either a palettized 8-bit color space or a 16-bit RGB color space. Video 1 was originall developed by Media Vision and was processed in hardware by a PC expansion card.
Video 1 is a rather simple algorithm. The algorithm operates on 4x4 blocks of pixels, which implies that the source data to be compressed must be divisible by 4 in both its width and height. Just like decoding a Microsoft BMP image, decoding a frame of Video 1 data is a bottom-to-top operation.
The Video 1 codec has two variants: One variant encodes 8-bit palettized data, where the palette is stored in the AVI file header. The second variant encodes 16-bit colors. Actually, the colors are BGR555 data, and the top bit is sometimes used for extra encoding information. To determine which variant a particular AVI file uses, examine the AVI file header, specifically the biBitCount field of the bitmap header within the AVI fileheader.
8-bit Video-1 Data
In the 8-bit variant of Video 1, the decoded 8-bit pixel values are indices into the palette table stored in the AVI file that transported the Video 1 data.
In order to decode the Video 1 data, traverse through the encoded byte stream, reading the first two bytes into byte_a and byte_b, respectively. The value of byte_b will usually indicate what to do next.
- byte_a 0 && byte_b 0 && all of the 4x4 image blocks have been traversed, then decode is finished
- 0x84 <= byte_b < 0x88:
This code specifies that a certain number of blocks should be skipped in the output stream. This is useful for frame differencing (encoding changes from frame to frame) and thus achieving greater compression. The formula for skipping is:
- byte_b < 0x80, 2-color encoding:
In this encoding, the next 2 bytes in the encoded byte stream are color_a and color_b, respectively. Byte_a and byte_b turn into sets of flags that represent which color, a or b, to place into a particular pixel in the decoded block. The flags are laid out as follows:
For example, if bit 0 of byte_a is 1, the lower left pixel of the block is color_a. Otherwise, it's color_b. In all, a 2-color block is encoded as 4 bytes:
- 0x90 <= byte_b, 8-color encoding:
In this encoding, a single 4x4 block can have as many as 8 colors. More accurately, the 4x4 block is subdivided into 4 2x2 quads, each of which can have 2 colors. The quads are laid out as follows:
Microsoft Video 1 Codec Download
As in 2 color encoding, byte_a and byte_b become sets of flags indicating which color pixel to place in the decoded block. The flag matrix is laid out the same as in the 2 color encoding:
The 2 possible colors for each of the four quads directly follow the two block bytes. In all, an 8-color block is encoded as 10 bytes:
For example, if bit 7 of byte_b is 1 then the color represented by quad4_a is placed in the top right corner of the 4x4 block. Otherwise, it's quad4_b.
- (0x80 <= byte_b < 0x84) or (0x88 <= byte_b < 0x90) or 'byte_b didn't qualify this block for any other encoding scheme', 1-color encoding:
In this encoding, byte_a represents the color for the entire 4x4 block.
16-bit Video-1 Data
Colors are stored in BGR555 format. In the data stream, the colors are encoded in little endian format:
When the color is properly decoded, the color components are represented by the following bits:
- B: 14-10
- G: 9-5
- R: 4-0
In order to decode the Video 1 data, traverse through the encoded byte stream, reading the first two bytes into byte_a and byte_b, respectively. The value of byte_b will usually indicate what to do next.
- byte_a 0 && byte_b 0 && all of the 4x4 image blocks have been traversed, then decode is finished
- 0x84 <= byte_b < 0x88:
This code specifies that a certain number of blocks should be skipped in the output stream. This is useful for frame differencing (encoding changes from frame to frame) and thus achieving greater compression. The formula for skipping is:
- 0 <= byte_b < 0x80, 2- or 8-color encoding:
The 2- and 8-color encoding schemes are quite similar. To determine which of the two schemes a block is using, it's necessary to read the next two little endian 16-bit numbers in the stream. If the highest bit of the first number is 1, then the block is encoded with the 8-color scheme. Otherwise, it uses the 2-color scheme.
In the 2-color encoding, the two LE16 numbers are labeled color_a and color_b, respectively. Byte_a and byte_b turn into sets of flags that represent which color, a or b, to place into a particular pixel in the decoded block. The flags are laid out as follows:
For example, if bit 0 of byte_a is 1, the lower left pixel of the block is color_a. Otherwise, it's color_b. In all, a 2-color block is encoded as 6 bytes:
In the 8-color encoding, a single 4x4 block can have as many as 8 colors. More accurately, the 4x4 block is subdivided into 4 2x2 quads, each of which can have 2 colors. The quads are laid out as follows:
As in 2 color encoding, byte_a and byte_b become sets of flags indicating which color pixel to place in the decoded block. The flag matrix is laid out the same as in the 2 color encoding:
The 2 possible colors for each of the four quads directly follow the two block bytes. The colors for the first quad were likely read from the data stream in order to determine if the block is 2- or 8- color encoded. The 2 colors for each of the other 3 quads will follow the first. In all, a full 8 color block is encoded as 18 bytes:
Microsoft Video Compressor Windows 10
For example, if bit 7 of byte_b is 1 then the color represented by quad4_a is placed in the top right corner of the 4x4 block. Otherwise, it's quad4_b.
- (0x80 <= byte_b < 0x84) or (0x88 <= byte_b), 1-color encoding:
In this encoding, byte_a and byte_b represent a little endian 16-bit number which is the color for the entire 4x4 block.