# Códec

Un códec es un programa o dispositivo hardware capaz de codificar o decodificar una señal o flujo de datos digitales. Códec es un acrónimo de codificador-decodificador o, menos comúnmente, compresor-descompresor. Su uso está muy extendido para la codificación de señales de audio y video dentro de un formato contenedor.
Describe una especificación desarrollada en software, hardware o una combinación de ambos, capaz de transformar un archivo con un flujo de datos (stream) o una señal. Los códecs pueden codificar el flujo o la señal (a menudo para la transmisión, el almacenaje o el cifrado) y recuperarlo o descifrarlo del mismo modo para la reproducción o la manipulación en un formato más apropiado para estas operaciones. Los códecs son usados a menudo en videoconferencias y emisiones de medios de comunicación.
La mayor parte de códecs provoca pérdidas de información para conseguir un tamaño lo más pequeño posible del archivo destino. Hay también códecs sin pérdidas (lossless), pero en la mayor parte de aplicaciones prácticas, para un aumento casi imperceptible de la calidad no merece la pena un aumento considerable del tamaño de los datos. La excepción es si los datos sufrirán otros tratamientos en el futuro. En este caso, una codificación repetida con pérdidas a la larga dañaría demasiado la calidad.
Muchos archivos multimedia contienen tanto datos de audio como de vídeo, y a menudo alguna referencia que permite la sincronización del audio y el vídeo. Cada uno de estos tres flujos de datos puede ser manejado con programas, procesos, o hardware diferentes; pero para que estos streams sean útiles para almacenarlos o transmitirlos, deben ser encapsulados juntos. Esta función es realizada por un formato de archivo de vídeo (contenedor), como .mpg, .avi, .mov, .mp4, .rm, .ogg, .mkv o .tta. Algunos de estos formatos están limitados a contener streams que se reducen a un pequeño juego de códecs, mientras que otros son usados para objetivos más generales.
Un endec es un concepto similar (pero no idéntico) para el hardware.

## Ciclo de desarrollo de los códecs

En ingeniería, un ciclo de desarrollo es el período que transcurre desde la implementación de un estándar tecnológico hasta el desarrollo de nuevas herramientas de mayor complejidad y eficiencia.
En el mundo de la compresión digital, un ciclo de desarrollo se corresponde con el tiempo de vida de las mejoras de un sistema; por ejemplo, un sistema de compresión va sufriendo modificaciones para la mejora de su eficiencia desde el momento en que se estandariza. Esto se producirá hasta el desarrollo de nuevas herramientas que conlleven una ganancia en la eficiencia de la calidad. Entonces se cerrará un ciclo de desarrollo para el sistema de compresión en cuestión.
Para los nuevos códecs se busca que estos tengan un sistema de compresión cada vez más inteligente, es decir que sean capaces de adaptarse al tipo de contenido de las imágenes y además generen una tasa de bits cada vez menor para ofrecer un mismo nivel de calidad.
Aproximadamente el ciclo de desarrollo de un sistema es de 5 a 8 años. Siempre teniendo en cuenta que esta cifra varía para cada sistema en concreto. Si hablamos en términos de eficiencia, podemos citar el ejemplo de la SDTV (Standard Definition TV), donde la ganancia se establece aproximadamente entre un 5 y 10% por año transcurrido.

## Mejoras en el funcionamiento de los códecs

Los sistemas de compresión de vídeo digital se basan todos en una estructura común. En primer lugar, extraen la información redundante de las imágenes, de modo que mediante el envío de esa información puedan ser reconstruidas en el receptor. En segundo lugar, los sistemas llevan a cabo aproximaciones de la señal, con el fin de poder reducir la tasa de bits de la señal al ser transmitida. Por último el sistema se encarga de encontrar el modo más eficiente para poder enviar todos estos datos o información.
La compresión se lleva a cabo en 3 pasos consecutivos:

### Compensación de movimiento

El sistema se encarga de encontrar si alguna parte de la imagen se repite en imágenes anteriores (frecuencia de ocurrencia). Si esto es así, el sistema enviará solo la información de donde no se repiten esas partes de las imágenes, en vez de volver a enviar toda la imagen entera.

### Codificación de la transformada

En este paso se convierte la señal desde el dominio temporal al dominio frecuencial, es decir se expresa la señal como un conjunto de componentes frecuenciales.

### Codificación estadística

* Codec de video
* Codec de audio