Codec proviene del acrónimo codificador-decodificador, y podemos definirlo como «programa capaz de codificar o decodificar un flujo de datos de vídeo o audio».
Por tanto, debemos quedarnos con la idea de que el codec es un software que procesa una señal de entrada (de vídeo o audio) y que entrega una versión codificada, normalmente comprimida, a su salida. Asimismo, debe ser capaz de realizar el proceso inverso para decodificar la señal.
Tabla de contenidos
Software y Hardware
Aunque hemos definido los codecs como software (y en el fondo siempre son algoritmos informáticos) es cierto que a veces los encontramos en forma de hardware, como dispositivos capaces de digitalizar y codificar señales analógicas de vídeo o audio, o simplemente convertir formatos digitales entre sí.
Codecs y compresión
Uno de los aspectos más característicos de los códecs, y el que generalmente determina si un codec es mejor que otro, es su capacidad para comprimir la información digital sin que el vídeo o audio resultante pierda calidad aparente, a veces llamada calidad subjetiva.
Calidad objetiva vs. subjetiva
La calidad objetiva es la información de la que se compone una imagen, vídeo o audio en su origen, sin haber recibido ningún tipo de pérdida.
La calidad subjetiva, en cambio, es la que el usuario percibe al consumir una imagen, vídeo o audio, habiendo pasado éste por algún tipo proceso de compresión. Diremos que la calidad subjetiva es alta cuando el resultado comprimido parece tan bueno como el fichero original a ojos dele spectador, y diremos que la calidad es baja cuando se percibe que el producto se ha degradado de alguna forma (se ve pixelado, se escucha peor, se aprecian artefactos de imagen, etc.).
Tipos de compresión
La compresión se divide, por lo general, en 2 categorías: compresión reversible (lossless) y compresión irreversible (lossy).
Reversible (Lossless)
La compresión reversile es aquella que reduce la información digital de un archivo (en definitiva, reducir el número de bytes) sin que se genere una pérdida de calidad objetiva en el fichero. Es decir, no se pierde información, ya que se podrá recuperar en su totalidad al descomprimirla.
Este categoría se basa en algoritmos de compresión estadística, como veremos más adelante en este artículo.
Irreversible (Lossy)
La compresión irreversible es aquella que reduce la información digital de un archivo (en definitiva, reducir el número de bytes) a través de la eliminación de información visual redundante. Es decir, se pierde información, pero si se hace correctamente, sin abusar, el ojo humano no debería ser capaz de apreciarlo.
Técnicas de compresión
La compresión se basa en algoritmos matemáticamente complejos y difíciles de describir, por lo que en este artículo veremos una descripción básica de los tipos más comunes de compresión de imagen y sonido.
Compresión estadística
Esta técnica está basada en aprovechar patrones repetitivos de 0s y 1s en el fichero digital para poder crear una versión comprimida (de menor peso), sin que se genere ningún tipo de pérdida de información (tipo lossless). Este es el tipo de compresión que usan programas como WinRAR, WinZip, 7zip, etc., pero que también es usada por los propios códecs.
Compresión espacial
Este tipo de compresión se basa en dividir la imagen en cuadros pequeños (por ejemplo de 8×8 píxeles) y analizarlos individualmente. Si dentro de ellos se encuentran detalles o diferencias de color imperceptibles para el ojo humano se intentan eliminar. Es un tipo de compresión lossy, y es aplicada por la mayoría de códecs, tanto de imagen como de vídeo: JPG, MPEG, Theora, VP9, etc.
La forma en que la imagen es dividida en cuadros más pequeños puede provocar que éstos se aprecien en el vídeo final si la compresión es demasiado agresiva. A veces, cuando decimos que «se ve pixelado», es debido a una compresión demasiado alta.
Compresión cromática
Hay diferentes formas de abordar una compresión basada en color. Una compresión sencilla es la de los formatos que limitan la gama de color de una imagen a una paleta de pocos colores. De esta forma cualquier color que se salga de esa paleta es mapeado a su color más próximo dentro de ella, y se consigue reducir drásticamente la cantidad de información a transmitir de la imagen. Por lo general es un proceso bastante destructivo, aunque dependerá de la naturaleza de nuestra imagen. Este sistema lo utilizan formatos como GIF y PNG.
Otra forma común de reducir información cromática es simplemente reducir la cantidad de muestras que se usan para representar las señales de color, dejando intactas las de luminancia. Esto lo aplican muchos códecs de vídeo y es debido a que el ojo humano es más sensible a la información lumínica (de brillo) que a la información cromática (de color). Cuando se habla de subsampling de color, o vemos un parámetro del tipo «formato 4:2:0», se está haciendo alusión a este tipo de compresión, pero ya lo veremos con más detalle en próximos posts.
Ambas formas de compresión cromática generan pérdidas de información, es decir, son lossy.
Compresión temporal y predictiva
La compresión temporal aprovecha la repetición de partes de la imagen entre fotogramas consecutivos, de forma que puede reducir la información a enviar. También utiliza predicción de movimiento, que en ocasiones ayuda a reducir la información enviada.
Aunque conceptualmente sencillo, lo cierto es que es un tipo de algoritmo bastante complejo.
La idea con la que debemos quedarnos es que un vídeo con mucho detalle y mucho movimiento en la escena produce archivos de mucho mayor tamaño (ya que la información es difícilmente comprimible). Por el contrario, un vídeo con poco movimiento e imágenes sencillas producirá archivos de mucho menor tamaño.
Compresión frecuencial (audio)
Usada en formatos de audio como MP3, se basa en la eliminación de frecuencias que el oído humano no es capaz de percibir, ya sea porque quedan fuera del rango de 20Hz-20KHz o porque quedan enmascaradas por otras frecuencias de mayor amplitud (mayor sonoridad).
Aunque pueda sonar raro, la compresión frecuencial también se utiliza en la compresión espacial de vídeo, ya que cualquier señal es matemáticamente representable como conjunto de frecuencias (a tarvés de un proceso llamado Transformada de Fourier). Sin embargo, no es objeto de este artículo entrar en esos detalles.
Otros parámetros de los códecs
Hemos analizado la compresión como el aspecto clave de un códec porque realmente es el que determina la calidad del resultado. Sin embargo, hay otros aspectos a tener en cuenta.
Velocidad y eficiencia
Comprimir vídeo es una tarea computacionalmente costosa y dependiendo de la complejidad del algoritmo y de la longitud del vídeo, la codificación puede llegar a costar incluso horas. Un aspecto importante de un códec es la velocidad a la que puede obtener el resultado.
Capacidades del codec
La capacidad para procesar diferentes tipos de señal de entrada y de salida; por ejemplo, señales de vídeo con produndidades de bits diferentes, canal alpha, etc. Para conocer más aspectos clave sobre vídeo puedes consultar el post parámetros del vídeo digital.
Complejidad del algoritmo
Hemos mencionado que son programas informáticos computacionalmente costosos, por lo que un factor diferencial es cómo un códec hace uso intensivo (pero óptimo a la vez) de la CPU, la memoria RAM y la tarjeta gráfica, en la medida de lo posible.
Codecs de vídeo y audio
Este artículo ya es bastante extenso, por lo que se han clasficado en los siguientes posts los mejores codecs de vídeo y los mejores codecs de audio.