Compression Software for Mobile Video

Compressed videos are produced by codecs, which is a word that combines the two roles they perform: compressing and decompressing video or audio. The process of compressing video is often called "encoding," and the process of decompressing video "decoding." 

Compression standards like MPEG do not actually specify how a video should be encoded. That is left up to the codec. Creators of encoding software are free to implement the encoding algorithm whatever way they like. As long as the compressed video or audio complies with the standard, software developers can implement the actual codec with whatever features and user interface they want.

There are different proprietary encoding standards, such as Windows Media Video, RealVideo, 3ivx and DivX. The international standard is MPEG.

The goal of a codec is to decrease the video's file size and bit rate. Bit rate is the amount of bits that are processed by a device and its software over a given unit of time. Our article on video compression discusses bit rate and the different types of compression that a modern encoder performs, including temporal, color and spatial compression.

Modern codecs allow you to specify a number of parameters to match the video's screen resolution, bit rate, file size and other attributes to the playback device. The number of video display choices continues to expand (from cell phones to High Def). Where the video is going to play determines the profile used when encoding the video. In MPEG encoding, a profile defines what your codec can or cannot do. MPEG also defines levels. Levels describe how much your codec can do, such as the maximum screen resolution and bit rate (data rate). Our MPEG-4 overview article defines the different profiles for MPEG. For other codecs, use the link at the bottom of this article to go to a list of codecs, and then to the specific codec's URL.

VBR and CBR

Video and audio programs vary widely in their complexity over time. In the case of video, a scene with lots of motion and detail will require more compression than a scene that is not moving or does not have a lot of detail. Codecs offer two basic choices for encoding such scenes: CBR and VBR.

CBR stands for "Constant Bit Rate" encoding. It is the best (read safest) choice for streaming video at any bandwidth, but especially over limited rate channels. It allows the video stream to take advantage of all the capacity available. However fast or detailed scenes will have to be more heavily compressed than talking head or dark, still scenes. This results in an inconsistent level of quality throughout the video, with action scenes showing obvious compression artifacts like blocky edges.

VBR stands for "Variable Bit Rate" encoding. As the name implies, the encoder varies the amount of data output per unit of time. This allows the encoder to assign a higher bit rate to complex scenes (or sections of audio files), and a lower bit rate to simple scenes or sections. A larger file size is produced, about 5% for audio files. But the overall quality of the encoded file, or its average bit rate, is higher.

CBR is largely used for low capacity streaming applications, whereas VBR is used for high capacity (fast DSL) applications or where the video is downloaded and then played.

One-Pass and Two-Pass Encoding (Multipass)

In one-pass encoding, the encoder examines sections of video and performs the necessary compression to reach the targeted bit rate. In two-pass encoding, the encoder runs through the entire video gathering information about it, before encoding it during a second pass. This produces a video or audio file with a better average bit rate, and therefore superior quality, although VBR encoded files benefit more from two-pass encoding than CBR. CBR encoding not have any flexibility in the bit rate for each frame, whereas VBR does. The drawback is that VBR can take up to twice as long to encode a video or audio stream.

A complete list of video and audio codecs can be found at the Wikipedia: http://en.wikipedia.org/wiki/List_of_codecs