Sa plate-forme vidéo est de qualité ffmpeg et d'encodage vidéo. 2e partie


Lenna aime bien paraître - un mannequin après tout. Il y a des légendes selon lesquelles l'ajouter au titre d'un article lié au traitement des données visuelles donne +5 une chance d'avantages.

Je continue de divulguer les fonctionnalités des services vidéo. Aujourd'hui, des notes sur les options d'encodage et leur sélection.

Première partie

La plupart des codecs offrent des valeurs par défaut assez équilibrées, vous permettant d'obtenir un résultat normal sans une longue sélection de paramètres. Cependant, lorsqu'il s'agit d'une grande archive de matériel vidéo, de limitations sur le débit binaire, de considérations de compatibilité avec l'équipement client et d'un désir raisonnable de maintenir la qualité de l'original, tout devient plus intéressant.

Malheureusement, le bouton magique "encoder très bien" n'est pas fourni. Comme l'analogue caniuse pour l'encodage des paramètres. Doit comprendre les caractéristiques des codecs.

Intro: Profils


Il y a tellement de réglages et de paramètres pour H264 que les développeurs eux-mêmes, afin de ne pas se tromper, ont décidé de faire une liste de profils - de «bonnes» configurations à des fins différentes. Les profils standard ont beaucoup identifié; De plus, en définissant vos propres paramètres d'encodage, vous créez en fait votre propre profil, déroutant complètement tout le monde. Donc, malheureusement, cela s'est avéré comme toujours.



Initialement, des profils ont été créés pour déterminer si la vidéo finale sera lue sur le type d'appareil souhaité, mais maintenant il n'y a pas de séparation sans ambiguïté des joueurs par type d'appareil et profil.

En pratique, je distinguerais, par le niveau d'intensité de décodage des ressources, trois groupes de paramètres:

  • avec CABAC handicapé; profils conditionnels principal et de base. Ils peuvent toujours être utilisés pour le streaming sensible aux retards;
  • avec CABAC activé; profil relativement élevé. Pour tout. La plupart des équipements modernes (et pas si) peuvent jouer une telle chose. L'augmentation de l'efficacité par rapport au principal - 20% +;
  • avec prise en charge de l'échantillonnage sur dix bits et d'autres paramètres avancés. Conditionnellement Hi10P. Le problème avec de tels profils est le manque presque complet de support matériel et les exigences accrues pour l'équipement de décodage; Les téléphones, même haut de gamme, ne peuvent pas gérer ces fichiers. Il peut être utilisé pour une bibliothèque personnelle si vous avez confiance en votre équipement. Une autre augmentation de 10 à 20% de l'efficacité.

Le concept de profils pour d'autres codecs n'est pas aussi développé que dans H264. Pour eux, nous pouvons supposer que si le codec est pris en charge, alors il est entièrement pris en charge, et la restriction pendant la lecture ne peut être qu'un débit binaire excessivement élevé, ou un autre paramètre qui est clairement surévalué. Cependant, avec la prolifération des décodeurs matériels VP8 et VP9, ​​la situation peut changer.

Passons maintenant aux paramètres individuels.

Espace colorimétrique


Le choix de l'espace colorimétrique n'a pratiquement aucun effet sur l'efficacité du codage; ce paramètre pourrait être laissé au choix du codec (il est important lors du traitement de données brutes non codées) s'il ne s'agissait pas d'une seule fonctionnalité: de nombreux lecteurs traitent les informations de l'espace colorimétrique de manière très spécifique, de sorte que pour la plupart des utilisateurs, la vidéo peut s'afficher avec des distorsions de couleur (dans principalement vert).

Pour préserver les couleurs de la plupart des lecteurs, différentes vidéos H264 doivent être encodées dans différents espaces:

  • pour SD (largeur <1280) - BT.601
  • pour HD (largeur> = 1280) - BT.709

Il y a une excellente étude de 2012. à ce sujet. Malheureusement, la situation avec de tels bogues évolue très lentement, et bien que certains des résultats des tests de cet article ne soient plus pertinents, ces fonctionnalités doivent encore être prises en compte. Il y a une chance que vous ayez regardé la vidéo avec les mauvaises couleurs pendant tout ce temps - et il s'avère que ce n'était pas une décision du réalisateur.
Le problème est connu pour les décodeurs H264; d'autres formats peuvent ne pas avoir ce problème.

Fréquence d'images


Si votre source n'est pas un flux de jeux ou de vidéos d'action, il est logique de limiter la fréquence d'images supérieure à 25-30 images - moins il y en a, plus il reste de données pour décrire une seule image. Il est préférable de diminuer cette valeur d'un facteur - afin que le saut d'image soit uniforme, sinon la vidéo peut subir un ralentissement.

Il existe une fréquence d'images variable. Travailler avec VFR n'est pas pratique pour deux raisons: premièrement, il donne des pics de débit binaire dans les zones haute fréquence qui vident instantanément le tampon; deuxièmement, VFR complique la préparation du plan de conversion, forçant l'utilisation des paramètres Q (j'ai écrit à leur sujet dans le premier article).

Taille du gop


Les groupes d'images sont des blocs dans lesquels certaines images peuvent faire référence aux données d'autres. Une augmentation de la taille du GOP améliore les performances du codec en échange d'une augmentation des besoins en mémoire. Des valeurs plus grandes sont particulièrement efficaces pour les fichiers avec le même type de mouvements cycliques (vous savez ce que je veux dire). De plus, avec des valeurs élevées, il peut y avoir des problèmes avec le rembobinage de la vidéo, car plus de données devront être restaurées.
Le nom du paramètre, ainsi que les unités de mesure, peuvent différer d'un codec à l'autre - voir la documentation.

Tranches


Pour accélérer le décodage (et l'encodage), la vidéo peut être divisée en parties de résolution inférieure. L'idée est que le traitement de quatre vidéos avec une résolution de, par exemple, 1280x720 est plus facile qu'une, mais 2560x1440. Il est logique à des résolutions supérieures à FHD. Plus il y a de pièces, plus l'efficacité du codec est faible. De plus, l'utilisation de cette séparation simplifie le traitement multithread.

Pixels anamorphiques


Les pixels rectangulaires apparaissent lorsque le rapport hauteur / largeur et le rapport largeur / hauteur des pixels diffèrent - DVD grand écran, où la vidéo 16: 9 a une résolution de 704 × 480 (3: 2 avec TVA analogique et corrigée du vent). La lecture de ces vidéos ne posera pas de problèmes, cependant, lors de l'encodage, vous devez prendre en compte à la fois la résolution et le rapport d'aspect, sinon il est facile de convertir anamorphique soit en pixels carrés standard avec une perte d'efficacité (jusqu'à ~ 35%!), Ou même d'obtenir quelque chose d'aplatit horizontalement.

Contrôle du débit binaire


Il existe trois principaux modes de codecs associés au débit binaire:

  • débit binaire constant, CBR, lorsque la qualité baisse proportionnellement à la complexité de la scène;
  • qualité constante, const Q VBR, lorsque le débit augmente proportionnellement à la complexité de la scène;
  • débit et qualité limités - VBR classique.

Il convient de noter que la plupart des encodeurs (y compris ffmpeg) ne définissent pas les codecs en mode CBR lors de la définition d'un débit binaire - les fichiers sont créés par VBR, avec des restrictions pas toujours définies dans la documentation (le mode CBR est activé, généralement en définissant les mêmes minrate et maxrate).

Pour la lecture en ligne (et pour le streaming), le VBR contraint est bien adapté. il donne une meilleure qualité que CBR et vous permet d'intégrer le flux dans le canal Internet.

Le choix du maxrate / minrate dépend du canal du client, un écart de plus de 20% est préférable de ne pas le faire.

Codage multipasse


Il est difficile de prévoir la répartition des données sur un fichier en mode VBR, les codecs doivent deviner ce qui ne se passe pas toujours. En mode multipasse, le codec mappe d'abord le débit binaire requis, puis encode. De cette façon, la qualité vidéo des scènes complexes et dynamiques est améliorée (par exemple . Faites attention au nombre d'éléments «moirés» et au nombre de transitions entre les scènes). Étant donné qu'à la première passe, le codec analyse uniquement le fichier source, contrairement à la croyance populaire, le traitement dans ce mode ne nécessite pas plus du double du temps, mais seulement 10-15%.

-tune


Pour différents types de matériel source, plusieurs préréglages ont été préparés pour affiner certains paramètres de codage de base - tels que les niveaux de filtre de déblocage, les paramètres d'optimisation psycho-visuelle. L'utilisation de ces préréglages améliore la perception vidéo et fonctionne bien si vous connaissez le type de source à l'avance ou si vous disposez d'un ensemble structuré de vidéos (en cas de traitement de masse).

Presets:

  • film - pour les films et tout ce qui a une structure de trame complexe. C'est définitivement un film;
  • animation - pour les vidéos avec de grandes zones solides. Autrement dit, il est préférable de coder avec le préréglage d'animation, et c'est du film, malgré le fait que l'animation;
  • image fixe - pour les vidéos où il n'y a presque pas de mouvement; bonne optimisation pour ces chansons au format mp4, où la couverture de l'album est tout l'arrière-plan vidéo (quelqu'un, dites-leur que même flac ne peut pas peser 300 Mo pendant 10 minutes!);
  • grain - pour coder des sources "bruyantes", telles que des caméras de surveillance;
  • psnr / ssim - pour évaluer l'efficacité des autres paramètres du codec;
  • fastdecode - profil principal forcé pour les appareils faibles;
  • zerolatency - comme son nom l'indique, pour le streaming à faible latence.

Format pixel


Le format et le bitness affectent fortement la façon dont les fichiers sont compressés et décompressés, sous quelle forme la qualité est perdue. Les principaux paramètres décrits par le format de pixel sont:

  • une façon de décomposer la couleur en composants - YUV, RGB;
  • paramètres de sous-échantillonnage de couleur (oh comment! le sous-échantillonnage de chrominance est plus familier) lorsque certains composants de couleur sont enregistrés avec une résolution plus faible;
  • profondeur des composants de couleur en bits.

Un choix conscient du format de pixel nécessite une analyse séparée, une collecte de matériel et dépend fortement du type de matériel source.

En bref:

  • tous les codecs (et, surtout, les décodeurs) ne prennent pas en charge les formats possibles;
  • travailler avec certains formats est plus exigeant en termes de ressources - Hi10P diffère simplement d'un profil haut dans ce domaine;
  • travailler avec des formats sous-échantillonnés peut donner une augmentation notable de l'efficacité de compression, mais il est plus difficile de contrôler la perte de qualité.

Entrelacement


L'entrelacement a été inventé pour doubler la fréquence d'images perçue à un coût minimum - le débit binaire et la résolution sont les mêmes, mais la fréquence est plus élevée. Cependant, avec un mouvement rapide, les dents deviennent visibles - les lignes de la trame précédente. Vous pouvez vous débarrasser de l'effet sans supprimer les images et sans réduire la résolution verticale avec des filtres, mais ils réduiront la clarté. Si la vidéo est lue dans le navigateur, il est préférable de filtrer l'entrelacement pendant l'encodage, car le filtrage en temps réel sur le client ne donnera pas les meilleurs résultats visuels.

Tout mettre ensemble


Exemple pour x264:

ffmpeg -i [] -c:v libx264 -b:v [bitrate] #  -maxrate [bitrate] #   -r [framerate] -g [size] #GOP   -aspect [,  16:9] #   -profile high #    CABAC -color_primaries bt709 #   ,     -color_trc bt709 -colorspace bt709 -slices 4 #     -threads 4 -tune [value] -map_metadata:g -1 # ,      -map_metadata:s:v -1 -map_metadata:s:a -1 -map_chapters -1 -pass [1|2] #   -passlogfile [file] #    #-map ... -a:c ... -ac ... -a:b ..., ,  -   [] 

Bien sûr, dans un article, il n'a pas été possible de tout couvrir, mais je suis sûr que ce matériel sera suffisant pour améliorer la qualité de nombreuses vidéos.

Lisez la documentation et expérimentez.

Matériaux:

ffmpeg.org/ffmpeg-all.html
en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles
en.wikipedia.org/wiki/Chroma_subsampling
en.wikipedia.org/wiki/Color_space
en.wikipedia.org/wiki/YUV

En plus de l' exemple du dernier article, j'ai découvert une autre installation de mon code - cliquez . J'ai essayé de prendre des exemples dans l'article de ces sites, mais malgré cela:
* Je n'ai pas de relation directe avec les auteurs des sites mentionnés et je ne partage pas leurs vues et opinions. Je ne peux pas commenter les décisions concernant qui et comment l'accès au code est accordé.

Prêt à répondre aux questions.

Source: https://habr.com/ru/post/fr437936/


All Articles