Comment fonctionne un codec vidéo ? Partie 1 : Bases

La deuxième partie: Comment fonctionne le codec vidéo

N'importe quelle trame image peut être représenté sous la forme matrice bidimensionnelle. En ce qui concerne les couleurs, l'idée peut être développée en regardant une image comme matrice tridimensionnelle, dans lequel des dimensions supplémentaires sont utilisées pour stocker des données pour chacune des couleurs.

Si l'on considère la couleur finale comme une combinaison de ce qu'on appelle. couleurs primaires (rouge, vert et bleu), dans notre matrice tridimensionnelle nous définissons trois plans : le premier pour le rouge, le deuxième pour le vert et le dernier pour le bleu.
Comment fonctionne un codec vidéo ? Partie 1 : Bases
Nous appellerons chaque point de cette matrice un pixel (élément d'image). Chaque pixel contient des informations sur l'intensité (généralement sous forme de valeur numérique) de chaque couleur. Par exemple, pixel rouge signifie qu'il contient 0 vert, 0 bleu et un maximum de rouge. Pixel rose peut être formé en utilisant une combinaison de trois couleurs. En utilisant une plage numérique de 0 à 255, un pixel rose est défini comme Rouge = 255, Vert = 192 и Bleu = 203.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Cet article a été publié avec le soutien d'EDISON.

Nous développons applications pour la vidéosurveillance, le streaming vidéo, et nous sommes également engagés enregistrement vidéo dans la salle d'opération.

Méthodes alternatives pour encoder une image couleur

Il existe de nombreux autres modèles pour représenter les couleurs qui composent une image. Par exemple, vous pouvez utiliser une palette indexée, qui ne nécessite qu'un seul octet pour représenter chaque pixel, au lieu des trois requis lors de l'utilisation du modèle RVB. Dans un tel modèle, il est possible d'utiliser une matrice 2D au lieu d'une matrice 3D pour représenter chaque couleur. Cela économise de la mémoire, mais donne une gamme de couleurs plus petite.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

RGB

Par exemple, jetez un œil à cette image ci-dessous. La première face est entièrement peinte. Les autres sont les plans rouge, vert et bleu (les intensités des couleurs correspondantes sont indiquées en niveaux de gris).

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Nous voyons que les nuances de rouge de l’original seront aux mêmes endroits où l’on observe les parties les plus brillantes de la deuxième face. Alors que la contribution du bleu n'est principalement visible que dans les yeux de Mario (dernier visage) et dans certains éléments de ses vêtements. Remarquez où les trois plans de couleurs contribuent le moins (les parties les plus sombres des images) : la moustache de Mario.

Pour stocker l'intensité de chaque couleur, un certain nombre de bits est nécessaire - cette quantité est appelée peu profond. Disons que 8 bits sont dépensés (sur la base d'une valeur de 0 à 255) par plan de couleur. Nous avons ensuite une profondeur de couleur de 24 bits (8 bits * 3 plans R/G/B).

Une autre propriété d'une image est résolution, qui est le nombre de pixels dans une dimension. Souvent désigné comme largeur × hauteur, comme dans l'exemple d'image 4 par 4 ci-dessous.
Comment fonctionne un codec vidéo ? Partie 1 : Bases

Une autre propriété que nous traitons lorsque nous travaillons avec des images/vidéos est ratio d'aspect, décrivant la relation proportionnelle normale entre la largeur et la hauteur d'une image ou d'un pixel.

Lorsqu'ils disent qu'un certain film ou une certaine image mesure 16 x 9, ils veulent généralement dire rapport hauteur/largeur d'affichage (MAIS - à partir de Afficher le rapport hauteur / largeur). Cependant, il peut parfois y avoir différentes formes de pixels individuels - dans ce cas, nous parlons de rapport de pixels (PAR - à partir de Pixel aspect ratio).

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Note à l'hôtesse : DVD match DAR 4 à 3

Bien que la résolution réelle du DVD soit de 704x480, elle conserve toujours un rapport hauteur/largeur de 4:3 car le PAR est de 10:11 (704x10 / 480x11).

Et enfin, nous pouvons déterminer vidéo comme une séquence de n cadres pour la période temps, qui peut être considérée comme une dimension supplémentaire. UN n est alors la fréquence d'images ou le nombre d'images par seconde (Images/seconde - à partir de Images par seconde).

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Le nombre de bits par seconde requis pour afficher une vidéo est son vitesse de transmission - débit.

débit = largeur * hauteur * profondeur de bits * images par seconde

Par exemple, une vidéo de 30 ips, 24 bps, 480x240 nécessiterait 82,944,000 82,944 30 bps ou 480 240 Mbps (24xXNUMXxXNUMXxXNUMX) - mais c'est si aucune méthode de compression n'est utilisée.

Si la vitesse de transfert presque constant, alors on l'appelle vitesse de transmission constante (CBR - à partir de Débit constant). Mais cela peut aussi varier, dans ce cas on l'appelle débit en bauds variable (VBR - à partir de débit binaire variable).

Ce graphique montre un VBR limité, où peu de bits sont gaspillés dans le cas d'une image complètement sombre.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Les ingénieurs ont initialement développé une méthode permettant de doubler la fréquence d'images perçue d'un affichage vidéo sans utiliser de bande passante supplémentaire. Cette méthode est connue sous le nom vidéo entrelacée; Fondamentalement, il envoie la moitié de l'écran dans la première "image" et l'autre moitié dans la "image" suivante.

Actuellement, les scènes sont principalement rendues en utilisant technologies de numérisation progressive. Il s'agit d'une méthode d'affichage, de stockage ou de transmission d'images animées dans laquelle toutes les lignes de chaque image sont tracées séquentiellement.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Bien! Nous savons désormais comment une image est représentée numériquement, comment ses couleurs sont disposées, combien de bits par seconde nous dépensons pour afficher la vidéo, si le débit binaire est constant (CBR) ou variable (VBR). Nous connaissons une résolution donnée utilisant une fréquence d'images donnée, nous connaissons de nombreux autres termes, tels que vidéo entrelacée, PAR et quelques autres.

Suppression de la redondance

On sait que la vidéo sans compression ne peut pas être utilisée normalement. Une vidéo d'une heure à une résolution de 720p et à 30 images par seconde occuperait 278 Go. On arrive à cette valeur en multipliant 1280 x 720 x 24 x 30 x 3600 (largeur, hauteur, bits par pixel, FPS et temps en secondes).

l'utilisation de algorithmes de compression sans perte, comme DEFLATE (utilisé dans PKZIP, Gzip et PNG), ne réduira pas suffisamment la bande passante requise. Nous devons chercher d'autres moyens de compresser la vidéo.

Pour ce faire, vous pouvez utiliser les fonctionnalités de notre vision. Nous distinguons mieux la luminosité que la couleur. Une vidéo est une série d’images séquentielles qui se répètent dans le temps. Il existe de légères différences entre les images adjacentes d’une même scène. De plus, chaque image contient de nombreuses zones utilisant la même couleur (ou similaire).

La couleur, la luminosité et nos yeux

Nos yeux sont plus sensibles à la luminosité qu'à la couleur. Vous pouvez le constater par vous-même en regardant cette photo.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Si vous ne voyez pas que sur la moitié gauche de l'image les couleurs des carrés A и B sont en fait les mêmes, alors c'est normal. Notre cerveau nous oblige à accorder plus d’attention à la lumière et à l’ombre qu’à la couleur. Sur le côté droit, entre les carrés désignés, il y a un cavalier de la même couleur - nous (c'est-à-dire notre cerveau) déterminons donc facilement qu'en fait, ils sont de la même couleur.

Regardons (de manière simplifiée) le fonctionnement de nos yeux. L’œil est un organe complexe composé de nombreuses parties. Cependant, ce sont les cônes et les bâtonnets qui nous intéressent le plus. L'œil contient environ 120 millions de bâtonnets et 6 millions de cônes.

Considérons la perception de la couleur et de la luminosité comme des fonctions distinctes de certaines parties de l'œil (en fait, tout est un peu plus compliqué, mais nous allons le simplifier). Les cellules en bâtonnets sont principalement responsables de la luminosité, tandis que les cellules en cônes sont responsables de la couleur. Les cônes sont divisés en trois types, selon le pigment qu'ils contiennent : les cônes S (bleus), les cônes M (verts) et les cônes L (rouges).

Puisque nous avons beaucoup plus de bâtonnets (luminosité) que de cônes (couleur), nous pouvons conclure que nous sommes plus capables de distinguer les transitions entre l'obscurité et la lumière que les couleurs.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Fonctions de sensibilité au contraste

Les chercheurs en psychologie expérimentale et dans de nombreux autres domaines ont développé de nombreuses théories sur la vision humaine. Et l'un d'eux s'appelle fonctions de sensibilité au contraste. Ils sont liés à l’éclairage spatial et temporel. En bref, il s’agit du nombre de changements nécessaires avant qu’un observateur ne les remarque. Notez le pluriel du mot « fonction ». Cela est dû au fait que nous pouvons mesurer les fonctions de sensibilité au contraste non seulement pour les images en noir et blanc, mais également pour les images en couleur. Les résultats de ces expériences montrent que dans la plupart des cas nos yeux sont plus sensibles à la luminosité qu'à la couleur.

Puisque nous savons que nous sommes plus sensibles à la luminosité de l’image, nous pouvons essayer d’utiliser ce fait.

Modèle de couleur

Nous avons compris un peu comment travailler avec des images couleur en utilisant le schéma RVB. Il existe également d'autres modèles. Il existe un modèle qui sépare la luminance de la chrominance et il est connu sous le nom de YCbCr. À propos, il existe d'autres modèles qui font une division similaire, mais nous ne considérerons que celui-ci.

Dans ce modèle de couleur Y est une représentation de la luminosité et utilise également deux canaux de couleur : Cb (bleu riche) et Cr (rouge riche). YCbCr peut être dérivé de RVB et la conversion inverse est également possible. En utilisant ce modèle, nous pouvons créer des images en couleur comme nous le voyons ci-dessous :

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Convertir entre YCbCr et RVB

Quelqu'un objectera : comment peut-on obtenir toutes les couleurs si l'on n'utilise pas le vert ?

Pour répondre à cette question, convertissons RVB en YCbCr. Utilisons les coefficients adoptés dans la norme BT.601, ce qui a été recommandé par l'unité UIT-R. Cette division établit les normes en matière de vidéo numérique. Par exemple : qu’est-ce que la 4K ? Quels devraient être la fréquence d'images, la résolution et le modèle de couleur ?

Calculons d’abord la luminosité. Utilisons les constantes proposées par l'UIT et remplaçons les valeurs RVB.

Y = 0.299R + 0.587G + 0.114B

Après avoir obtenu la luminosité, nous séparerons les couleurs bleues et rouges :

Cb = 0.564 XNUMX(B - Y)

Cr = 0.713 XNUMX(R - Y)

Et nous pouvons également reconvertir et même devenir vert en utilisant YCbCr :

R = Y + 1.402Cr

B = Y + 1.772Cb

G = Y - 0.344Cb - 0.714Cr

Généralement, les écrans (moniteurs, téléviseurs, écrans, etc.) utilisent uniquement le modèle RVB. Mais ce modèle peut être organisé de différentes manières :

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Sous-échantillonnage de couleurs

Avec une image représentée comme une combinaison de luminance et de chrominance, nous pouvons exploiter la plus grande sensibilité du système visuel humain à la luminance qu'à la chrominance en supprimant sélectivement les informations. Le sous-échantillonnage de chrominance est une méthode de codage d'images utilisant moins de résolution pour la chrominance que pour la luminance.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Dans quelle mesure est-il permis de réduire la résolution des couleurs ?! Il s'avère qu'il existe déjà des diagrammes décrivant comment gérer la résolution et la fusion (Resulting Color = Y + Cb + Cr).

Ces régimes sont connus sous le nom de systèmes de sous-échantillonnage et sont exprimés sous la forme d'un rapport de 3 - a:x:y, qui détermine le nombre d'échantillons de signaux de luminance et de différence de couleur.

a — étalon d'échantillonnage horizontal (généralement égal à 4)
x — nombre d'échantillons de chrominance dans la première rangée de pixels (résolution horizontale par rapport à a)
y — le nombre de changements dans les échantillons de chrominance entre la première et la deuxième rangée de pixels.

L'exception est 4:1:0, fournissant un échantillon de chrominance dans chaque bloc de résolution de luminance 4 x 4.

Schémas courants utilisés dans les codecs modernes :

  • 4:4:4 (pas de sous-échantillonnage)
  • 4:2:2
  • 4:1:1
  • 4:2:0
  • 4:1:0
  • 3:1:1

YCbCr 4:2:0 - exemple de fusion

Voici une image fusionnée utilisant YCbCr 4:2:0. Notez que nous ne dépensons que 12 bits par pixel.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Voici à quoi ressemble la même image, codée avec les principaux types de sous-échantillonnage de couleurs. La première ligne est le YCbCr final, la ligne du bas montre la résolution chromatique. Des résultats très corrects, compte tenu de la légère perte de qualité.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Vous vous souvenez de l'époque où nous comptions 278 Go d'espace de stockage pour stocker un fichier vidéo d'une heure à une résolution de 720p et à 30 images par seconde ? Si nous utilisons YCbCr 4:2:0, cette taille sera réduite de moitié - 139 Go. Jusqu’à présent, ce résultat est encore loin d’être acceptable.

Vous pouvez obtenir vous-même l'histogramme YCbCr en utilisant FFmpeg. Sur cette image, le bleu domine le rouge, ce qui est clairement visible dans l'histogramme lui-même.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Couleur, luminosité, gamme de couleurs - revue vidéo

Nous vous recommandons de regarder cette superbe vidéo. Il explique ce qu'est la luminosité, et en général tous les points sont en pointillés ё sur la luminosité et la couleur.

Types de cadres

Allons-nous en. Essayons d'éliminer la redondance temporelle. Mais d’abord, définissons une terminologie de base. Disons que nous avons un film à 30 images par seconde, voici ses 4 premières images :

Comment fonctionne un codec vidéo ? Partie 1 : Bases Comment fonctionne un codec vidéo ? Partie 1 : Bases Comment fonctionne un codec vidéo ? Partie 1 : Bases Comment fonctionne un codec vidéo ? Partie 1 : Bases

On peut voir beaucoup de répétitions dans les frames : par exemple, un fond bleu qui ne change pas d'une frame à l'autre. Pour résoudre ce problème, nous pouvons les classer abstraitement en trois types de trames.

I-frame (Icadre d'introduction)

L’image I (image de référence, image clé, image intérieure) est autonome. Indépendamment de ce que vous souhaitez visualiser, un I-frame est essentiellement une photographie statique. La première image est généralement une image I, mais nous observerons régulièrement des images I même parmi les images qui ne sont pas les premières.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Cadre P (PCadre repensé)

La P-frame (predictive frame) profite du fait que presque toujours l’image actuelle peut être reproduite en utilisant l’image précédente. Par exemple, dans la deuxième image, le seul changement est que le ballon avance. On peut obtenir l'image 2 en modifiant simplement légèrement l'image 1, en utilisant uniquement la différence entre ces images. Pour construire le cadre 2, nous nous référons au cadre 1 précédent.

Comment fonctionne un codec vidéo ? Partie 1 : BasesComment fonctionne un codec vidéo ? Partie 1 : Bases

Cadre B (Bi-cadre prédictif)

Qu’en est-il des liens non seulement vers les images passées, mais aussi vers les images futures pour fournir une compression encore meilleure ?! Il s'agit essentiellement d'un cadre B (cadre bidirectionnel).

Comment fonctionne un codec vidéo ? Partie 1 : BasesComment fonctionne un codec vidéo ? Partie 1 : BasesComment fonctionne un codec vidéo ? Partie 1 : Bases

Retrait intermédiaire

Ces types de trames sont utilisés pour fournir la meilleure compression possible. Nous verrons comment cela se produit dans la section suivante. Pour l'instant, notons que la plus « chère » en termes de mémoire consommée est la I-frame, la P-frame est sensiblement moins chère, mais l'option la plus rentable pour la vidéo est la B-frame.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Redondance temporelle (prédiction inter-trames)

Examinons les options dont nous disposons pour minimiser les répétitions au fil du temps. Nous pouvons résoudre ce type de redondance en utilisant des méthodes de prédiction croisée.

Nous allons essayer de dépenser le moins de bits possible pour coder une séquence de trames 0 et 1.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Nous pouvons produire soustraction, nous soustrayons simplement l'image 1 de l'image 0. Nous obtenons l'image 1, n'utilisons que la différence entre elle et l'image précédente, en fait nous ne codons que le reste résultant.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Mais et si je vous disais qu’il existe une méthode encore meilleure qui utilise encore moins de bits ?! Tout d’abord, décomposons l’image 0 en une grille claire composée de blocs. Et puis nous essaierons de faire correspondre les blocs de l’image 0 avec l’image 1. En d’autres termes, nous estimerons le mouvement entre les images.

De Wikipédia - compensation de mouvement de blocage

La compensation de mouvement par bloc divise l'image actuelle en blocs qui ne se chevauchent pas et le vecteur de compensation de mouvement indique l'origine des blocs (une idée fausse courante est que предыдущий le cadre est divisé en blocs qui ne se chevauchent pas et les vecteurs de compensation de mouvement indiquent où vont ces blocs. Mais en fait, c'est l'inverse : ce n'est pas l'image précédente qui est analysée, mais la suivante ; on ne sait pas où se déplacent les blocs, mais d'où ils viennent). Généralement, les blocs sources se chevauchent dans la trame source. Certains algorithmes de compression vidéo assemblent l'image actuelle à partir de parties non pas d'une, mais de plusieurs images précédemment transmises.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Au cours du processus d'évaluation, nous constatons que la balle s'est déplacée de (x= 0, y=25) à (x= 6, y=26), valeurs x и y déterminer le vecteur de mouvement. Une autre étape que nous pouvons faire pour préserver les bits consiste à coder uniquement la différence des vecteurs de mouvement entre la dernière position du bloc et celle prédite, de sorte que le vecteur de mouvement final sera (x=6-0=6, y=26-25=1 ).

Dans une situation réelle, cette boule serait divisée en n blocs, mais cela ne change pas le fond du problème.

Les objets dans le cadre se déplacent en trois dimensions, donc lorsque la balle bouge, elle peut devenir visuellement plus petite (ou plus grande si elle se dirige vers le spectateur). Il est normal qu’il n’y ait pas une correspondance parfaite entre les blocs. Voici une vue combinée de notre estimation et de l’image réelle.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Mais nous constatons que lorsque nous utilisons l'estimation de mouvement, il y a sensiblement moins de données à coder que lorsque nous utilisons une méthode plus simple de calcul du delta entre les images.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

À quoi ressemblerait une véritable compensation de mouvement

Cette technique est appliquée à tous les blocs à la fois. Souvent, notre boule en mouvement conditionnel sera divisée en plusieurs blocs à la fois.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Vous pouvez vous faire une idée de ces concepts en utilisant Jupiter.

Pour voir les vecteurs de mouvement, vous pouvez créer une vidéo de prédiction externe à l'aide de ffmpeg.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Vous pouvez aussi utiliser Analyseur Intel Video Pro (c'est payant, mais il existe un essai gratuit limité aux dix premières images uniquement).

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Redondance spatiale (prévision interne)

Si nous analysons chaque image d’une vidéo, nous trouverons de nombreuses zones interconnectées.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Passons en revue cet exemple. Cette scène se compose principalement de couleurs bleues et blanches.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Il s'agit d'un cadre I. Nous ne pouvons pas prendre les images précédentes pour la prédiction, mais nous pouvons les compresser. Codons la sélection du bloc rouge. Si l’on regarde ses voisins, on remarque qu’il y a quelques tendances de couleurs autour d’elle.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Nous supposons que les couleurs se répartissent verticalement dans le cadre. Ce qui signifie que la couleur des pixels inconnus contiendra les valeurs de ses voisins.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Une telle prévision pourrait s’avérer erronée. C'est pour cette raison qu'il faut appliquer cette méthode (prévision interne), puis soustraire les valeurs réelles. Cela nous donnera un bloc résiduel, ce qui donnera une matrice beaucoup plus compressée par rapport à l'originale.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Si vous souhaitez vous entraîner avec les prédictions internes, vous pouvez créer une vidéo des macroblocs et de leurs prédictions à l'aide de ffmpeg. Pour comprendre la signification de chaque couleur de bloc, vous devrez lire la documentation ffmpeg.

Comment fonctionne un codec vidéo ? Partie 1 : Bases

Ou vous pouvez utiliser Intel Video Pro Analyzer (comme je l'ai mentionné ci-dessus, la version d'essai gratuite est limitée aux 10 premières images, mais cela vous suffira au début).

Comment fonctionne un codec vidéo ? Partie 1 : Bases

La deuxième partie: Comment fonctionne le codec vidéo

Source: habr.com

Ajouter un commentaire