A video codec is an electronic circuit or software that compresses or decompresses digital video. It converts uncompressed video to a compressed format or vice versa. In the context of video compression, "codec" is a concatenation of "encoder" and "decoder"—a device that only compresses is typically called an encoder, and one that only decompresses is a decoder.
The compressed data format usually conforms to a standard video compression specification. The compression is typically lossy, meaning that the compressed video lacks some information present in the original video. A consequence of this is that decompressed video has lower quality than the original, uncompressed video because there is insufficient information to accurately reconstruct the original video.
There are complex relationships between the video quality, the amount of data used to represent the video (determined by the bit rate), the complexity of the encoding and decoding algorithms, sensitivity to data losses and errors, ease of editing, random access, and end-to-end delay (latency).
Historically, video was stored as an analog signal on magnetic tape. Around the time when the compact disc entered the market as a digital-format replacement for analog audio, it became feasible to also store and convey video in digital form. Because of the large amount of storage and bandwidth needed to record and convey raw video, a method was needed to reduce the amount of data used to represent the raw video. Since then, engineers and mathematicians have developed a number of solutions for achieving this goal that involve compressing the digital video data.
Video codecs are used in DVD and video CD players and recorders, video broadcast systems, personal computers, and a variety of other applications. In particular, they are widely used in applications that record or transmit video, which may not be feasible with the high data volumes and bandwidths of uncompressed video. For example, they are used in operating theaters to record surgical operations, in IP-based security systems, and in remotely operated vehicles such as ROVs and UAVs.
Video codec design
Video codecs seek to represent a fundamentally analog data set in a digital format. Because of the design of analog video signals, which represent luminance ("luma") and color information (chrominance, "chroma") separately, a common first step in image compression in codec design is to represent and store the image in a YCbCr color space. The conversion to YCbCr provides two benefits: first, it improves compressibility by providing decorrelation of the color signals; and second, it separates the luma signal, which is perceptually much more important, from the chroma signal, which is less perceptually important and which can be represented at lower resolution to achieve more efficient data compression. It is common to represent the ratios of information stored in these different channels in the following way Y:Cb:Cr. Refer to the following article for more information: Chroma subsampling.
Different codecs use different chroma subsampling ratios as appropriate to their compression needs. Video compression schemes for Web and DVD make use of a 4:2:1 color sampling pattern, and the DV standard uses 4:1:1 sampling ratios. Professional video codecs designed to function at much higher bitrates and to record a greater amount of color information for post-production manipulation sample in 3:1:1 (uncommon), 4:2:2 and 4:4:4 ratios. Examples of these codecs include Panasonic's DVCPRO50 and DVCPROHD codecs (4:2:2), and then Sony's HDCAM-SR (4:4:4) or Panasonic's HDD5 (4:2:2). Apple's Prores HQ 422 codec also samples in 4:2:2 color space. More codecs that sample in 4:4:4 patterns exist as well, but are less common, and tend to be used internally in post-production houses. It is also worth noting that video codecs can operate in RGB space as well. These codecs tend not to sample the red, green, and blue channels in different ratios, since there is less perceptual motivation for doing so—just the blue channel could be undersampled.
Some amount of spatial and temporal downsampling may also be used to reduce the raw data rate before the basic encoding process. The most popular such transform is the 8x8 discrete cosine transform (DCT). Codecs which make use of a wavelet transform are also entering the market, especially in camera workflows which involve dealing with RAW image formatting in motion sequences. The output of the transform is first quantized, then entropy encoding is applied to the quantized values. When a DCT has been used, the coefficients are typically scanned using a zig-zag scan order, and the entropy coding typically combines a number of consecutive zero-valued quantized coefficients with the value of the next non-zero quantized coefficient into a single symbol, and also has special ways of indicating when all of the remaining quantized coefficient values are equal to zero. The entropy coding method typically uses variable-length coding tables. Some encoders can compress the video in a multiple step process called n-pass encoding (e.g. 2-pass), which performs a slower but potentially better quality compression.
The decoding process consists of performing, to the extent possible, an inversion of each stage of the encoding process. The one stage that cannot be exactly inverted is the quantization stage. There, a best-effort approximation of inversion is performed. This part of the process is often called "inverse quantization" or "dequantization", although quantization is an inherently non-invertible process.
Video codec designs are usually standardized or eventually become standardized—i.e., specified precisely in a published document. However, only the decoding process need be standardized to enable interoperability. The encoding process is typically not specified at all in a standard, and implementers are free to design their encoder however they want, as long as the video can be decoded in the specified manner. For this reason, the quality of the video produced by decoding the results of different encoders that use the same video codec standard can vary dramatically from one encoder implementation to another.
Commonly used video codecs
A variety of video compression formats can be implemented on PCs and in consumer electronics equipment. It is therefore possible for multiple codecs to be available in the same product, avoiding the need to choose a single dominant video compression format for compatibility reasons.
Video in most of the publicly documented or standardized video compression formats can be created with multiple encoders made by different people. Many video codecs use common, standard video compression formats, which makes them compatible. For example, video created with a standard MPEG-4 Part 2 codec such as Xvid can be decoded (played back) using any other standard MPEG-4 Part 2 codec such as FFmpeg MPEG-4 or DivX Pro Codec, because they all use the same video format.
Some widely used software codecs are listed below, grouped by which video compression format they implement.
H.265/MPEG-H HEVC codecs
- x265: A GPL-licensed implementation of the H.265 video standard. x265 is only an encoder.
H.264/MPEG-4 AVC codecs
- x264: A GPL-licensed implementation of the H.264 video standard. x264 is only an encoder.
- Nero Digital: Commercial MPEG-4 ASP and AVC codecs developed by Nero AG.
- QuickTime H.264: H.264 implementation released by Apple.
- DivX Pro Codec: An H.264 decoder and encoder was added in version 7.
H.263/MPEG-4 Part 2 codecs
- DivX Pro Codec: A proprietary MPEG-4 ASP codec made by DivX, Inc.
- Xvid: Free/open-source implementation of MPEG-4 ASP, originally based on the OpenDivX project.
- FFmpeg MPEG-4: Included in the open-source libavcodec codec library, which is used by default for decoding or encoding in many open-source video players, frameworks, editors and encoding tools such as MPlayer, VLC, ffdshow or GStreamer. Compatible with other standard MPEG-4 codecs like Xvid or DivX Pro Codec.
- 3ivx: A commercial MPEG-4 codec created by 3ivx Technologies.
- x262: A GPL-licensed implementation of the H.262 video standard. x262 is only an encoder.
- WMV (Windows Media Video): Microsoft's family of proprietary video codec designs including WMV 7, WMV 8, and WMV 9. The latest generation of WMV is standardized by SMPTE as the VC-1 standard.
- MS MPEG-4v3: A proprietary and not MPEG-4 compliant video codec created by Microsoft. Released as a part of Windows Media Tools 4. A hacked version of Microsoft's MPEG-4v3 codec became known as DivX ;-)
Google (On2) codecs
- VP6, VP6-E, VP6-S, VP7, VP8, VP9: Proprietary high definition video compression formats and codecs developed by On2 Technologies used in platforms such as Adobe Flash Player 8 and above, Adobe Flash Lite, Java FX and other mobile and desktop video platforms. Supports resolution up to 720p and 1080p. VP9 supports resolutions up to 2160p. VP8 and VP9 have been available under the New BSD License by Google with source code available as the libvpx VP8/VP9 codec SDK.
- libtheora: A reference implementation of the Theora video compression format developed by the Xiph.org Foundation, based upon On2 Technologies' VP3 codec, and christened by On2 as the successor in VP3's lineage. Theora is targeted at competing with MPEG-4 video and similar lower-bitrate video compression schemes.
- Apple ProRes: Is a lossy video compression format developed by Apple Inc.
- Schrödinger and dirac-research: implementations of the Dirac compression format developed by BBC Research at the BBC. Dirac provides video compression from web video up to ultra HD and beyond.
- DNxHD codec: a lossy high-definition video production codec developed by Avid Technology. It is an implementation of VC-3.
- Sorenson 3: A video compression format and codec that is popularly used by Apple's QuickTime, sharing many features with H.264. Many movie trailers found on the web use this compression format.
- Sorenson Spark: A codec and compression format that was licensed to Macromedia for use in its Flash Video starting with Flash Player 6. It is considered as an incomplete implementation of the H.263 standard.
- RealVideo: Developed by RealNetworks. A popular compression format and codec technology a few years ago, now fading in importance for a variety of reasons.
- Cinepak: A very early codec used by Apple's QuickTime.
- Indeo, an older video compression format and codec initially developed by Intel.
All of the codecs above have their qualities and drawbacks. Comparisons are frequently published. The trade-off between compression power, speed, and fidelity (including artifacts) is usually considered the most important figure of technical merit.
Online video material is encoded by a variety of codecs, and this has led to the availability of codec packs — a pre-assembled set of commonly used codecs combined with an installer available as a software package for PCs, such as K-Lite Codec Pack.
- Wyner-Ziv Coding of Video describes another algorithm for video compression that performs close to the Slepian–Wolf bound (with links to source code).
- Video codecs standards PDF files with some codec standards description
- History of main codecs Evolution of digital video compression
- AMD Media Codecs—optional download (formerly called ATI Avivo)