Netflix a récemment annoncé qu'il diffusait désormais du contenu d'encodage optimisé basé sur les plans pour 4K. Quand j'ai lu ce titre de nouvelles, je me suis dit: «Eh bien, c'est génial! Ça a l'air bien mais… qu'est-ce que cela signifie exactement? Et qu'est-ce que l'encodage basé sur les plans? "
Ces questions étaient essentiellement de savoir comment je me suis retrouvé dans le terrier de l'historique d'optimisation de l'encodage permanent, dans le but de disséquer complètement les phrases ci-dessus et de les comprendre correctement, afin que je puisse les partager avec vous. Avant d'entrer dans le vif du sujet, faisons un voyage dans le passé.
Les années 90
Au début des années 90, si vous vouliez afficher un fichier image sur votre ordinateur, comme un GIF ou le nouveau format JPG, vous auriez besoin d'utiliser un programme pour cela. Je pense que j'ai utilisé CSHOW à l'époque. Pour les «vidéos», mes amis et moi avons échangé des fichiers FLIC, qui étaient une séquence d’images fixes qui seraient rapidement parcourues pour obtenir l’illusion du mouvement dans un logiciel dont je ne me souviens plus. Bien que certaines normes de compression vidéo aient déjà été développées au début des années 90, les fichiers vidéo n'étaient pas si courants. Le stockage des données était rare et coûteux et même mon bureau 486 DX 33Mhz, 8 Mo de Ram et 120 Mo de disque dur ne pouvait probablement pas gérer de quelque manière que ce soit (vitesse, RAM ou disque) le décodage d'un fichier vidéo moderne.
Je n’imagine même pas combien de temps il faudrait pour transférer une vidéo significative avec mon modem à 28,8 kbit / s.
La compression JPEG a changé la donne pour les images. Nous pourrions maintenant stocker des images énormes avec à peu près la même qualité dans beaucoup moins d'espace. Quand il est apparu, c'était presque magique pour moi. Nous étions constamment à la recherche des meilleurs algorithmes et astuces de compression que nous pourrions utiliser afin de dépenser moins sur les disquettes. Il y avait ARC, ARJ, LHA, PAK, RAR, ZIP, pour n'en nommer que quelques-uns que j'utilisais dans MS-DOS. C'étaient tous des archiveurs avec une compression sans perte et la plupart ne réussiraient pas à obtenir des images haute définition. Mais JPEG utilise une compression avec perte et peut donc obtenir des images beaucoup plus petites au détriment de la qualité d'image.
Pour les vidéos, étant une séquence d'images, l'étape suivante logique était Motion JPEG. M-JPEG est un format de compression vidéo dans lequel chaque image vidéo est compressée séparément en tant qu'image JPEG, ce qui signifie que vous bénéficiez des avantages de la compression JPEG appliquée à chaque image. Comme FLIC, mais pour les JPEG.
Étant donné que la compression ne dépend que de chaque image individuelle, on parle de compression intra-image. En tant que système de compression purement intra-image, la qualité d’image de M-JPEG est directement fonction de la complexité spatiale statique de chaque image vidéo. Mais une vidéo contient plus d'informations que la somme de chaque image. L'évolution, le passage d'une trame à une autre est aussi une information et les nouveaux algorithmes en ont vite profité.
Des images fixes au mouvement
MPEG-1 était l'un des encodeurs qui a exploré de nouvelles façons de compresser la vidéo. Au lieu de compresser chaque image individuelle, MPEG-1 divise la vidéo en différents types d'images. Pour simplifier, disons qu'il existe deux principaux types d'images dans MPEG-1, les images clés (images I) et les images de prédiction (images P, images B). MPEG-1 stocke une image clé, qui est une image complète normale au format compressé, puis une série d'images de prédiction, peut-être dix ou quinze. Les images de prédiction ne sont pas des images mais plutôt la différence entre l'image et la dernière image clé, ce qui permet d'économiser beaucoup d'espace. En ce qui concerne le stockage audio, MPEG-1 Audio (MPEG-1/2 Audio Layer 3) utilise la psychoacoustique pour réduire considérablement le débit de données requis par un flux audio car il supprime des parties de l'audio que l'oreille humaine n'entendrait pas. La plupart d'entre nous connaissent ce format audio simplement par MP3.
Aussi cool et inventif que cela puisse paraître, avant même la fin de la première ébauche de la norme MPEG-1, les travaux sur MPEG-2 étaient déjà en cours. MPEG-2 est venu avec la vidéo entrelacée, une technique pour doubler la fréquence d'images perçue d'un affichage vidéo sans consommer de bande passante supplémentaire, et des améliorations sonores. La norme MPEG-2 peut compresser les flux vidéo jusqu'à 1 / 30ème de la taille vidéo d'origine tout en conservant une qualité d'image décente.
MPEG-3 a été intégré dans MPEG-2 lorsqu'il s'est avéré redondant. Mais ensuite vint le MPEG-4 plus moderne. MPEG-4 fournit un cadre pour des algorithmes de compression plus avancés, entraînant potentiellement des taux de compression plus élevés par rapport au MPEG-2 au prix d'exigences de calcul plus élevées. Après sa sortie, il fut un temps où de nombreux codecs différents coexistaient, et il était parfois frustrant pour l'utilisateur ordinaire d'essayer de lire un fichier vidéo. Je me souviens de ne pas avoir le codec DivX, ou Xvid, ou 3ivx, ou d'avoir à installer libavcodec
et ffmpeg
, ou peut-être essayer de le jouer dans Quicktime Player, ou simplement abandonner en larmes…
Mais une chose était sûre, nous avions maintenant une qualité très correcte dans nos PC, Playstations et appareils photo numériques.
Diffusion
Le streaming vidéo pratique n'a été rendu possible que grâce à ces progrès et à d'autres en matière de compression de données, car il n'est toujours pas pratique de fournir la quantité de données requise de manière non compressée. Le streaming a ses origines dans le streaming de musique, le partage de musique et finalement le développement de réseaux P2P, et il y a des tonnes d'histoires intéressantes à raconter. Néanmoins, je vais me concentrer sur le streaming vidéo dans l'article, car l'objectif principal était de comprendre ce qu'est un «encodage optimisé basé sur les plans».
Nous vivons actuellement au milieu d'une guerre du streaming, avec une concurrence féroce entre les services de streaming vidéo tels que Netflix, Amazon Prime Video, Disney Plus, Hulu, HBO Max, Apple TV +, Youtube Premium, CBS All Access, etc.
Tous ces services essaient de fournir un contenu nouveau et exclusif et de le livrer correctement. Bien livrer implique de nombreux aspects, de la fraîcheur du contenu à l'expérience utilisateur, mais une chose sur laquelle je pense que nous pouvons être d'accord: lorsque la qualité vidéo est nulle, aucune équipe marketing ou UX ne peut sauver la situation. Dans cet esprit, plusieurs algorithmes modernes d'encodage vidéo sont utilisés, notamment H.264 (alias MPEG-4 Part 10), HEVC, VP8 ou VP9. En plus de cela, chaque service essaie d'améliorer sa propre qualité vidéo comme il le peut.
Blog technique Nexflix
Netflix a un joli blog technologique où vous pouvez lire du contenu vidéo geek sérieux. Ils ont introduit de nombreuses optimisations différentes dans leur réseau et leurs algorithmes de compression qu'ils partagent parfois sur le blog. À la fin de 2015, ils ont annoncé une technique appelée Optimisation de l'encodage par titre.
Lorsque nous avons déployé pour la première fois nos encodages H.264 / AVC fin 2010, nos ingénieurs vidéo ont développé des recettes d'encodage qui fonctionnaient le mieux dans notre catalogue vidéo (à cette époque). Ils ont testé diverses configurations de codec et effectué des tests visuels côte à côte pour déterminer les paramètres de codec qui produisaient les meilleurs compromis de qualité entre différents types de contenu. Un ensemble de paires débit-résolution (appelé échelle de débit)… Ont été sélectionnés de telle sorte que les débits binaires soient suffisants pour coder le flux à cette résolution sans artefacts de codage importants.
À cette époque, Netflix utilisait le PSNR (Peak Signal-To-Noise Ratio) en dB comme mesure de la qualité d'image. Ils ont compris que cela corrigeait échelle de débit est plus une moyenne ou une règle empirique pour la plupart des contenus, mais il existe plusieurs cas où cela ne s'applique pas. Scènes avec un bruit de caméra élevé ou un bruit de grain de film, un flux de 5800 kbps présenterait toujours des blocages dans les zones bruyantes. À l'autre extrémité, pour un contenu simple comme des dessins animés, 5800 kbps est une surpuissance pour produire une vidéo 1080p. Ils ont donc essayé différents paramètres pour chaque titre:
Chaque ligne représente ici un titre, un film ou un épisode. Un PSNR plus élevé signifie une meilleure qualité d'image globale: 45 dB est une très bonne qualité, 35 dB affichera des artefacts d'encodage. Il est clair que de nombreux titres ne gagnent pas vraiment beaucoup à augmenter le débit binaire au-delà d'un certain point. En général, l'encodage par titre vous donnera souvent une meilleure qualité vidéo, une résolution plus élevée pour le même débit binaire ou la même résolution pour un débit binaire inférieur.
Le contenu du titre peut être de nature très différente. Mais même dans le même titre, il peut aussi y avoir des scènes d'action hautes et plus tard un paysage immobile. C'est pourquoi, lorsque Netflix a décidé de coder en bloc ses titres pour tirer parti du cloud, en divisant le film en mandrins pour qu'il puisse être codé en parallèle, ils ont commencé à tester et à mettre en œuvre l'optimisation de l'encodage par bloc en 2016. C'est la même chose. logique selon le titre, mais pour chaque morceau du titre. C’est comme ajouter un niveau d’optimisation supplémentaire.
Enfin, en 2018, Netflix a commencé à mettre en œuvre l'encodage optimisé basé sur les plans, et il est désormais disponible également en titres 4K depuis août. Revenons donc à la question initiale. Et si, au lieu de morceaux aléatoires pour encoder notre vidéo, ce qui entraîne la génération d'images clés aléatoires (dont certaines peuvent être très similaires, ce qui n'est pas optimal car elles prennent beaucoup d'espace), on pouvait choisir la bonne et optimale Images clés pour chaque titre?
Dans un monde idéal, on aimerait découper une vidéo et imposer différents ensembles de paramètres à chaque morceau, de manière à optimiser la vidéo finale assemblée. La première étape pour obtenir cette allocation de bits parfaite consiste à diviser la vidéo en ses atomes naturels, constitués d'images très similaires les unes aux autres et qui se comportent donc de la même manière que les modifications des paramètres d'encodage – ce sont les «plans» qui composent une longue vidéo. séquence. (…) Les limites naturelles des plans sont établies par des algorithmes relativement simples, appelés algorithmes de détection de changement de plan, qui vérifient la quantité de différences entre les pixels appartenant à des images consécutives, ainsi que d'autres statistiques.
Outre l'optimisation des images clés pour le codage, le codage basé sur les plans présente d'autres avantages, tels que la recherche dans une séquence vidéo conduit à des points d'intérêt naturels (signalés par les limites de la prise de vue) et le changement des paramètres de codage dans différents plans est imperceptible pour l'utilisateur car l'image clé est très différente. Tous ces changements sont des ajustements pour les encodeurs qui peuvent en fait être H.264 ou HEVC ou VP8, cela ne fait aucune différence.
Cela vaut-il la peine? Pour répondre, examinons la dernière évaluation de la qualité vidéo utilisée par Nexflix: la fusion d'évaluation multi-méthodes vidéo, ou VMAF. Traditionnellement, les comparaisons de codecs partagent la même méthodologie: les valeurs PSNR sont calculées pour un certain nombre de séquences vidéo, chacune codée à des résolutions prédéfinies et des paramètres de quantification fixes selon un ensemble de conditions de test. Cela fonctionne bien pour de petites différences dans les codecs, ou pour évaluer des outils dans le même codec. Pour le streaming vidéo, selon Netflix, l'utilisation du PSNR est mal adaptée, car elle est mal corrélée à la qualité perceptive. Le VMAF peut capturer des différences plus importantes entre les codecs, ainsi que la mise à l'échelle des artefacts, d'une manière qui est mieux corrélée avec la qualité perceptive par les humains. D'autres acteurs de l'industrie reconnaissent et adoptent le VMAF comme outil d'évaluation de la qualité.
En utilisant VMAF, Netflix a commencé à tester ses titres 4K. Les résultats étaient assez impressionnants.
Ci-dessus ne sont que deux exemples, mais en moyenne, ils besoin d'un débit binaire inférieur de 50% pour obtenir la même qualité avec l'échelle optimisée. Le titre à débit binaire 4K le plus élevé en moyenne est de 8 Mbps, ce qui représente également une réduction de 50% par rapport à 16 Mbps de l'échelle à débit binaire fixe. Dans l'ensemble, les utilisateurs obtiennent plus de qualité pour un débit binaire inférieur, ce qui est tout un exploit.
Et comme une image vaut mille mots, je vais terminer avec ceci (notez la différence et le débit):
Avertissement
L'auteur n'essaie pas de lancer une guerre de flamme de codec, il existe de nombreux codecs et normes, et MPEG semblait approprié à des fins de démonstration. La quantité de cisaillement des encodages, des spécifications et de leurs alias garantit à peu près des erreurs quelque part dans le texte, n'hésitez pas à les corriger dans les commentaires.
L'auteur n'approuve pas non plus les services de streaming. Nous avons mentionné Netflix simplement parce qu'il partage ses astuces d'encodage avec le public. Nous sommes sûrs que les autres services proposent également des trucs intelligents, ils ne le disent tout simplement pas.