Bonnes pratiques pour le partage de vidéos

De nombreuses personnes partagent des vidéos à l'aide de leur appareil Android. La qualité des messages reçus vidéo est souvent inférieure à l'originale en raison du traitement effectué par l'application de partage. Ce document explique comment optimiser la qualité les vidéos partagées et certains pièges courants du traitement des vidéos à éviter. Pour optimiser pour partager des contenus vidéo HDR, consultez Utilisez le module Transformer pour transcoder du contenu HDR en SDR sur cette page.

La principale chose à faire est de maintenir une résolution constante et de préserver la qualité de la vidéo le plus longtemps possible le plus longtemps possible lorsque vous vous préparez à partager une vidéo.

Le pipeline de partage

La figure 1 illustre une procédure classique de partage d'une vidéo:

Partager le pipeline vidéo Figure 1 : Le pipeline de partage de vidéos

Le pipeline comprend les étapes suivantes:

  1. Capturez et encodez une vidéo, en ajoutant éventuellement des effets pendant la capture. L'utilisateur peut également ignorer cette étape et sélectionner une vidéo dans l'espace de stockage. préenregistrée à partir d'une autre application.
  2. Modifier, filtrer, retoucher ou traiter la vidéo
  3. Permet de redimensionner ou de redimensionner la vidéo en vue du transcodage.
  4. Transcoder la vidéo pour la partager Le filtrage de l'étape 2 est souvent appliqué de cette étape.

Il y a deux étapes dans le pipeline, au cours desquelles vous pouvez définir qui déterminent la qualité de la vidéo: encodage lors de la phase initiale l'enregistrement et le transcodage avant leur partage. En outre, vous devrez peut-être redimensionner la vidéo avant l'étape finale du transcodage, ce qui peut également affecter la qualité.

Recommandations

Le tableau 1 présente les cinq principaux paramètres de qualité vidéo. indique les étapes pouvant les utiliser.

Paramètre Filmez Partager
Profil O O
Résolution O O
Débit O O
Paramètre de quantification (QP) (rarement) O
Images B N O

Tableau 1. Principaux paramètres déterminant la qualité d'une vidéo

Profil

Pour de meilleurs résultats, utilisez les profils plus avancés fournis par le du codec. Pour l'encodage AVC, sélectionnez Profil élevé et le niveau 4.

Résolution, recadrage et mise à l'échelle

Vous pouvez modifier la résolution initiale de la vidéo capturée à l'étape de mise à l'échelle avant le transcodage pour le partage, mais la mise à l'échelle peut dégrader la qualité vidéo. Nous vous recommandons d'éviter la mise à l'échelle et de sélectionner une résolution pour la que vous pouvez utiliser tout au long du pipeline. N'oubliez pas non plus que Le recadrage entraîne une image de mauvaise qualité, en particulier si vous améliorez la taille l'image. Respectez les consignes suivantes :

  • Choisissez une résolution au moins égale à la résolution de partage finale.
  • La résolution de la capture ne doit pas dépasser trop largement la résolution de partage. sauf si toutes les étapes intermédiaires sont conçues pour prendre en charge (débit le plus élevé lors de la capture initiale, par exemple).

    • Si l'encodage de partage atteint une résolution de 720 x 1 280, nous vous recommandons d'utiliser Résolution de capture de 720 x 1 280.
    • Si les étapes intermédiaires entre la capture et le partage incluent le recadrage, utilisez une résolution de capture plus élevée (1 080 x 1 920, par exemple) et augmentez la valeur le débit de capture pour gérer les pixels supplémentaires.
  • Le recadrage est extrême, et l'image est de mauvaise qualité, surtout si les images est améliorée.

  • Évitez de passer d'une résolution inférieure à une résolution supérieure. Tentatives d'augmentation de la taille pour créer des détails absents. Enregistrer la résolution supérieure souhaitée dès le début.

  • Si vous devez effectuer une mise à l'échelle, ajustez les paramètres d'encodage. Par exemple, si le la résolution améliorée a deux fois plus de pixels, le débit multiplié par deux.

La résolution et le débit sont liés. Par exemple, porter une image haute résolution vidéo via un pipeline de partage qui le convertit en bas débit produit une image de moins bonne qualité qu'en commençant avec une résolution inférieure. En tant que le débit diminue, il existe des points de croisement à partir desquels les résolutions plus petites commencent pour obtenir de meilleurs résultats:

Débit Résolution
Plus de 5 Mbit/s 1080x1920
Entre 1,5 et 5 Mbit/s 720x1280
1,5 Mbit/s ou moins Équivalent SD. Le même nombre de pixels au format 9:16 est d'environ 416 x 736

Tableau 2. Débit et résolution

De nombreuses applications populaires partagent des vidéos avec une résolution de 720p ou inférieure. Les données indiquent que la résolution 720p est un choix approprié pour les cibles de débit compris entre 1,5 et 5 Mbit/s.

Débit

Enregistrement…

L'utilisation d'un débit d'encodage plus élevé offre la plus grande amélioration possible qualité. Nous vous recommandons de choisir des débits correspondant aux applications d'appareil photo natives. Pour une Résolution de 720 x 1 280, débit de capture recommandé de 10 Mbit/s.

Comme l'encodage de la capture s'effectue sur l'appareil, vous pouvez utiliser un débit supérieur compensent la plupart des transformations de l'étape de partage avec un faible impact. Les fichiers plus volumineux ne sont utilisés que pour la manipulation sur l'appareil.

Vous pouvez réduire le débit lors de l'étape finale du transcodage, comme indiqué dans le tableau 2.

Partage

Le débit a le plus d'impact au moment du partage, car il est directement lié la taille de la vidéo qui sera mise en ligne. Il existe un compromis entre vidéo la qualité, le temps de transmission des fichiers et les coûts de stockage dans le cloud.

Le profil d'encodage, les images B et les valeurs de délimitation QP sont également plus adaptés. plus importante à ce stade que lors de la capture.

Pour une résolution de 720 x 1 280, nous recommandons un débit compris entre 4 et 5 Mbit/s la qualité visuelle.

Paramètre de quantification (QP)

Sur Android 12 ou version ultérieure, les clés QP sont standardisées et disponibles dans les MediaFormat et dans Bibliothèque multimédia NDK. Sur les versions antérieures d'Android, la manipulation de QP n'est disponible que via le framework à l'aide de clés spécifiques au fournisseur dans la configuration MediaFormat.

Enregistrement…

Pendant la capture vidéo, utilisez le contrôle du débit plutôt que les paramètres QP, qui sont pas toujours disponibles.

Nous vous déconseillons d'ajuster les paramètres QP pour des débits de 10 Mbit/s. (pour 720 x 1 280). Si le débit d'enregistrement est considérablement inférieur, à moins de 5 Mbit/s pour 720 x 1 280, un paramètre QP de 40 est un bon compromis entre une meilleure qualité sans forcer trop souvent le codec à dépasser le débit cible.

Partage

Nous vous recommandons une limite QP maximale de 40, en particulier lorsque le débit est inférieur à 4 Mbit/s. Même si cette méthode garantit une qualité minimale pour les vidéos encodées, elle peut produire avec un débit plus élevé. L'augmentation du débit dépend du la complexité d'une vidéo. Bien qu'une application de partage puisse tolérer des variations de la vidéo générée, il est possible qu'elle ne tolère pas de hausse supérieure à un certain seuil.

Vous pouvez limiter l'augmentation du débit en encodant de nouveau la vidéo afin de la partager avec un limite de QP max. moins restrictive (supérieure) Cela donne au codec plus de liberté pour sacrifier la qualité et préserver d'autres parties de la vidéo. Vous pouvez réencoder le fichier vidéo pour le partage, car il s'agit d'une opération de transcodage. vous avez déjà enregistré la vidéo que vous souhaitez partager.

L'inconvénient est que le fait de répéter l'étape de transcodage avec ces différentes augmente le temps de partage de la vidéo. Une façon de réduire cette latence consiste à examiner la vidéo partiellement transcodée pour déterminer dans les limites de votre tolérance en cas de dépassement du débit. Si ce n'est pas le cas, vous pouvez arrêter Transcodage et réessayez avec des paramètres QP plus appropriés.

Images B et profils d'encodage

Envisager de n'utiliser les images B que lors de l'étape de partage, et uniquement lors de l'exécution Android 10 ou version ultérieure

Les applications doivent vérifier les profils d'encodage compatibles à l'aide de CodecCapabilities, car tous les appareils ne prennent pas en charge les profils principaux ou élevés. Utiliser le profil le plus élevé pris en charge par l'encodeur AVC: Élevée > Principal > Référence. Pour obtenir des résultats plus sûrs, évitez Configuration des cadres B (KEY_LATENCY ou KEY_MAX_B_FRAMES) lorsque vous utilisez les valeurs de référence car la configuration de certains encodeurs peut échouer.

Les segments de code suivants supposent un 'MediaFormat format' qui sera utilisé pour configurer l'encodeur AVC

Android 10

Niveau d'API 29 ou supérieur

Utilisez le profil le plus élevé accepté et définissez le paramètre de cadre B sur 1:

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_MAX_B_FRAMES, 1);

Ne définissez pas KEY_LATENCY dans ce cas.

Android 8, 8.1 et 9

API 26, 27, 28

Utilisez le profil le plus accepté, mais désactivez la génération de cadres B. Ce accepte certaines limites MediaMuxer dans ces versions du système

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_LATENCY, 1);

La valeur KEY_LATENCY empêche les codecs de générer des images B, mais tire parti d'autres efficacités du codec.

Si votre application n'utilise pas MediaMuxer pour assembler le fichier de sortie final, vous pouvez activer les cadres B en définissant la valeur KEY_LATENCY sur 2 au lieu de 1. Cela devrait permet au codec de produire des images B.

Android 7.1 et versions antérieures

API 25 et versions antérieures

Utilisez le profil de référence pour obtenir des résultats plus sûrs.

format.setInt32(KEY_PROFILE, AVCProfileBaseline);

Avant la version 7, Android AOSP n'est compatible qu'avec le profil de référence. Cependant, il les OEM ont probablement activé un profil principal/élevé sur certains appareils, à l'aide d'un profil spécifique au fournisseur.

Si votre appli n'utilise pas MediaMuxer, vous pouvez utiliser le profil principal ou le plus visible lorsque le codec le prend en charge. Il n'existe pas de clé de format publique pour contrôler le nombre de B- cadres.

Utiliser le module Transformer pour transcoder HDR en SDR

À partir d'Android 13 (niveau d'API 33), nous vous recommandons d'utiliser Transformateur pour partager du contenu HDR avec des applications, des services et des appareils qui n'utilisent pas compatibles avec le format HDR. Le module Transformer repose sur le mappage des tons d'entrée du flux vidéo HDR en SDR et en enregistrant le résultat au format MP4, ce qui permet sans perte de détails ni luminosité de l'image.

Remarque: Sur les appareils ciblant les versions du système entre Android 12 (niveau d'API 32) à Android 7.0 (niveau d'API 24), le module Transformer fonctionne différemment. Si l'appareil est compatible avec la technologie HDR, votre application lit le contenu sans mappage des tons. Si l'appareil n'est pas compatible avec la technologie HDR, une erreur est renvoyée pour indiquer que cette technologie le mappage des tons n'est pas pris en charge.

Le code suivant configure un Transformer qui mappe l'entrée avec SDR et l'encode à nouveau dans le format d'entrée (par exemple, H.264/AVC):

Kotlin

val transformer = Transformer.Builder(context)
    .setTransformationRequest(
        TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build()

Java

Transformer transformer = new Transformer.Builder(context)
    .setTransformationRequest(
        new TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build();

Pour tester la fonctionnalité de mappage des tons, consultez les Application de démonstration Transformer

Vous pouvez également configurer un mappage des tons MediaCodec, même si l'implémentation est plus complexe. Pour en savoir plus, consultez les MediaCodec.