El video codificado implica un proceso complejo de almacenamiento, transmisión y reproducción, donde la calidad de la experiencia del usuario depende de varios factores técnicos. Para lograr que el video sea accesible de manera efectiva, se deben gestionar diferentes aspectos como el formato de almacenamiento, el control del búfer y la sincronización entre video y audio. Además, es fundamental garantizar que la transmisión sea eficiente, incluso en condiciones de red variables, y que el decodificador pueda mantener una reproducción continua sin interrupciones.
Uno de los puntos clave en el almacenamiento de video codificado es elegir un formato de archivo adecuado. Este debe ser compatible tanto para el almacenamiento como para la transmisión y reproducción. Por ejemplo, un video grabado en un dispositivo de consumo, como un teléfono móvil, necesita ser almacenado en un formato que permita tanto la edición como la transmisión de manera eficiente. Esto también es cierto para los archivos de video que se usan en la producción de televisión o los programas de video que se transmiten por streaming o se almacenan en un DVR.
El video codificado se guarda en unidades denominadas "unidades de acceso" (AU, por sus siglas en inglés), que corresponden a un solo fotograma codificado. Cada AU es enviado y almacenado como una o varias unidades de la capa de abstracción de red (NALU, por su sigla en inglés), que contienen una sección del fotograma codificado. La decodificación se realiza a partir de la recepción de estas unidades, las cuales, al ser procesadas, generan los fotogramas decodificados que se reproducen de manera continua. La estructura típica de un video codificado, como el H.264, H.265 o H.266, incluye la organización de estos fotogramas en secuencias, con la información necesaria para ser descifrada desde el inicio de la transmisión hasta su completa decodificación.
En cuanto a la estructura del archivo, existen diferentes formatos que facilitan su almacenamiento y transmisión. Un archivo que contiene video codificado generalmente debe ser capaz de almacenar el audio y otros metadatos relacionados, como subtítulos. Sin embargo, en escenarios de descarga progresiva o transmisión en vivo, no es práctico que un decodificador necesite recibir la totalidad del archivo antes de poder reproducirlo, ya que esto genera demoras innecesarias. En estos casos, un formato de archivo más sofisticado, como el formato ISO Base Media File Format (BMFF) o MP4, es más adecuado, pues permite una organización que facilita la descarga y decodificación progresiva, intercalando el video, audio y metadatos de manera que el cliente pueda comenzar la reproducción casi inmediatamente después de que comienza la descarga.
Dentro del mundo de los formatos de archivo, el MP4, basado en el BMFF, es uno de los más populares. Este formato permite almacenar tanto video como audio, y organiza la información en pistas que contienen muestras codificadas de video y audio, acompañadas de metadatos que indican cómo deben ser decodificadas y presentadas. Estos metadatos son fundamentales para garantizar que los reproductores puedan identificar las pistas correctamente y mantener la sincronización del video y el audio, de manera que la experiencia del usuario sea continua y sin interrupciones.
En el caso del video codificado mediante estándares como H.264 o H.265, estos se mapean en el formato BMFF de acuerdo con las especificaciones de archivo correspondientes, lo que facilita su almacenamiento y distribución en plataformas como el MP4. La estructura del archivo es flexible, permitiendo adaptaciones dependiendo de las necesidades del contenido. Por ejemplo, en una película, puede haber múltiples pistas de audio para diferentes idiomas o configuraciones de sonido envolvente, lo cual se gestiona dentro del mismo archivo MP4. Además, algunos formatos como el MPEG-2 Transport Stream (TS) y Matroska (MKV) también son populares, pero su utilización depende de los requisitos específicos del entorno de transmisión.
La evolución del formato MP4 y su relación con el QuickTime y el ISO BMFF resalta cómo la industria ha buscado optimizar la manera en que se almacenan y se distribuyen los videos codificados. La capacidad de un archivo de organizar los datos de manera eficiente no solo facilita la reproducción, sino que también mejora la calidad de la experiencia del usuario al reducir el tiempo de espera para comenzar la visualización y mantener la sincronización perfecta entre video, audio y otros elementos como los subtítulos.
Es importante considerar, además, que el uso de estos formatos no solo depende de la eficiencia técnica, sino también del tipo de dispositivo y la red utilizada. Por ejemplo, los formatos que permiten la descarga progresiva o el streaming en vivo deben ser lo suficientemente robustos para soportar variaciones en las condiciones de red, como la tasa de transmisión variable o la pérdida de paquetes. Así, la eficiencia en el uso de estos formatos contribuye a una experiencia de usuario más fluida y menos propensa a interrupciones.
¿Cómo afectan las estructuras de video en los códecs de video modernos?
En el ámbito del códec de video, las estructuras desempeñan un papel crucial al determinar la forma en que los datos de video se procesan, se codifican y se decodifican. Un códec de video moderno no solo se ocupa de la compresión, sino también de la organización de la información en unidades que optimicen tanto la calidad como la eficiencia. Estas estructuras varían dependiendo del códec utilizado, y es esencial entender cómo cada una influye en el rendimiento final.
El códec de video comienza su tarea dividiendo la secuencia de video en unidades procesables. Cada códec tiene su propia manera de tratar estas unidades, desde la secuencia hasta el bloque más pequeño de datos. En términos generales, los códecs de video utilizan una serie de estructuras jerárquicas que permiten la manipulación y mejora de las imágenes a lo largo del proceso de codificación. La forma en que se organiza el video depende en gran medida del tipo de códec y la complejidad de las técnicas que emplea.
Un aspecto esencial a considerar es la forma en que los códecs manejan las estructuras de acceso aleatorio (RAP, por sus siglas en inglés). Estas estructuras facilitan la decodificación y el acceso a partes del video sin necesidad de decodificar toda la secuencia de forma secuencial. Este tipo de estructuras son vitales en situaciones donde la velocidad de acceso es crucial, como en la transmisión en vivo o en plataformas de video bajo demanda.
En cuanto a la codificación de imágenes, los códecs modernos como HEVC (High Efficiency Video Coding) y VVC (Versatile Video Coding) emplean unidades de codificación avanzadas, como los "coding tree units" (CTUs) y "coding units" (CUs). Estas unidades permiten una granularidad de codificación mucho mayor, lo que facilita la adaptación a diferentes resoluciones y complejidades de la imagen. Este tipo de estructuras permite que el códec ajuste la cantidad de datos que se asignan a cada unidad dependiendo de la complejidad de la escena, optimizando así tanto el tamaño del archivo como la calidad visual.
El uso de bloques de transformación en el proceso de codificación también es fundamental. La transformación de bloques permite que los datos sean representados de forma más eficiente, minimizando la redundancia y mejorando la compresión. Sin embargo, la elección de la estructura de transformación puede tener un gran impacto en la calidad del video final, ya que un mal uso de esta técnica puede generar artefactos no deseados, como el banding (banda de color) o el pixelado.
En códecs más avanzados, como VVC, se han incorporado nuevas mejoras para optimizar el rendimiento. Por ejemplo, se ha trabajado en la mejora de la predicción intra y la predicción inter. La predicción intra se refiere a la capacidad del códec para predecir los valores de los píxeles en una imagen basándose únicamente en la información dentro de esa misma imagen. En contraste, la predicción inter utiliza imágenes de referencia previas o futuras para predecir los valores de los píxeles actuales. Las mejoras en estos algoritmos son esenciales para alcanzar altas tasas de compresión sin sacrificar la calidad visual.
Otro aspecto a considerar es cómo los códecs gestionan las estructuras de acceso aleatorio en el flujo de bits. Estas estructuras permiten que los datos se puedan cortar y reorganizar sin afectar la capacidad de decodificación. Esto es fundamental cuando se realizan operaciones como la recuperación ante errores o la manipulación del flujo de bits, algo especialmente útil en aplicaciones de transmisión en vivo o sistemas de transmisión de video en tiempo real.
En resumen, las estructuras de video en los códecs modernos no solo impactan la eficiencia de la compresión, sino también la flexibilidad y accesibilidad del contenido codificado. Los códecs que emplean estructuras más complejas, como HEVC y VVC, ofrecen una mejor calidad de imagen y mayor eficiencia, lo que es crucial para el futuro de la transmisión de video en alta resolución y la adopción de nuevas tecnologías como la realidad virtual y el video 8K.
Es importante comprender que, además de las estructuras básicas de codificación, los códecs modernos también implementan técnicas avanzadas como el procesamiento paralelo y la gestión eficiente de los recursos de hardware. Por ejemplo, el uso de "tiles" y "slices" en la codificación permite distribuir la carga de trabajo de manera más eficiente entre múltiples procesadores o núcleos, lo que mejora la velocidad de decodificación sin afectar la calidad.
Además, la estructura de predicción y la correcta señalización de los modos de predicción y de referencia son cruciales para la calidad final de la imagen. La correcta gestión de estas estructuras permite que el códec se adapte de manera dinámica a las variaciones de la escena y a los diferentes tipos de contenido, asegurando una experiencia visual fluida y de alta calidad, independientemente de las condiciones de transmisión o almacenamiento.
¿Cómo funcionan las estructuras y la predicción intra en la codificación de video VVC y HEVC?
El proceso de codificación de video ha evolucionado considerablemente en las últimas décadas, permitiendo compresión de alta eficiencia, como es el caso de los codecs VVC (Versatile Video Coding) y HEVC (High Efficiency Video Coding). En este contexto, las estructuras de codificación, como las Unidades de Codificación (CU), las Unidades de Predicción (PU) y las Unidades de Transformación (TU), juegan un papel crucial. Estas estructuras no solo descomponen la secuencia de video en bloques manejables, sino que también optimizan el proceso de compresión, haciendo que la transmisión y almacenamiento de video sea más eficiente.
Un ejemplo claro de esta segmentación es el cuadro de video HD que se muestra en la Figura 4.61, donde se resalta una CTU (Unidad de Codificación Cuadrada) de 128 × 128 píxeles. En este caso, la CTU se divide de manera jerárquica utilizando un esquema de partición quadtree, lo que genera bloques cuadrados más pequeños. Estos bloques, a su vez, se subdividen aún más usando particiones binarias y ternarias, lo que da lugar a CUs de diferentes tamaños, como 16 × 4, 8 × 4, 8 × 8 y 4 × 4. Esta partición jerárquica y dinámica permite una codificación más precisa y eficiente, adaptándose a las características específicas de la imagen.
En la codificación de video, también existen estructuras a nivel de imagen, como las "slices" (rebanadas) y los "tiles" (azulejos), que agrupan los datos codificados para facilitar su procesamiento y transmisión. Además, las estructuras de más alto nivel, como los "GOPs" (grupos de imágenes de predicción) y los "parameter sets" (conjuntos de parámetros), organizan las imágenes codificadas en grupos manejables, lo que resulta fundamental en aplicaciones como el streaming de video.
En cuanto al proceso de predicción intra, este es esencial en la codificación de video. La predicción intra se refiere a la creación de un bloque de predicción basado en los píxeles de la misma imagen, pero de áreas adyacentes al bloque en cuestión. El ejemplo mostrado en la Figura 5.1 ilustra cómo, al procesar un bloque de píxeles, el codificador utiliza píxeles previamente codificados de los bloques adyacentes (por ejemplo, aquellos situados arriba o a la izquierda del bloque actual) para realizar la predicción. Los píxeles a la derecha o abajo del bloque pueden no estar disponibles debido al orden de procesamiento rasterizado, es decir, de izquierda a derecha y de arriba a abajo.
Existen diferentes tipos de predicción intra, que se eligen dependiendo de las características de la textura del bloque a codificar. La predicción de tipo "DC" o "plana" se utiliza cuando el bloque tiene una textura homogénea, y consiste en asignar el mismo valor a todos los píxeles del bloque, como el promedio de los píxeles adyacentes. En la predicción "planar", se ajusta una función de plano a los píxeles adyacentes para predecir el bloque de manera suave. Por último, la predicción "direccional" o "angular" extrapola los valores de los píxeles en una dirección específica, como ocurre cuando se predice una línea diagonal.
Al codificar un cuadro de video, el codificador elige el modo de predicción más adecuado para cada bloque, codifica esa elección junto con el residuo (la diferencia entre el bloque actual y el bloque de predicción) y los envía al bitstream comprimido. El decodificador, al recibir los datos, usa el modo de predicción elegido y los píxeles previamente decodificados para recrear el bloque original.
A pesar de la complejidad del proceso de predicción intra, su eficiencia es clave para obtener una compresión de alta calidad. La elección correcta del tipo de predicción y el tamaño del bloque pueden mejorar significativamente la tasa de compresión, pero también tienen sus desventajas. Los bloques de mayor tamaño pueden ser más eficientes para regiones homogéneas, pero resultan menos eficaces en áreas con detalles complejos. Por otro lado, los bloques más pequeños pueden adaptarse mejor a áreas con texturas complejas, pero requieren más recursos computacionales para codificar y decodificar.
La implementación de estos procesos en los codecs estándar, como HEVC y VVC, sigue principios similares pero con diferencias notables. HEVC, por ejemplo, introduce una mayor flexibilidad en la partición de bloques, lo que mejora la eficiencia en la codificación de escenas con alta complejidad visual. VVC, por su parte, amplía aún más esta capacidad, incorporando nuevas técnicas de predicción y partición que optimizan aún más la compresión y la calidad de video.
En este contexto, es crucial comprender que la codificación de video no se limita solo a la elección de estructuras y modos de predicción. La interacción entre diferentes niveles de partición, predicción y transformación es lo que permite lograr la compresión de video de alta eficiencia. Además, la implementación de estas técnicas depende en gran medida de las características del contenido, ya que no todos los tipos de video requieren las mismas estrategias de codificación.
¿Cómo influye el parámetro QP en la calidad y compresión de video en HEVC?
El parámetro QP (quantization parameter) en la codificación de video HEVC tiene un impacto directo tanto en la calidad de la imagen como en el tamaño del archivo comprimido. Este parámetro se utiliza para controlar el proceso de cuantización, que es esencial para la compresión de datos en formatos de video como HEVC.
El valor de QP se transmite en el flujo de bits del HEVC, lo que garantiza que el mismo valor sea utilizado tanto por el codificador como por el decodificador. Cada incremento en el valor de QP está relacionado con un cambio en el tamaño del paso de cuantización, conocido como Qstep. A medida que el valor de QP aumenta, el valor de Qstep también lo hace, lo que implica que se reduce la cantidad de información retenida en el video, lo que resulta en una mayor compresión pero a costa de la calidad visual.
Por ejemplo, en el caso de la codificación de video de 8 bits, el QP puede tomar valores entre 0 y 51. Cada incremento en QP implica un aumento en Qstep, y se observa que el tamaño del paso se duplica aproximadamente con cada aumento de 6 unidades en el valor de QP. Así, al aumentar el QP de 6 a 12, el tamaño del paso de cuantización aumenta a más del doble, lo que genera una mayor compresión de los datos pero también produce una mayor pérdida de calidad.
Por lo tanto, un QP bajo, como 6, da como resultado una calidad visual relativamente alta, pero un archivo más grande. En cambio, un QP alto, como 38, da lugar a una mayor compresión pero con una pérdida de calidad visible, como se observa en un ejemplo práctico de un video a 1080p con 100 cuadros. En este caso, la compresión puede ser tan alta como 680 veces, aunque la calidad del video disminuye significativamente con respecto al archivo original.
El proceso de cuantización es crucial porque, si bien facilita la compresión de datos, también implica la pérdida de detalles en la imagen. Este es un compromiso entre la eficiencia de la compresión y la calidad del video. Los cambios en el valor de QP permiten que los codificadores ajusten la tasa de compresión y la calidad visual de forma flexible, dependiendo del contenido específico del video y de los objetivos de la compresión.
En la práctica, los codificadores HEVC utilizan un proceso de cuantización denominado "forward quantization". En lugar de dividir los coeficientes de la imagen entre Qstep, se multiplica por un factor específico, lo que reduce la carga computacional sin sacrificar la precisión de la operación de cuantización. Este proceso también incluye una reescalabilidad que mejora la eficiencia del algoritmo.
Este ajuste en la cuantización puede mejorarse aún más al introducir un factor de ponderación, que permite optimizar el rendimiento de tasa-distorsión en función de las características específicas del contenido del video. Un valor de ponderación mayor que 16 aumenta el tamaño del paso de cuantización, mientras que un valor menor que 16 lo reduce, afectando directamente a la compresión y la calidad.
A lo largo de este proceso, la relación entre QP, Qstep y la calidad visual del video es un equilibrio delicado. Un control adecuado de estos parámetros permite a los codificadores y decodificadores optimizar tanto la compresión como la preservación de detalles visuales, sin caer en una distorsión excesiva que haga irreconocible el contenido del video.
Es fundamental comprender que el impacto de QP no solo depende del valor seleccionado, sino también del contenido específico del video. Diferentes escenas o tipos de imágenes pueden reaccionar de manera distinta a los ajustes en QP. Además, en algunos casos, la calidad de los detalles en áreas específicas de la imagen puede beneficiarse de técnicas adicionales, como la ponderación de los coeficientes de cuantización, que permite un control más preciso sobre la preservación de la calidad en determinadas regiones del cuadro.
¿Cómo funciona el modelo de contexto en la codificación HEVC?
La codificación en el estándar HEVC (High Efficiency Video Coding) se basa en el uso de modelos de contexto para la estimación de probabilidades y la toma de decisiones eficientes en cuanto a cómo codificar diferentes elementos de un flujo de datos. Este proceso resulta crucial para lograr una codificación de alta compresión sin sacrificar la calidad visual. En este contexto, uno de los aspectos más importantes es cómo se modelan las probabilidades de los valores binarios que se codifican y cómo se gestionan los estados de estos modelos a lo largo del proceso.
En el modelo de contexto HEVC, las probabilidades de que un valor binario sea 0 o 1 se representan por las variables P(B=0) y P(B=1), que pueden variar entre 0.0 y 1.0. Sin embargo, siempre uno de estos valores será menor o igual a 0.5 y el otro será mayor o igual a 0.5. Para manejar este comportamiento de manera eficiente, el modelo no calcula ambas probabilidades, sino que se enfoca en la más pequeña, P(LPS), que siempre es menor o igual a 0.5. El valor de P(LPS) se utiliza para subdividir el rango de valores posibles, lo que permite una codificación más eficiente y precisa de los binarios.
En vez de calcular directamente P(0) y P(1), el codificador trabaja con una sola variable llamada P(LPS), que representa la probabilidad de que el valor binario sea el más pequeño, y se asocia a un rango denominado LpsRange. Este enfoque reduce significativamente la complejidad de los cálculos, ya que permite estimar la probabilidad con solo un parámetro en lugar de dos. La otra probabilidad, la de que el valor sea el más grande (MPS, Most Probable Symbol), se almacena como val(MPS), un valor binario que puede ser 0 o 1.
En términos prácticos, durante la codificación de un "bin" (un valor binario a codificar), el codificador renormaliza el rango hasta que este sea suficientemente grande para representar el valor de la probabilidad de forma precisa. Por ejemplo, si el rango es inferior a 256, se ajusta en pasos hasta que el valor esté dentro de los límites adecuados para la codificación. Al mismo tiempo, el codificador actualiza el estado del modelo de contexto, ajustando los valores de P(LPS) y val(MPS) conforme se procesan más valores.
Una de las técnicas clave para gestionar la complejidad de la codificación en HEVC es el uso de un modelo de transición de estados para calcular P(LPS) de manera eficiente. En vez de realizar una operación de división, que sería costosa computacionalmente, el valor de P(LPS) se estima a través de un índice de estado, que va de 0 a 62. Este índice se actualiza con cada bin procesado: si el valor codificado es LPS, el índice se decrementa, y si el valor es MPS, el índice se incrementa. A medida que el índice se ajusta, también lo hace la probabilidad de que el binario sea el valor menos probable, facilitando el proceso de codificación.
Es importante entender que este proceso de transición de estados no solo afecta la probabilidad de LPS, sino que también influye en el valor de val(MPS), que puede cambiar dependiendo de la cantidad de unos o ceros recibidos en la secuencia de codificación. Este enfoque también permite manejar de manera más eficiente las transiciones de probabilidad, asegurando que el modelo de contexto se ajuste de forma adecuada a las características del flujo de datos.
Otro detalle fundamental es la inicialización de los modelos de contexto en la codificación de segmentos de un "slice". Cada contexto tiene variables como pStateIdx y valMPS, que se inicializan al inicio de la codificación de un segmento. Los valores de estas variables dependen del tipo de slice (I, P o B) y de parámetros como el valor QP (cuantificación de la predicción), lo que implica que el modelo de contexto debe ser adaptado a las características específicas de cada segmento que se codifica.
El uso de múltiples modelos de contexto para cada tipo de sintaxis y la selección de los mismos durante la codificación optimizan la eficiencia del proceso. Estos modelos se agrupan en tablas de contexto (ctxTable), y la correcta selección de un modelo para codificar cada "bin" contribuye a una compresión más eficiente del flujo de datos. Este proceso es clave para los estándares de codificación de video de alta eficiencia, como HEVC, que buscan maximizar la calidad visual mientras minimizan el tamaño de los archivos.
Para el lector que se adentre en el mundo de la codificación HEVC, es esencial comprender cómo la eficiencia en la codificación depende de la capacidad para modelar las probabilidades de manera efectiva y adaptativa. Los modelos de contexto permiten manejar las complejidades del flujo de datos de manera eficiente, sin sacrificar la precisión ni la calidad. Además, el uso de transiciones de estado para actualizar las probabilidades facilita una codificación más rápida y precisa, reduciendo la carga computacional en procesos de codificación y decodificación.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский