VideoToolbox es un marco de software proporcionado por Apple que da acceso directo a los codificadores y decodificadores de video basados en hardware disponibles en los dispositivos MacOS y iOS. Este marco permite seleccionar la opción de codificación o decodificación de VideoToolbox utilizando el popular marco de procesamiento de video ffmpeg. De esta forma, resulta relativamente sencillo comparar el rendimiento de codificación HEVC entre x265, operando en software, y VideoToolbox, funcionando en hardware dedicado en un dispositivo Apple.

En una prueba realizada con ffmpeg en modo basado en archivos, se codificaron 100 fotogramas del video "Pedestrian Area" en formato HEVC utilizando (1) x265 en el preset Medium y (2) VideoToolbox. Para esta comparación, los parámetros de codificación de cada códec fueron elegidos para lograr un tamaño de archivo comprimido similar, es decir, una tasa de bits de compresión comparable. Los resultados, presentados en la tabla 11.2, mostraron que VideoToolbox ejecutó la tarea aproximadamente 3 veces más rápido que x265. Sin embargo, esta diferencia en la velocidad podría ser aún mayor, dado que la operación basada en archivos requiere leer una gran cantidad de datos de video sin comprimir desde el archivo de entrada, lo cual consume un tiempo significativo del proceso de codificación.

Aparte de ser más rápido en términos reales, un códec basado en hardware, como el de VideoToolbox, descarga la carga del CPU principal, permitiendo que este último se libere para realizar otras tareas. Sin embargo, en términos de calidad de video, medida mediante el índice VMAF, VideoToolbox resultó ser considerablemente inferior a x265. En este caso, VideoToolbox tuvo que codificar a casi el doble de la tasa de bits comprimidos para lograr una calidad visual similar a la de x265.

Por lo tanto, si el rendimiento de compresión es más importante que la velocidad de procesamiento, x265 podría ser la mejor opción. Sin embargo, para aplicaciones donde el tiempo es crucial, como la codificación de video en tiempo real, un códec basado en hardware como el disponible a través de VideoToolbox podría ser más adecuado.

Cuando se mide el rendimiento de un códec de video, existen al menos tres maneras principales de evaluarlo: la tasa de bits comprimidos, la calidad decodificada y la complejidad computacional. La tasa de bits comprimidos se refiere al tamaño del archivo comprimido y a cuántos bits por segundo se procesan en el video. La calidad decodificada hace referencia a qué tan cercana está la calidad visual del video comprimido a la versión original sin comprimir. Por último, la complejidad computacional indica cuánto tiempo lleva comprimir o descomprimir una secuencia de video, y si la compresión puede realizarse en tiempo real, es decir, si un video de 30 fotogramas por segundo puede ser comprimido a esa misma tasa.

En una comparación más amplia entre códecs, como H.264 y H.265, se observa que, por ejemplo, el códec x265 puede comprimir un archivo aproximadamente un 1.3 veces más que el códec x264, pero lleva más tiempo para hacerlo. Este equilibrio entre calidad, compresión y tiempo de procesamiento es fundamental a la hora de elegir un códec para distintas aplicaciones. Si se busca una mayor compresión, se puede aceptar una pérdida en la calidad, o si la calidad es la prioridad, se puede reducir la compresión a cambio de un mayor tiempo de procesamiento.

Por otro lado, el rendimiento de compresión también depende de varios factores, entre los cuales se incluyen el estándar o formato de codificación utilizado, como H.264 o H.265, y las limitaciones que cada uno impone en el proceso de codificación, como el tamaño máximo de las unidades de transformación (CTU) en H.265. Además, los parámetros específicos de codificación, como el valor de la calidad (QP), influyen considerablemente en el rendimiento del códec.

Otro factor crucial en la elección de la codificación es la plataforma de implementación. Mientras que los códecs basados en hardware pueden ofrecer un rendimiento superior, especialmente en términos de velocidad, los códecs basados en software pueden proporcionar mayor flexibilidad en términos de calidad, pero a costa de una mayor carga computacional. Además, la secuencia de video que se desea comprimir también juega un papel importante, ya que las características del video, como su resolución o complejidad, pueden afectar la eficiencia de la codificación.

Finalmente, la elección del códec y los parámetros de codificación no solo dependen de aspectos técnicos, sino también de la percepción subjetiva del usuario final sobre la calidad del video. Es esencial comprender que, si bien las métricas como VMAF pueden proporcionar una medición objetiva de la calidad, la verdadera percepción de la calidad del video es, en última instancia, una experiencia personal.

¿Cómo resolver problemas de predicción en compresión de video cuando no se encuentra una buena coincidencia?

La predicción interdependiente, que forma la base de muchos códecs de video como H.264 y HEVC, se basa en la suposición de que es posible encontrar una buena coincidencia para un bloque en el cuadro actual al buscar un bloque correspondiente en un cuadro de referencia previamente codificado. Sin embargo, existen diversas circunstancias que pueden dificultar este proceso, lo que resulta en una predicción inexacta y en la necesidad de aplicar soluciones que mejoren la calidad de la predicción.

Uno de los problemas más comunes se produce cuando la imagen de referencia contiene distorsiones visibles, como bordes bloqueados o distorsiones en forma de "anillos" que se producen debido a la falta de filtrado adecuado. En estos casos, aunque la predicción sea lo más precisa posible, la distorsión en el cuadro de referencia afectará negativamente la calidad de la predicción. Para resolverlo, es necesario aplicar filtros de deblocking y Sample Adaptive Offset (SAO) que permitan reducir las distorsiones y mejorar la calidad del bloque de referencia antes de realizar la predicción. Estos filtros, que se aplican tanto en el codificador como en el decodificador, forman parte del proceso de bucle de codificación, y su éxito se traduce en una mejor coincidencia en la predicción de bloques de la imagen.

La predicción interdependiente también puede verse afectada por varios tipos de movimientos no tradicionales que no encajan bien en el modelo de movimiento translacional básico. Este modelo asume que los bloques se mueven de manera lineal en los ejes X e Y, pero en el mundo real, los objetos no siempre se mueven de manera tan simple. El movimiento de rotación, distorsión, deformación o incluso la variación en la escala pueden hacer que un bloque en el cuadro actual no coincida con un bloque correspondiente en el cuadro de referencia. Por ejemplo, si un objeto gira, la forma del bloque en el cuadro de referencia ya no será la misma. Los modelos de movimiento más complejos, como el modelo afín, pueden ayudar a capturar estos tipos de movimientos, pero a menudo requieren un mayor número de parámetros, lo que incrementa la complejidad computacional.

Otro desafío ocurre cuando el movimiento de los objetos es más pequeño que el tamaño del bloque utilizado para la predicción. Si un bloque de referencia es más grande que el movimiento real de un objeto, no será posible encontrar una coincidencia precisa. Esto es especialmente frecuente cuando los objetos se mueven en direcciones opuestas o cuando hay múltiples objetos pequeños dentro de un solo bloque. En este tipo de situaciones, reducir el tamaño del bloque podría ofrecer mejores resultados, pero a costa de aumentar el overhead y la complejidad del proceso de codificación.

El cambio de iluminación también es un factor importante a considerar. Un cambio en la iluminación, como cuando se enciende una luz, puede alterar considerablemente los valores de los píxeles en una imagen sin que los objetos se desplacen. En estos casos, el códec podría no encontrar una buena coincidencia entre el cuadro actual y el cuadro de referencia, ya que la predicción depende de la coherencia visual entre ambos cuadros. Si un objeto se mueve y altera la iluminación en su entorno, el cambio de iluminación puede dificultar aún más la predicción precisa. En tales situaciones, la compensación de iluminación, donde el códec ajusta los valores de predicción teniendo en cuenta las variaciones de luz, puede mejorar la calidad de la predicción.

Además, existen tipos de movimientos especialmente complejos para los códecs basados en bloques, como los movimientos aleatorios (por ejemplo, las ondas de agua o el humo) que no siguen patrones regulares y predecibles. Estos movimientos pueden hacer que no se encuentre una coincidencia exacta en el cuadro de referencia, ya que no existe una correspondencia clara entre los bloques en movimiento. De forma similar, los desvanecimientos (fades) o las explosiones también complican la predicción debido a la naturaleza caótica y no estructurada del movimiento.

Para mejorar la precisión de la predicción, es fundamental comprender que los modelos de compresión de video actuales están diseñados bajo ciertos supuestos que no siempre se cumplen en escenas reales. La optimización de los parámetros del codificador, como el tamaño del bloque, los filtros aplicados y los modelos de movimiento, debe tener en cuenta los desafíos específicos de cada tipo de contenido. La capacidad de ajustar estos parámetros es clave para obtener una predicción precisa, especialmente cuando las condiciones de la escena cambian de manera no uniforme o presentan características complejas.

Es esencial que el lector entienda que, aunque la teoría detrás de la predicción interdependiente es bastante sólida, los problemas prácticos relacionados con la complejidad del movimiento y las distorsiones pueden hacer que este proceso sea mucho más desafiante. La predicción exacta depende no solo de la tecnología de compresión, sino también de la capacidad de manejar de manera eficiente las variaciones en el movimiento, la iluminación y otros factores dinámicos que afectan la calidad del video comprimido.

¿Cómo funciona la interpolación de muestras en HEVC?

En el proceso de codificación de video de alta eficiencia (HEVC), uno de los aspectos fundamentales es la interpolación de muestras, un mecanismo que permite mejorar la resolución de una imagen utilizando información de píxeles cercanos. Este proceso es esencial tanto para la predicción intra-cuadro como para la interpolación de movimiento, dos de los elementos clave en la compresión de video. A continuación se detallan los métodos utilizados para generar las posiciones interpoladas en el formato HEVC, utilizando filtros de diferentes longitudes.

La interpolación de las posiciones de las muestras, como por ejemplo las posiciones aa, bb y cc, se basa en una combinación ponderada de muestras de posiciones enteras cercanas. Por ejemplo, la posición aa se interpola como una combinación ponderada de ocho muestras en las posiciones enteras, con la fórmula:

a=1A3,0+4A2,010A1,0+58A0,0+17A1,05A2,0+1A3,064a = \frac{ -1 \cdot A_{ -3,0} + 4 \cdot A_{ -2,0} - 10 \cdot A_{ -1,0} + 58 \cdot A_{0,0} + 17 \cdot A_{1,0} - 5 \cdot A_{2,0} + 1 \cdot A_{3,0}}{64}

La muestra más cercana, A0,0A_{0,0}, tiene el peso más alto, lo que refleja su mayor proximidad en el espacio de la imagen original. El mismo proceso se aplica a otras posiciones, como la bb, que también se interpola usando una fórmula similar, pero con diferentes ponderaciones. Es importante resaltar que esta interpolación no crea nueva información de la imagen, pero sí mejora la calidad visual al suavizar las transiciones entre los píxeles originales, lo que da como resultado una imagen más nítida a menor resolución.

La interpolación de las posiciones dd, hh y nn se realiza utilizando muestras vecinas en una dirección vertical, aplicando la misma fórmula de ponderación que se usa para la posición aa, pero en un eje diferente. De forma similar, las posiciones ee, ff y gg se interpolan utilizando una combinación de muestras verticales, mientras que las posiciones ii, jj y kk se interpolan con una combinación de muestras más amplia, garantizando que se mantenga la coherencia en la imagen a través de los diferentes niveles de interpolación.

El proceso de interpolación para las muestras cromáticas sigue una lógica similar, pero debido a la diferencia en la precisión entre la luminancia y la crominancia en HEVC, las muestras cromáticas se interpolan con una mayor precisión, utilizando filtros más sencillos. En el formato 4:2:0, por ejemplo, hay el doble de muestras cromáticas que de luminancia, lo que implica que cada vector de movimiento de luminancia con precisión de cuarto de píxel corresponde a un vector de movimiento cromático con precisión de octavo de píxel. Esto permite una representación cromática mucho más precisa en las imágenes.

Un ejemplo claro del impacto de estos métodos de interpolación es la comparación entre la interpolación bilineal y la interpolación HEVC en una imagen decimada. Al realizar la interpolación bilineal, la imagen resultante muestra un desenfoque notable, especialmente en los bordes. Esto se debe a que la interpolación bilineal utiliza solo dos muestras cercanas para calcular los valores intermedios, lo que puede suavizar excesivamente los detalles y las transiciones de bordes. En contraste, la interpolación HEVC, al emplear una mayor cantidad de muestras, preserva los bordes y detalles de la imagen de manera más precisa, resultando en una imagen interpolada más nítida y detallada.

La interpolación de muestras es, por lo tanto, un proceso crucial para la calidad visual en la compresión de video, ya que permite aumentar la resolución de las imágenes sin perder detalles significativos. Sin embargo, aunque este proceso mejora la calidad percibida, no genera nueva información sobre la escena, sino que simplemente mejora la representación de la información original.

Además, es importante comprender que la interpolación no solo se aplica a la mejora visual, sino que también juega un papel fundamental en la eficiencia de la compresión. Al proporcionar una interpolación precisa, HEVC logra mantener una alta calidad de imagen a tasas de compresión más altas, lo que es fundamental en aplicaciones como la transmisión de video en línea o la grabación de video en dispositivos móviles, donde el almacenamiento y el ancho de banda son limitados. Sin la interpolación eficaz de las muestras, la compresión de video podría perder mucha de la calidad visual, resultando en imágenes pixeladas o con artefactos visibles. Por lo tanto, el proceso de interpolación no es solo una cuestión de calidad visual, sino también una parte integral de la eficiencia de la compresión.

¿Cómo afectan la transformación y cuantización en la codificación de video?

La codificación de video moderna, en particular en estándares como HEVC y VVC, se apoya en la aplicación de transformaciones y cuantizaciones sobre bloques de imágenes para optimizar la compresión de datos. Este proceso reduce la cantidad de información necesaria para representar un video sin perder demasiada calidad visual. Sin embargo, es crucial entender cómo funcionan estos procesos a nivel técnico, ya que son elementos fundamentales para la compresión eficiente de datos visuales.

En primer lugar, la transformación de bloques de píxeles a dominios de frecuencia espacial es una operación clave en la codificación de video. Cada bloque de datos, que representa una pequeña parte de una imagen o una secuencia de video, es transformado para descomponer la información en componentes de frecuencia, lo que permite identificar patrones más fácilmente y realizar la compresión de manera más eficaz. Este paso es crucial, ya que la mayoría de los bloques de video contienen gran parte de su energía en frecuencias bajas, lo que significa que solo una pequeña parte de la información del bloque tiene un impacto visual significativo.

Una de las técnicas utilizadas en estándares como VVC es la aplicación de transformaciones de baja frecuencia no separables (LFNST). Esta transformación se aplica a los coeficientes de frecuencia baja en bloques intra-predictivos, lo que permite representar los datos de manera más compacta sin perder calidad. Al aplicar esta transformación solo a una parte del bloque, como un sub-bloque que puede ser la mitad o un cuarto del bloque completo, se logra una eficiencia mayor en la compresión, ya que la energía de los residuos generalmente se concentra en una pequeña área del bloque.

La cuantización, que sigue a la transformación, es el proceso mediante el cual los valores de los coeficientes transformados se aproximan a un conjunto de valores discretos, reduciendo así la precisión de los mismos. Este paso permite reducir aún más la cantidad de datos necesarios para representar la información visual. En el caso de VVC, la cuantización se realiza utilizando un parámetro de calidad (QP), que determina el tamaño del paso del cuantificador. A medida que se incrementa el QP, el tamaño del paso también aumenta, lo que lleva a una mayor compresión, pero con una disminución en la calidad visual.

Un aspecto interesante de VVC es la inclusión de la cuantización con codificación de trellis (TCQ), una técnica que utiliza dos funciones de cuantización: Q0 y Q1. Inicialmente, los coeficientes de cada bloque se decodifican utilizando Q0, pero la función de cuantización cambia a Q1 dependiendo de los valores previamente decodificados. Este enfoque mejora la calidad de los bloques decodificados a costa de un mayor esfuerzo computacional. A través de la utilización de matrices de ponderación de cuantización, también es posible adaptar el proceso de cuantización a las características específicas del contenido visual, lo que resulta en una compresión más eficiente y una mejor calidad de imagen.

El diseño de la cuantización en VVC también se ve mejorado por la extensión del rango de QP, que alcanza un valor máximo de 63, en comparación con los 51 de HEVC. Esta ampliación permite una mayor flexibilidad en la codificación de videos a bitrates más bajos, optimizando el proceso de compresión.

Es importante destacar que la cuantización y la transformación no son procesos independientes, sino que trabajan de manera conjunta. Mientras que la transformación convierte la información visual en un dominio de frecuencias, la cuantización decide cuánta de esa información puede ser descartada sin que se perciba una degradación significativa en la calidad visual. Este equilibrio entre la cantidad de datos retenidos y la calidad percibida es el corazón de la compresión de video moderna.

Además de los aspectos técnicos mencionados, es crucial comprender cómo estos procesos impactan la experiencia del usuario final. Aunque una mayor compresión permite reducir el tamaño de los archivos de video y mejorar las tasas de transmisión, también puede llevar a pérdidas de calidad visual si no se ajustan adecuadamente los parámetros de cuantización y transformación. Esto es especialmente relevante en aplicaciones de streaming, donde la calidad del video es esencial, pero las limitaciones de ancho de banda requieren un enfoque de compresión más agresivo.

El futuro de la compresión de video probablemente involucra mejoras en estos procesos, con técnicas más avanzadas de transformación y cuantización que permitan lograr una compresión aún más eficiente sin sacrificar la calidad visual.