{"id":54312,"date":"2019-12-23T00:00:00","date_gmt":"2019-12-22T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-rabotaet-videokodek-chast-1-osnovy"},"modified":"2020-02-18T14:02:18","modified_gmt":"2020-02-18T11:02:18","slug":"kak-rabotaet-videokodek-chast-1-osnovy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","title":{"rendered":"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Deuxi\u00e8me partie :<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principes de fonctionnement du codec vid\u00e9o<\/a><\/noindex><\/h3>\n<p>Toute image raster <b>peut \u00eatre repr\u00e9sent\u00e9e sous la forme<\/b> d'une matrice bidimensionnelle <b>. Lorsqu'on parle de couleurs, l'id\u00e9e peut \u00eatre d\u00e9velopp\u00e9e en consid\u00e9rant l'image comme une<\/b>matrice tridimensionnelle <b>, dans laquelle des dimensions suppl\u00e9mentaires sont utilis\u00e9es pour stocker les donn\u00e9es de chaque couleur.<\/b>Si l'on consid\u00e8re la couleur finale comme une combinaison des soi-disant couleurs primaires (rouge, vert et bleu), dans notre matrice tridimensionnelle, nous d\u00e9finissons trois plans : le premier pour la couleur rouge, le deuxi\u00e8me pour le vert et le dernier pour le bleu.<\/p>\n<p>Nous appellerons chaque point de cette matrice un pixel (\u00e9l\u00e9ment de l'image). Chaque pixel contient des informations sur l'intensit\u00e9 (g\u00e9n\u00e9ralement sous forme de valeur num\u00e9rique) de chaque couleur. Par exemple,<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\"><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/ce37dd683a4c3ed434dae1d488646716.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\nun pixel rouge <b>signifie qu'il n'y a 0 vert, 0 bleu et un maximum de rouge.<\/b> Un pixel rose <b>peut \u00eatre form\u00e9 \u00e0 l'aide d'une combinaison des trois couleurs. En utilisant une plage num\u00e9rique de 0 \u00e0 255, un pixel rose est d\u00e9fini comme<\/b> Rouge = 255 <b>Vert = 192<\/b>, <b>Bleu = 203<\/b> et <b>Cet article est publi\u00e9 avec le soutien de la soci\u00e9t\u00e9 EDISON.<\/b>.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/\" title=\"EDISON Software - d\u00e9veloppement web\"><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/e5063b9a32248767cb0702e7aa2e7f9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br clear=\"right\"><br \/>\nNous d\u00e9veloppons<\/p>\n<p>des applications pour la surveillance vid\u00e9o, la vid\u00e9o en streaming <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/ru\/portfolio\/tehnologiya\/video\">, ainsi que nous occupons de<\/a><\/noindex>l'enregistrement vid\u00e9o en salle d'op\u00e9ration <noindex><a rel=\"nofollow\" href=\"https:\/\/www.edsd.ru\/videozapis-v-bolnichnoj-operacionnoj-s-vozmozhnostyu-obsuzhdeniya-na-forume\">M\u00e9thodes alternatives de codage d'image couleur<\/a><\/noindex>.<\/p><\/blockquote>\n<h3>Pour repr\u00e9senter les couleurs qui composent l'image, il existe de nombreux autres mod\u00e8les. Par exemple, on peut utiliser une palette index\u00e9e, o\u00f9 un seul octet est n\u00e9cessaire pour repr\u00e9senter chaque pixel, au lieu de trois requis par le mod\u00e8le RGB. Dans ce mod\u00e8le, on peut utiliser une matrice 2D au lieu d'une matrice 3D pour repr\u00e9senter chaque couleur. Cela \u00e9conomise de la m\u00e9moire, mais offre une gamme de couleurs plus limit\u00e9e.<\/h3>\n<p>\nRGB<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/573a39c53527b4ec0403f019becf2d22.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Prenez par exemple cette image ci-dessous. Le premier visage est enti\u00e8rement color\u00e9. Les autres sont les plans rouge, vert et bleu (l'intensit\u00e9 des couleurs correspondantes est montr\u00e9e en niveaux de gris).<\/h2>\n<p>Par exemple, regardez cette image ci-dessous. Le premier visage est enti\u00e8rement color\u00e9. Les autres sont des plans rouge, vert et bleu (l'intensit\u00e9 des couleurs correspondantes est indiqu\u00e9e par une \u00e9chelle de gris).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/cf1f802d4381e062005490f5f9f26911.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOn remarque que les nuances de rouge dans l'original se situent aux m\u00eames endroits que les parties les plus vives du deuxi\u00e8me visage. Bien que la contribution de la couleur bleue ne soit principalement visible que dans les yeux de Mario (le dernier visage) et dans les \u00e9l\u00e9ments de ses v\u00eatements. Notez o\u00f9 les trois plans de couleur apportent la moindre contribution (les parties les plus sombres des images) \u2014 ce sont les moustaches de Mario.<\/p>\n<p>Pour stocker l'intensit\u00e9 de chaque couleur, un certain nombre de bits est n\u00e9cessaire \u2014 cette mesure est appel\u00e9e <b>profondeur de couleur<\/b>. Supposons que 8 bits (sur une \u00e9chelle de 0 \u00e0 255) sont d\u00e9pens\u00e9s pour un plan de couleur. Nous avons alors une profondeur de couleur de 24 bits (8 bits * 3 plans R\/G\/B).<\/p>\n<p>Une autre propri\u00e9t\u00e9 de l'image est <b>la r\u00e9solution<\/b>, qui repr\u00e9sente le nombre de pixels dans une dimension. Elle est souvent indiqu\u00e9e comme <b>largeur \u00d7 hauteur<\/b>, comme dans l'exemple d'image 4 par 4 ci-dessous.<br \/>\n<img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/51a4d948e6d44e4058e346fdbaf9d6c2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUne autre propri\u00e9t\u00e9 \u00e0 laquelle nous faisons face lors du travail avec des images\/vid\u00e9os est <b>le rapport d'aspect<\/b>, qui d\u00e9crit la relation proportionnelle habituelle entre la largeur et la hauteur de l'image ou du pixel.<\/p>\n<p>Lorsqu'on dit qu'un film ou une image a une taille de 16 sur 9, il s'agit g\u00e9n\u00e9ralement du <b>rapport d'aspect de l'\u00e9cran<\/b> (<b>DAR<\/b> \u2014 de <i>Display Aspect Ratio<\/i>). Cependant, il peut parfois y avoir diff\u00e9rentes formes de pixels individuels \u2014 dans ce cas, on parle de <b>rapport de pixels<\/b> (<b>PAR<\/b> \u2014 de <i>Pixel Aspect Ratio<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/1158c6e98247a1a1084440969f9400c6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/a610f0f77bdb245c05799d3de4147302.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>\u00c0 noter pour la ma\u00eetresse de maison : <b>DVD<\/b> correspond \u00e0 <b>DAR 4 sur 3<\/b><\/p>\n<p>Bien que la r\u00e9solution r\u00e9elle d'un DVD soit de 704\u00d7480, celle-ci conserve un format d'image 4:3, car le PAR est de 10:11 (704\u00d710 \/ 480\u00d711).<\/p><\/blockquote>\n<p>\nEnfin, nous pouvons d\u00e9finir <b>vid\u00e9o<\/b> comme une s\u00e9quence de <b>n<\/b> frames sur une p\u00e9riode <b>de temps<\/b>, qui peut \u00eatre consid\u00e9r\u00e9e comme une dimension suppl\u00e9mentaire. Et <b>n<\/b> alors \u2014 il s'agit de la fr\u00e9quence d'images ou du nombre d'images par seconde (<b>FPS<\/b> \u2014 de <i>Frames per Second<\/i>).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/f940932bbd66aa361c7966f8b44ed431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe nombre de bits par seconde n\u00e9cessaire pour afficher la vid\u00e9o est sa <b>d\u00e9bit<\/b> \u2014 <b>bitrate<\/b>.<\/p>\n<blockquote><p>bitrate = largeur * hauteur * profondeur de bits * images par seconde<\/p><\/blockquote>\n<p>\nPar exemple, pour une vid\u00e9o \u00e0 30 images par seconde, avec 24 bits par pixel, une r\u00e9solution de 480\u00d7240 n\u00e9cessiterait 82 944 000 bits par seconde ou 82,944 Mbit\/s (30x480x240x24) \u2014 mais cela, sans utiliser aucune m\u00e9thode de compression.<\/p>\n<p>Si le d\u00e9bit <i>est presque constant<\/i>, on l'appelle <b>d\u00e9bit constant<\/b> (<b>CBR<\/b> \u2014 de <i>constant bit rate<\/i>). Mais il peut aussi varier, dans ce cas, on parle de <b>d\u00e9bit variable<\/b> (<b>DBR<\/b> \u2014 de <i>d\u00e9bit binaire variable<\/i>).<\/p>\n<p>Ce graphique montre le DBR limit\u00e9, o\u00f9 il n'est pas n\u00e9cessaire de d\u00e9penser trop de bits pour une image enti\u00e8rement noire.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/f307dde8da9ef1e017646ebcad0c4062.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c0 l'origine, les ing\u00e9nieurs ont d\u00e9velopp\u00e9 une m\u00e9thode pour doubler la fr\u00e9quence d'image per\u00e7ue des \u00e9crans de vid\u00e9o sans utiliser de bande passante suppl\u00e9mentaire. Cette m\u00e9thode est connue sous le nom de <b>vid\u00e9o entrelac\u00e9e<\/b>; elle envoie principalement la moiti\u00e9 de l'\u00e9cran dans le premier \u00ab cadre \u00bb, et l'autre moiti\u00e9 dans le suivant \u00ab cadre \u00bb.<\/p>\n<p>Actuellement, la visualisation des sc\u00e8nes se fait principalement en utilisant <b>la technologie de balayage progressif<\/b>. Il s'agit d'une m\u00e9thode d'affichage, de stockage ou de transmission d'images en mouvement, o\u00f9 toutes les lignes de chaque cadre sont dessin\u00e9es successivement.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/434afd828d803ec1e4c87a3827c07dde.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEh bien ! Maintenant, nous savons comment une image est repr\u00e9sent\u00e9e num\u00e9riquement, comment ses couleurs sont structur\u00e9es, et combien de bits par seconde sont n\u00e9cessaires pour afficher une vid\u00e9o, que le d\u00e9bit soit constant (CBR) ou variable (DBR). Nous connaissons la r\u00e9solution sp\u00e9cifi\u00e9e avec un taux de rafra\u00eechissement particulier, et nous nous sommes familiaris\u00e9s avec de nombreux autres termes, tels que la vid\u00e9o entrelac\u00e9e, le PAR et quelques autres.<\/p>\n<h2>Suppression de la redondance<\/h2>\n<p>\nIl est bien connu qu'une vid\u00e9o non compress\u00e9e est pratiquement inutilisable. Une vid\u00e9o d'une heure avec une r\u00e9solution de 720p et 30 images par seconde occuperait 278 Go. Nous arrivons \u00e0 ce chiffre en multipliant 1280 x 720 x 24 x 30 x 3600 (largeur, hauteur, bits par pixel, FPS et temps en secondes).<\/p>\n<p>Utilisation <b>algorithmes de compression sans perte<\/b>, comme DEFLATE (utilis\u00e9 dans PKZIP, Gzip et PNG), ne fourniront pas une r\u00e9duction suffisante de la bande passante requise. Il faut donc chercher d'autres m\u00e9thodes de compression vid\u00e9o.<\/p>\n<p>Pour cela, nous pouvons utiliser les particularit\u00e9s de notre vision. Nous pouvons mieux distinguer la luminosit\u00e9 que les couleurs. La vid\u00e9o est un ensemble d'images successives qui se r\u00e9p\u00e8tent dans le temps. Entre deux cadres voisins d'une m\u00eame sc\u00e8ne, les diff\u00e9rences sont minimes. De plus, chaque cadre contient de nombreuses zones utilisant la m\u00eame couleur (ou une couleur similaire).<\/p>\n<h2>Couleur, luminosit\u00e9 et nos yeux<\/h2>\n<p>\nNos yeux sont plus sensibles \u00e0 la luminosit\u00e9 qu'\u00e0 la couleur. Vous pouvez le v\u00e9rifier vous-m\u00eame en regardant cette image.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/bf50b7dfd54ebbdb66556bbf5e304090.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Si vous ne voyez pas ce qu'il y a dans la moiti\u00e9 gauche de l'image en termes de couleur des carr\u00e9s <b>A<\/b> et <b>B<\/b> En r\u00e9alit\u00e9, s'ils sont identiques, c'est tout \u00e0 fait normal. Notre cerveau nous pousse \u00e0 pr\u00eater plus attention \u00e0 la lumi\u00e8re et \u00e0 l'ombre qu'\u00e0 la couleur. Sur le c\u00f4t\u00e9 droit, entre les carr\u00e9s marqu\u00e9s, il y a une barri\u00e8re de la m\u00eame couleur \u2014 c'est pourquoi nous (c'est-\u00e0-dire notre cerveau) pouvons facilement d\u00e9terminer qu'en r\u00e9alit\u00e9, il s'agit de la m\u00eame couleur.<\/p>\n<blockquote><p>Examinons (de mani\u00e8re simplifi\u00e9e) comment fonctionnent nos yeux. L'\u0153il est un organe complexe compos\u00e9 de nombreuses parties. Cependant, ce qui nous int\u00e9resse le plus, ce sont les c\u00f4nes et les b\u00e2tonnets. L'\u0153il contient environ 120 millions de b\u00e2tonnets et 6 millions de c\u00f4nes.<\/p>\n<p>Consid\u00e9rons la perception de la couleur et de la luminosit\u00e9 comme des fonctions distinctes de certaines parties de l'\u0153il (en r\u00e9alit\u00e9, c'est un peu plus complexe, mais nous simplifions). Les cellules de b\u00e2tonnets sont principalement responsables de la luminosit\u00e9, tandis que les cellules de c\u00f4nes sont responsables de la couleur. Les c\u00f4nes sont class\u00e9s en trois types, selon le pigment qu'ils contiennent : les c\u00f4nes S (couleur bleu), les c\u00f4nes M (couleur verte) et les c\u00f4nes L (couleur rouge).<\/p>\n<p>Puisque nous avons beaucoup plus de b\u00e2tonnets (luminosit\u00e9) que de c\u00f4nes (couleur), on peut conclure que nous sommes plus capables de distinguer les transitions entre l'obscurit\u00e9 et la lumi\u00e8re que les couleurs.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/d344365d45e43b36635ce29baa1132b4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Fonctions de la sensibilit\u00e9 au contraste<\/h2>\n<p>\nLes chercheurs en psychologie exp\u00e9rimentale et dans de nombreux autres domaines ont d\u00e9velopp\u00e9 de nombreuses th\u00e9ories sur la vision humaine. Et l'une d'elles est appel\u00e9e <b>fonctions de la sensibilit\u00e9 au contraste<\/b>. Elles sont li\u00e9es \u00e0 l'\u00e9clairage spatial et temporel. En r\u00e9sum\u00e9, cela concerne le nombre de changements n\u00e9cessaires avant que l'observateur ne les remarque. Notez le pluriel du mot \u00ab fonction \u00bb. Cela est d\u00fb au fait que nous pouvons mesurer les fonctions de sensibilit\u00e9 au contraste non seulement pour une image noir et blanc, mais aussi pour des images en couleur. Les r\u00e9sultats de ces exp\u00e9riences montrent que dans la plupart des cas, nos yeux sont plus sensibles \u00e0 la luminosit\u00e9 qu'\u00e0 la couleur.<\/p><\/blockquote>\n<p>Sachant que nous sommes plus sensibles \u00e0 la luminosit\u00e9 de l'image, nous pouvons essayer d'exploiter ce fait.<\/p>\n<h2>Mod\u00e8le colorim\u00e9trique<\/h2>\n<p>\nNous avons un peu explor\u00e9 comment travailler avec des images color\u00e9es en utilisant le sch\u00e9ma RGB. Il existe d'autres mod\u00e8les. Il y a un mod\u00e8le qui s\u00e9pare la luminosit\u00e9 de la chrominance et qui est connu sous le nom de <b>YCbCr<\/b>. Au fait, il existe d'autres mod\u00e8les qui effectuent une s\u00e9paration similaire, mais nous n'allons examiner que celui-ci.<\/p>\n<p>Dans ce mod\u00e8le de couleur <b>Y<\/b> \u2014 c'est la repr\u00e9sentation de la luminance, ainsi que deux canaux de couleur sont utilis\u00e9s : <b>Cb<\/b> (bleu satur\u00e9) et <b>Cr<\/b> (rouge satur\u00e9). YCbCr peut \u00eatre d\u00e9riv\u00e9 de RGB, tout comme il est possible de faire la conversion inverse. En utilisant ce mod\u00e8le, nous pouvons cr\u00e9er des images en couleurs compl\u00e8tes, comme le montre l'exemple ci-dessous :<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/e7458471caf7ef071bb0362e96b44f11.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conversion entre YCbCr et RGB<\/h2>\n<p>\nCertains pourraient objecter : comment est-il possible d'obtenir toutes les couleurs sans utiliser le vert ?<\/p>\n<p>Pour r\u00e9pondre \u00e0 cette question, convertissons RGB en YCbCr. Utilisons les coefficients adopt\u00e9s dans la norme <b>BT.601<\/b>, qui a \u00e9t\u00e9 recommand\u00e9 par la division <b>ITU-R<\/b>. Cette division d\u00e9finit les normes pour la vid\u00e9o num\u00e9rique. Par exemple : qu'est-ce que 4K ? Quelles doivent \u00eatre la fr\u00e9quence d'images, la r\u00e9solution, le mod\u00e8le de couleur ?<\/p>\n<p>Commen\u00e7ons par calculer la luminance. Utilisons les constantes propos\u00e9es par l'ITU et rempla\u00e7ons les valeurs RGB.<\/p>\n<p><b>Y<\/b> = 0.299<b>R<\/b> + 0.587<b>G<\/b> + 0.114<b>B<\/b> <\/p>\n<p>Une fois que nous avons obtenu la luminance, s\u00e9parons les couleurs bleu et rouge :<\/p>\n<p><b>Cb<\/b> = 0.564(<b>B<\/b> \u2014 <b>Y<\/b>)<\/p>\n<p><b>Cr<\/b> = 0.713(<b>R<\/b> \u2014 <b>Y<\/b>) <\/p>\n<p>Et nous pouvons \u00e9galement reconvertir et m\u00eame obtenir le vert en utilisant YCbCr :<\/p>\n<p><b>R<\/b> = <b>Y<\/b> + 1.402<b>Cr<\/b><\/p>\n<p><b>B<\/b> = <b>Y<\/b> + 1.772<b>Cb<\/b><\/p>\n<p><b>G<\/b> = <b>Y<\/b> \u2014 0.344<b>Cb<\/b> \u2014 0.714<b>Cr<\/b><\/p>\n<p>En g\u00e9n\u00e9ral, les affichages (moniteurs, t\u00e9l\u00e9viseurs, \u00e9crans, etc.) n'utilisent que le mod\u00e8le RGB. Mais ce mod\u00e8le peut \u00eatre organis\u00e9 de diff\u00e9rentes mani\u00e8res :<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/8736e59d3a7606494fe6a7718d5b4aa2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Sous-\u00e9chantillonnage des couleurs<\/h2>\n<p>\nAvec l'image repr\u00e9sent\u00e9e sous la forme d'une combinaison de luminance et de chrominance, nous pouvons utiliser la plus grande sensibilit\u00e9 du syst\u00e8me visuel humain \u00e0 la luminance qu'\u00e0 la chrominance en supprimant s\u00e9lectivement des informations. Le sous-\u00e9chantillonnage des couleurs est une m\u00e9thode de codage d'images, utilisant une r\u00e9solution plus faible pour la chrominance que pour la luminance.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/11b5b602ab1374896df296f787932ace.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\u00c0 quel point est-il acceptable de r\u00e9duire la r\u00e9solution de la chrominance ? Apparemment, il existe d\u00e9j\u00e0 certains sch\u00e9mas qui d\u00e9crivent comment traiter la r\u00e9solution et le m\u00e9lange (Couleur finale = Y + Cb + Cr).<\/p>\n<p>Ces sch\u00e9mas sont connus sous le nom de <b>syst\u00e8mes de sous-\u00e9chantillonnage<\/b> et exprim\u00e9s sous la forme d'un rapport 3 \u00e0 1 \u2014 <b>a<\/b>:<b>x<\/b>:<b>y<\/b>, qui d\u00e9finit le nombre d'\u00e9chantillons de luminance et de signaux de chrominance.<\/p>\n<p><b>a<\/b> \u2014 l'\u00e9chantillonnage horizontal de r\u00e9f\u00e9rence (g\u00e9n\u00e9ralement \u00e9gal \u00e0 4)<br \/>\n<b>x<\/b> \u2014 le nombre d'\u00e9chantillons de chrominance dans la premi\u00e8re ligne de pixels (r\u00e9solution horizontale par rapport \u00e0 <b>a<\/b>)<br \/>\n<b>y<\/b> \u2014 le nombre de changements d'\u00e9chantillons de chrominance entre la premi\u00e8re et la deuxi\u00e8me ligne de pixels.<\/p>\n<blockquote><p>L'exception est <b>4<\/b>:<b>1<\/b>:<b>0<\/b>, fournissant un \u00e9chantillon de chrominance dans chaque bloc de r\u00e9solution de luminance de 4 sur 4.<\/p><\/blockquote>\n<p>Sch\u00e9mas g\u00e9n\u00e9raux utilis\u00e9s dans les codecs modernes :<\/p>\n<ul>\n<li><b>4<\/b>:<b>4<\/b>:<b>4<\/b> (sans sous-\u00e9chantillonnage)<\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>2<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<li><b>4<\/b>:<b>2<\/b>:<b>0<\/b><\/li>\n<li><b>4<\/b>:<b>1<\/b>:<b>0<\/b><\/li>\n<li><b>3<\/b>:<b>1<\/b>:<b>1<\/b><\/li>\n<\/ul>\n<blockquote>\n<h3>YCbCr 4:2:0 \u2014 exemple de fusion<\/h3>\n<p>\nVoici un fragment d'image fusionn\u00e9 en utilisant YCbCr 4:2:0. Remarquez que nous ne d\u00e9pensons que 12 bits par pixel.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/67e288b0a46fca88452addaef736f4cd.png\" style=\"display:block;margin: 0 auto;\" \/><\/p><\/blockquote>\n<p>Voici \u00e0 quoi ressemble la m\u00eame image, encod\u00e9e selon les principaux types de sous-\u00e9chantillonnage chromatique. La premi\u00e8re rang\u00e9e est le YCbCr final, la rang\u00e9e inf\u00e9rieure montre la r\u00e9solution de chrominance. Des r\u00e9sultats assez satisfaisants, compte tenu des pertes de qualit\u00e9 minimes.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/fb54b6fcdbbb63cb19d19b89df9f6d85.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRappelez-vous, nous avons estim\u00e9 278 Go d'espace disque pour stocker une vid\u00e9o d'une heure en r\u00e9solution 720p \u00e0 30 images par seconde ? En utilisant YCbCr 4:2:0, cette taille sera r\u00e9duite de moiti\u00e9 \u2014 139 Go. Jusqu'\u00e0 pr\u00e9sent, nous sommes encore loin d'un r\u00e9sultat acceptable.<\/p>\n<p>Vous pouvez obtenir vous-m\u00eame l'histogramme YCbCr \u00e0 l'aide de FFmpeg. Dans cette image, le bleu pr\u00e9domine sur le rouge, comme le montre clairement l'histogramme.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/6e74cb646cabc77079aea7eaee846fd1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote>\n<h4>Chrominance, luminance, gamme de couleurs \u2014 vid\u00e9o explicative<\/h4>\n<p>\nIl est recommand\u00e9 de visionner cette vid\u00e9o impressionnante. Elle explique ce qu'est la luminance et clarifie le tout. <i>\u00e0 propos de la luminance et de la couleur.<\/i> Types de trames<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"Ymt47wXUDEU\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Ymt47wXUDEU\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p><\/blockquote>\n<h2>Passons \u00e0 la suite. Essayons d'\u00e9liminer la redondance temporelle. Mais d'abord, d\u00e9finissons quelques terminologies de base. Supposons que nous avons un film avec 30 images par seconde, voici les quatre premi\u00e8res images :<\/h2>\n<p>\nNous pouvons voir beaucoup de r\u00e9p\u00e9titions dans les images : par exemple, un fond bleu qui ne change pas d'une image \u00e0 l'autre. Pour r\u00e9soudre ce probl\u00e8me, nous pouvons classifier abstraitement ces images en trois types de trames.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/103dc714d756d014e1d2c1bfb33751b1.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/fdd7d89b884b2f77fea7c386c0d29fef.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/61746b829025d5abcb7db072a54400c0.png\" style=\"display:block;margin: 0 auto;\" \/> <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/c65ee526ec4539996f6bb94463d0cf2d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTrame I (<\/p>\n<h3>ntro Frame)<b>I<\/b>La trame I (trame de r\u00e9f\u00e9rence, trame cl\u00e9, trame interne) est autonome. Peu importe ce qu'il faut visualiser, la trame I est, en essence, une photo statique. La premi\u00e8re trame est g\u00e9n\u00e9ralement une trame I, mais nous observerons r\u00e9guli\u00e8rement des trames I m\u00eame parmi celles qui ne sont pas les premi\u00e8res.<\/h3>\n<p>\nTrame P (<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/44f2a7d6154f1a40fdb1174a443a9c3f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>P<b>redicted Frame)<\/b>La trame P (trame pr\u00e9dictive) utilise l'avantage du fait que l'image actuelle peut presque toujours \u00eatre reproduite en utilisant la trame pr\u00e9c\u00e9dente. Par exemple, dans la deuxi\u00e8me image, le seul changement est la balle qui avance. Nous pouvons obtenir la trame 2 simplement en modifiant l\u00e9g\u00e8rement la trame 1, en utilisant uniquement la diff\u00e9rence entre ces trames. Pour construire la trame 2, nous nous r\u00e9f\u00e9rons \u00e0 la trame pr\u00e9c\u00e9dente, la trame 1.<\/h3>\n<p>\nLe P-Image (image pr\u00e9dictive) tire parti du fait que presque toujours l'image actuelle peut \u00eatre reproduite en utilisant l'image pr\u00e9c\u00e9dente. Par exemple, dans la deuxi\u00e8me image, le seul changement est le ballon qui avance. Nous pouvons obtenir l'image 2 en modifiant l\u00e9g\u00e8rement l'image 1, en utilisant simplement la diff\u00e9rence entre ces images. Pour construire l'image 2, nous nous r\u00e9f\u00e9rons \u00e0 l'image pr\u00e9c\u00e9dente, l'image 1.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/1245857fd8406a24da02d0c71beb7b4d.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/ab8e8f6020825830c4d03004528af1a4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Image B (<b>B<\/b>i-pr\u00e9dictif Frame)<\/h3>\n<p>\nQue diriez-vous des liens non seulement vers les images pass\u00e9es, mais aussi vers les images futures, afin d'assurer un meilleur compression ? C\u2019est essentiellement ce qu\u2019on appelle un image B (image bidirectionnelle).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/f28d4e02836e9b37f0f21937dd1ba660.png\" style=\"display:block;margin: 0 auto;\" \/> \u2190 <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/7a6b3a329db155c94a91f58a99874bb9.png\" style=\"display:block;margin: 0 auto;\" \/> \u2192 <img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/09df4bc5a35df89575c7b51349be4340.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Sortie interm\u00e9diaire<\/h2>\n<p>\nCes types d'images sont utilis\u00e9s pour assurer la meilleure compression. Nous examinerons comment cela fonctionne dans la prochaine section. En attendant, notons que l'image la plus 'co\u00fbteuse' en m\u00e9moire est l'image I, alors que l'image P co\u00fbte beaucoup moins cher ; l'image B est en r\u00e9alit\u00e9 la plus avantageuse pour la vid\u00e9o.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/97b9177ffff302881deb1c86ce416166.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redondance temporelle (pr\u00e9diction inter-image)<\/h2>\n<p>\nExaminons les possibilit\u00e9s de minimiser les r\u00e9p\u00e9titions temporelles. Ce type de redondance sera trait\u00e9 au moyen de m\u00e9thodes de pr\u00e9diction mutuelle.<\/p>\n<p>Nous allons essayer de d\u00e9penser le moins de bits possible pour encoder la s\u00e9quence d'images 0 et 1.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/f0dc2df33a5297622a77a4ca09b19af8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous pouvons proc\u00e9der \u00e0 <b>la soustraction<\/b>, il suffit de soustraire l'image 1 de l'image 0. Nous obtenons l'image 1 en utilisant seulement la diff\u00e9rence entre elle et l'image pr\u00e9c\u00e9dente, en codant en fait uniquement le reste obtenu.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/c14981c3a3a0459a02620805c4a0f2db.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMais que diriez-vous si je vous disais qu'il existe une m\u00e9thode encore meilleure, qui utilise encore moins de bits ? D'abord, d\u00e9composons l'image 0 en une grille pr\u00e9cise, compos\u00e9e de blocs. Ensuite, essayons de faire correspondre les blocs de l'image 0 avec ceux de l'image 1. En d'autres termes, \u00e9valuons le mouvement entre les images.<\/p>\n<blockquote><p> D'apr\u00e8s Wikip\u00e9dia - <b>compensation de mouvement par blocs<\/b><\/p>\n<p>La compensation de mouvement par blocs divise l'image actuelle en blocs non se chevauchant et le vecteur de compensation de mouvement indique l'origine des blocs (une id\u00e9e re\u00e7ue populaire est que <i>l'image pr\u00e9c\u00e9dente<\/i> est divis\u00e9e en blocs non se chevauchant, et les vecteurs de compensation de mouvement indiquent o\u00f9 se d\u00e9placent ces blocs. En fait, c'est l'inverse \u2014 ce n'est pas l'image pr\u00e9c\u00e9dente qui est analys\u00e9e, mais la suivante, et ce n'est pas l\u00e0 o\u00f9 les blocs se d\u00e9placent, mais d'o\u00f9 ils proviennent). En g\u00e9n\u00e9ral, les blocs d'origine se chevauchent dans l'image d'origine. Certains algorithmes de compression vid\u00e9o assemblent l'image actuelle \u00e0 partir de parties de plusieurs images pr\u00e9c\u00e9demment transmises.<\/p><\/blockquote>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/0c34e84b318be2d250bade240fad80ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans le processus d'\u00e9valuation, nous voyons que la balle se d\u00e9place de (<b>x<\/b>=0, <b>y<\/b>=25) \u00e0 (<b>x<\/b>=6, <b>y<\/b>=26), les valeurs <b>x<\/b> et <b>y<\/b> d\u00e9terminent la direction du mouvement. Une autre \u00e9tape que nous pouvons entreprendre pour pr\u00e9server les bits est d'encoder uniquement la diff\u00e9rence des vecteurs de mouvement entre la derni\u00e8re position du bloc et la position pr\u00e9vue, donc le vecteur de mouvement final sera (x=6-0=6, y=26-25=1).<\/p>\n<p>Dans une situation r\u00e9elle, cette boule serait divis\u00e9e en <b>n<\/b> blocs, mais cela ne change pas l'essence des choses.<\/p>\n<p>Les objets dans le cadre se d\u00e9placent en trois dimensions, donc lorsque la boule se d\u00e9place, elle peut sembler visuellement plus petite (ou plus grande si elle se rapproche du spectateur). Il est normal qu'il n'y ait pas de correspondance parfaite entre les blocs. Voici une vue combin\u00e9e de notre estimation et de l'image r\u00e9elle.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/0fb4737e1076221e786fd6a78357422d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMais nous voyons que lorsque nous appliquons une estimation de mouvement, les donn\u00e9es \u00e0 encoder sont sensiblement r\u00e9duites par rapport \u00e0 une m\u00e9thode plus simple de calcul de la diff\u00e9rence entre les images.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/319507ad7197b7693efff11dcd7e4df4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>\u00c0 quoi ressemblerait une v\u00e9ritable compensation de mouvement<\/h2>\n<p>\nCette m\u00e9thode est appliqu\u00e9e \u00e0 tous les blocs simultan\u00e9ment. Souvent, notre balle en mouvement conditionnelle sera rapidement divis\u00e9e en plusieurs blocs.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/978b5612dbd164d2865ccdec4474fdb4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVous pouvez vous-m\u00eame explorer ces concepts en utilisant <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/p>\n<p>Pour voir les vecteurs de mouvement, vous pouvez cr\u00e9er une vid\u00e9o avec pr\u00e9diction externe \u00e0 l'aide de <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ffmpeg.org\/\">ffmpeg<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/056d6dfd2c18baaabc70655edfe3d609.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVous pouvez \u00e9galement utiliser <noindex><a rel=\"nofollow\" href=\"https:\/\/software.intel.com\/en-us\/video-pro-analyzer\">Intel Video Pro Analyzer<\/a><\/noindex> (il est payant, mais il existe une version d'essai gratuite limit\u00e9e aux dix premi\u00e8res images).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/5e28ccc6e6101b8d613f94d326a685f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Redondance spatiale (pr\u00e9vision interne)<\/h2>\n<p>\nSi nous analysons chaque image de la vid\u00e9o, nous d\u00e9couvrirons de nombreuses zones interconnect\u00e9es.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/24bff6d64704cf0c8e1010832ea8f6ea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPassons par cet exemple. Cette sc\u00e8ne est principalement compos\u00e9e de couleurs bleu et blanche.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/12edf221c61e064674ad363db9f3342c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est un image I. Nous ne pouvons pas utiliser les images pr\u00e9c\u00e9dentes pour la pr\u00e9vision, mais nous pouvons le compresser. Nous allons encoder la s\u00e9lection du bloc rouge. Si nous examinons ses voisins, nous remarquons qu'il y a certaines tendances de couleur autour de lui.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/b67b3fba3d1792db81d0f1cb52c7c29b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous supposons que dans l'image, les couleurs se propagent verticalement. Ce qui signifie que la couleur des pixels inconnus contiendra les valeurs de ses voisins.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/6fe8f6ed7ebc66940fca27b8cd2c5915.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCette pr\u00e9vision peut \u00e9galement \u00eatre incorrecte. C'est pour cette raison qu'il est n\u00e9cessaire d'appliquer cette m\u00e9thode (pr\u00e9vision interne), puis de soustraire les valeurs r\u00e9elles. Cela nous donnera un bloc r\u00e9siduel, ce qui conduira \u00e0 une matrice beaucoup plus compress\u00e9e par rapport \u00e0 l'original.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/52fd77c96aa8445af12fca468c72c844.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi vous souhaitez vous exercer avec des pr\u00e9visions internes, vous pouvez cr\u00e9er une vid\u00e9o avec des macro-blocs et leurs pr\u00e9visions \u00e0 l'aide de ffmpeg. Pour comprendre la signification de chaque couleur de bloc, vous devrez consulter la documentation de ffmpeg.<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/0399473c538a550f9317fd59c347a565.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOu vous pouvez utiliser Intel Video Pro Analyzer (comme je l'ai mentionn\u00e9 pr\u00e9c\u00e9demment, la version d'essai gratuite est limit\u00e9e aux 10 premi\u00e8res images, mais cela vous suffira au d\u00e9but).<\/p>\n<p><img decoding=\"async\" alt=\"Comment fonctionne un codec vid\u00e9o. Partie 1. Fondamentaux\" src=\"\/wp-content\/uploads\/2019\/12\/abcdf1eb4b7dbdcf2a7a64154f3052ba.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Deuxi\u00e8me partie :<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/480430\/\"> Principes de fonctionnement du codec vid\u00e9o<\/a><\/noindex><\/h3>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/edison\/blog\/481418\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e \u0446\u0432\u0435\u0442\u0430\u0445, \u0438\u0434\u0435\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0440\u0435\u0445\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0437 \u0446\u0432\u0435\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u043a\u0430\u043a \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0442.\u043d. \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 (\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e), \u0432 \u043d\u0430\u0448\u0435\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54312","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-22T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comment fonctionne un codec vid\u00e9o. Partie 1. Les bases | ProHoster","description":"Deuxi\u00e8me partie : Principes de fonctionnement d'un codec vid\u00e9o. Toute image raster peut \u00eatre repr\u00e9sent\u00e9e sous forme.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u0441\u043d\u043e\u0432\u044b | ProHoster","og:description":"\u0412\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a\u0430 \u041b\u044e\u0431\u043e\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-rabotaet-videokodek-chast-1-osnovy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-22T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54312","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:53:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:31:31","updated":"2026-01-24 10:53:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/54312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=54312"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/54312\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=54312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=54312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=54312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}