
-
Améliorez votre app avec des effets vidéo basés sur l’apprentissage automatique
Découvrez comment ajouter des effets tels que la conversion de fréquence d'images, la super-résolution et la réduction du bruit pour améliorer le montage vidéo et l'expérience de diffusion en direct. Nous explorerons les algorithmes de traitement vidéo basés sur l'apprentissage automatique, optimisés pour la puce Apple et disponibles dans le framework Video Toolbox. Apprenez à intégrer ces effets afin d'améliorer les capacités de votre app pour des cas d'utilisation réels.
Chapitres
- 0:00 - Introduction
- 1:04 - Présentation des effets vidéo
- 4:55 - Ajouter des effets à votre app
- 6:46 - Exemple d’utilisation : conversion de fréquence d’images
- 11:16 - Exemple d’utilisation : effet de flou de mouvement
- 13:46 - Exemple d’utilisation : effet de super résolution à latence faible
- 14:55 - Exemple d’utilisation : Interpolation d’images à latence faible
Ressources
-
Rechercher dans cette vidéo…
Bonjour, je m’appelle Makhlouf, ingénieur dans l’équipe de traitement vidéo. Video Toolbox est l’un des frameworks les plus utilisés dans les apps vidéo. Sa vaste collection de fonctionnalités répond à de nombreux besoins vidéo. À partir de macOS 15.4, Video Toolbox a été amélioré avec l’API VTFrameProcessor. Un nouvel ensemble d’algorithmes de traitement vidéo ML optimisés pour les puces Apple. Cette API est désormais également disponible dans iOS 26. Dans cette vidéo, je montrerai d’abord les effets disponibles avec l’API VTFrameProcessor. Puis, j’expliquerai comment intégrer des effets dans votre app. Enfin, je présenterai quelques exemples pour les principaux cas d’utilisation. L’API VTFrameProcessor offre divers effets couvrant de nombreuses utilisations. La conversion de fréquence d’images, la super résolution et le flou de mouvement sont destinés aux montages vidéo de haute qualité. L’interpolation d’images à faible latence et la super résolution sont destinées aux apps nécessitant un traitement en temps réel. Le filtre de bruit temporel peut être utilisé dans les deux cas. Je vais vous montrer les résultats possibles avec ces effets. La conversion de la fréquence d’images ajuste le nombre d’images par seconde d’un clip pour l’adapter à la fréquence d’images cible. Elle permet également aussi de créer un effet de ralenti. À gauche se trouve une vidéo de joueurs de football célébrant un but. À droite, vous voyez la même vidéo avec l’effet de ralenti. En ralentissant l’action, la vidéo capture l’intensité de la célébration et met en valeur les émotions des joueurs. Le scaler Super Résolution améliore la résolution vidéo et restaure les détails fins des vidéos anciennes. Il est idéal pour les applications de retouche et de restauration de médias. Dans cet exemple, l’effet de super résolution améliore la netteté et la clarté de la vidéo, ce qui rend les bateaux à droite plus détaillés et moins flous. Deux modèles ML sont disponibles pour la super résolution, l’un pour les images et l’autre pour les vidéos. Le flou de mouvement, une fonctionnalité populaire dans le cinéma, est essentiel pour créer les mouvements naturels attendus du public. Il permet aussi de créer divers effets. Dans cet exemple, le flou de mouvement est appliqué à la vidéo de droite, ce qui donne l’impression que le motard va nettement plus vite. De plus, cet effet aide à lisser le mouvement discordant sur la vidéo de gauche, qui est plus agréable à regarder. Un autre effet très utile est le filtrage temporel du bruit. Il repose sur l’estimation du mouvement à l’aide d’images de référence passées et futures. Il contribue à lisser le bruit temporel et à supprimer les artefacts d’une vidéo, ce qui facilite la compression et améliore sa qualité. À gauche, la vidéo d’un arbre contient beaucoup de bruit. Une fois l’effet appliqué, la vidéo de droite est beaucoup plus nette, avec moins de bruit, notamment sur le panneau de signalisation. L’interpolation d’images à faible latence augmente la fréquence d’images avec des performances en temps réel. La résolution peut également être augmentée. À gauche, une vidéo saccadée à faible fréquence d’images montre une femme qui marche et parle à la caméra. La vidéo améliorée à droite est plus fluide et plus agréable à regarder. La super résolution vidéo à faible latence est un super scaler léger. Elle est spécifiquement optimisée pour améliorer l’expérience de visioconférence même lorsque l’état du réseau est mauvais. Elle réduit les artefacts de codage et accentue les contours pour produire des images vidéo améliorées. Pour démontrer cet effet, à gauche se trouve une vidéo basse résolution et de mauvaise qualité d’un homme qui parle. La vidéo traitée à droite a une résolution supérieure, des artefacts de compression réduits, des bords nets et des traits faciaux plus détaillés. Voyons maintenant comment une application peut intégrer ces effets. Je vais expliquer comment les données sont échangées entre l’app et le framework. Je décrirai aussi les principales étapes de traitement d’un clip. Pour accéder à l’API VTFrameProcessor, les apps doivent importer le framework Video Toolbox. Deux étapes principales permettent ensuite de traiter un clip. La première consiste à sélectionner l’effet. L’application lance alors une session de traitement en fournissant une configuration de paramètres pour décrire comment utiliser l’effet pour toute la session. Une fois la session créée, l’application génère un objet VTFrameProcessor, prêt à traiter les images. VTFrameProcessor est une API basée sur les images. L’app doit donc envoyer les images vidéo d’entrée avec leurs paramètres une par une. Une fois le traitement terminé, le framework renvoie l’image de sortie. De nombreux cas d’utilisation peuvent bénéficier de l’API VTFrameProcessor. Examinons quelques exemples et voyons comment les mettre en œuvre. Mais avant, sachez qu’un exemple de code entièrement fonctionnel est joint à cette présentation à titre de référence. L’app de démo contient des clips pour tester ces effets. Concentrons-nous sur deux cas d’utilisation, le montage vidéo et l’amélioration vidéo en direct. La conversion de fréquence d’images, la super résolution, le flou de mouvement et le filtre de bruit temporel sont tous adaptés aux applications de montage vidéo. où la qualité vidéo est la principale préoccupation. Commençons par la conversion de fréquence d’images. La conversion de fréquence d’images consiste à augmenter le nombre d’images dans un clip vidéo. Cela est possible en synthétisant de nouvelles images et en les insérant entre les images existantes. Elle permet généralement d’améliorer la fluidité de la lecture, notamment en cas de saccades dues à un décalage de fréquence d’images entre la source et la cible. Elle contribue à combler les lacunes créées par les images manquantes. Elle permet aussi de créer un effet de ralenti, souvent utilisé dans le cinéma pour ralentir les scènes d’action, les rendant visuellement plus impressionnantes. Dans le sport, le ralenti est utilisé pour mettre en évidence et analyser les moments clés d’un match. À gauche, la vidéo montre un homme faisant une chorégraphie. À droite, vous voyez la même vidéo avec l’effet de ralenti. Cet effet donne aux spectateurs plus de temps pour apprécier la complexité des mouvements de danse, ce qui les rend encore plus captivants. Voyons comment implémenter la conversion de fréquence d’images avec l’API VTFrameProcessor. La première étape consiste à créer la session pour l’effet. Pour ce faire, je crée un objet VTFrameProcessor. Puis, je crée l’objet de configuration. Pour la conversion de fréquence d’images, utilisez le type VTFrameRateConversionConfiguration. Pour initialiser la configuration, je dois fournir quelques paramètres, comme la largeur et la hauteur de l’image d’entrée, le type de flux optique, le niveau de qualité et la révision de l’algorithme. Appelons maintenant la méthode start session pour initialiser le moteur de traitement d’images. La deuxième étape consiste à utiliser l’objet parameters pour traiter les images. Dans ce cas, l’objet doit être de type VTFrameRateConversionParameters. Avant d’utiliser la classe parameters, je dois allouer tous les tampons nécessaires. En général, tous les tampons d’entrée et de sortie sont alloués par l’appelant. Les attributs de tampon de pixels source et cible de la classe de configuration permettent de configurer des pools CVPixelBuffer. Tout d’abord, je crée les objets de la source actuelle et de l’image suivante. Ensuite, le tableau interpolationPhase est créé pour indiquer où insérer les images interpolées. La taille du tableau indique le nombre d’images à interpoler. Enfin, le tableau cible est créé avec les tampons pour recevoir la sortie. Il est de la même taille que le tableau interpolationPhase. Maintenant que les tampons sont prêts, je peux définir les paramètres restants. J’ai réglé le flux optique sur 0 pour que le processeur calcule le flux pour moi. J’ai aussi configuré le mode d’envoi pour indiquer si les images seront envoyées dans l’ordre ou dans un ordre aléatoire. Une fois que VTFrameRateConversionParameters est créé, je peux appeler la fonction de traitement. En résumé, chaque effet est défini par deux types de classes : la classe VTFrameProcessorConfiguration qui décrit comment configurer la session de traitement de l’effet, et la classe VTFrameProcessorParameters qui décrit les images d’entrée et de sortie et tous les paramètres associés. Lors du développement de votre app, il est important de décider si vous voulez précalculer ou non le flux optique. Le calcul de flux peut être coûteux. Certaines apps choisissent de le faire en amont pour améliorer les performances lors de la phase de rendu. Pour calculer le flux optique au préalable, utilisez les classes VTOpticalFlowConfiguration et VTOpticalFlowParameters. Lorsque le paramètre use pre-computed flow est défini sur false une configuration, le framework calcule le flux à la volée.
Voyons une autre fonctionnalité clé du montage vidéo, le flou de mouvement Cet effet simule une vitesse d’obturation lente pour créer un effet de flou sur les objets en mouvement. L’intensité du flou peut être ajustée via l’API. Cet effet est beaucoup utilisé, par exemple pour donner un aspect naturel au mouvement ou pour des raisons artistiques, comme donner une sensation de vitesse à des objets en mouvement. À gauche, se trouve une vidéo en accéléré d’une autoroute. La vidéo de droite, qui contient l’effet de flou de mouvement, est plus fluide. L’application de cet effet aux vidéos en accéléré reproduit le mouvement naturel, ce qui les rend plus réalistes et évite les images saccadées. Pour créer une session de traitement de flou de mouvement, utilisez la classe VTMotionBlurConfiguration. À titre de référence, consultez l’exemple de conversion de fréquence d’images, qui partage des paramètres similaires. Voyons comment initialiser l’objet VTMotionBlurParameters pour traiter les images. Deux images de référence sont nécessaires pour le flou de mouvement, la suivante et la précédente. Pour la première image d’un clip, l’image précédente doit être définie sur 0. Et à la fin du clip, l’image suivante doit être définie sur 0. Maintenant que j’ai les tampons d’images, je peux créer les VTMotionBlurParameters. Je laisse le processeur calculer le flux optique en réglant les paramètres de flux sur 0. Ensuite, je choisis l’intensité du flou, qui varie de 1 à 100. Une fois que j’ai créé les paramètres de flou de mouvement, j’appelle la fonction process pour lancer le traitement. Voyons quelques fonctionnalités destinées aux scénarios d’utilisation en temps réel comme la vidéoconférence et la diffusion en direct. Le filtrage temporel du bruit, l’interpolation d’images à faible latence et la super résolution sont tous destinés à une utilisation en temps réel. Ils apportent des améliorations sans nuire aux performances. Pour les effets à faible latence, l’amélioration se fait généralement sur les appareils cibles. Voyons maintenant quelques-uns de ces effets. Commençons par la super résolution à faible latence. Pour implémenter cet effet, je dois utiliser les classes LowLatencySuperResolutionScalerConfiguration et parameters. Ces deux classes sont simples à utiliser. La classe de configuration ne nécessite que la largeur et la hauteur de l’image, ainsi que le rapport d’échelle, et la classe parameters ne nécessite que les tampons d’images source et cible. Cet exemple montre comment la super résolution à faible latence améliore les sessions de visioconférence. La vidéo de gauche montre un homme barbu dans un appel vidéo. Il parle, sourit et fait des gestes de la main. EIle semble floue en raison de sa faible résolution. Après avoir appliqué la super résolution, comme le montre la vidéo de droite, le visage de l’homme est plus net, notamment la texture de sa barbe. L’interpolation d’images à faible latence vise aussi à améliorer les visioconférences en temps réel. Elle est très utile aux applications d’appel vidéo, notamment lorsque la connexion est lente. Pour appliquer cet effet, utilisez la version appropriée des classes LowLatencyFrameInterpolationConfiguration et Parameters. Précédemment, nous avons vu comment l’interpolation d’images à faible latence atténue les saccades pour offrir une expérience de streaming agréable. Cette API inclut un utilitaire qui combine les fonctionnalités de doublement de la fréquence d’images et d’amélioration de la résolution en un seul filtre.
Après le traitement, les traits du visage de la femme et l’arrière-plan sont plus nets, et le flux est plus fluide. Le framework Video Toolbox fournit déjà de nombreuses fonctionnalités, comme l’accès direct aux fonctionnalités matérielles d’encodage et de décodage vidéo. Il permet des services tels que la compression et la décompression vidéo, ainsi que les conversions de format de pixel. Avec l’ajout de l’API VTFrameProcessor, les développeurs peuvent désormais créer des apps encore plus attrayantes. Maintenant que vous avez découvert l’API VTFrameProcessor, il est temps d’intégrer ces effets dans votre app. Améliorez le montage vidéo avec de nouveaux effets comme le ralenti ou le flou de mouvement. Optimisez le streaming avec la super résolution et l’interpolation d’images à faible latence. Ce ne sont là que quelques exemples des améliorations possibles avec l’API VTFrameProcessor. Merci de votre attention. J’ai hâte de voir vos vidéos.
-
-
8:06 - Frame rate conversion configuration
// Frame rate conversion configuration let processor = VTFrameProcessor() guard let configuration = VTFrameRateConversionConfiguration(frameWidth: width, frameHeight: height, usePrecomputedFlow: false, qualityPrioritization: .normal, revision: .revision1) else { throw Fault.failedToCreateFRCConfiguration } try processor.startSession(configuration: configuration)
-
8:56 - Frame rate conversion buffer allocation
// Frame rate conversion buffer allocation //use sourcePixelBufferAttributes and destinationPixelBufferAttributes property of VTFrameRateConversionConfiguration to create source and destination CVPixelBuffer pools sourceFrame = VTFrameProcessorFrame(buffer: curPixelBuffer, presentationTimeStamp: sourcePTS) nextFrame = VTFrameProcessorFrame(buffer: nextPixelBuffer, presentationTimeStamp: nextPTS) // Interpolate 3 frames between reference frames for 4x slow-mo var interpolationPhase: [Float] = [0.25, 0.5, 0.75] //create destinationFrames let destinationFrames = try framesBetween(firstPTS: sourcePTS, lastPTS: nextPTS, interpolationIntervals: intervals)
-
9:48 - Frame rate conversion parameters
// Frame rate conversion parameters guard let parameters = VTFrameRateConversionParameters(sourceFrame: sourceFrame, nextFrame: nextFrame, opticalFlow: nil, interpolationPhase: interpolationPhase, submissionMode: .sequential, destinationFrames: destinationFrames) else { throw Fault.failedToCreateFRCParameters } try await processor.process(parameters: parameters)
-
12:35 - Motion blur process parameters
// Motion blur process parameters sourceFrame = VTFrameProcessorFrame(buffer: curPixelBuffer, presentationTimeStamp: sourcePTS) nextFrame = VTFrameProcessorFrame(buffer: nextPixelBuffer, presentationTimeStamp: nextPTS) previousFrame = VTFrameProcessorFrame(buffer: prevPixelBuffer, presentationTimeStamp: prevPTS) destinationFrame = VTFrameProcessorFrame(buffer: destPixelBuffer, presentationTimeStamp: sourcePTS) guard let parameters = VTMotionBlurParameters(sourceFrame: currentFrame, nextFrame: nextFrame, previousFrame: previousFrame, nextOpticalFlow: nil, previousOpticalFlow: nil, motionBlurStrength: strength, submissionMode: .sequential, destinationFrame: destinationFrame) else { throw Fault.failedToCreateMotionBlurParameters } try await processor.process(parameters: parameters)
-
-
- 0:00 - Introduction
Video Toolbox, un framework largement utilisé pour les applications vidéo, est amélioré avec l’API VTFrameProcessor, un nouvel ensemble d’algorithmes de traitement vidéo basés sur le ML et optimisés pour les puces Apple. Cette API, ajoutée pour la première fois dans macOS 15.4, est désormais disponible dans iOS 26. Cette vidéo présente les effets disponibles, les étapes d’intégration d’app et des exemples de mise en œuvre pour les principaux cas d’utilisation.
- 1:04 - Présentation des effets vidéo
L’API VTFrameProcessor offre des effets de montage vidéo, notamment la conversion de la fréquence d’images pour le ralenti, la super résolution pour améliorer les vidéos basse résolution, le flou de mouvement pour un mouvement naturel, le filtrage temporel du bruit pour la fluidité, ainsi que l’interpolation et la super résolution à faible latence pour les applications en temps réel comme la visioconférence, améliorant la qualité et la clarté de divers scénarios vidéo.
- 4:55 - Ajouter des effets à votre app
Cette API, accessible via le framework Video Toolbox, permet aux applications de traiter les clips vidéo en deux étapes : la sélection d’un effet et l’envoi des trames d’entrée pour traitement, le framework renvoyant des trames de sortie. Cette API est adaptée au montage vidéo et à l’amélioration vidéo en direct, avec des fonctionnalités telles que la conversion de la fréquence d’images, la super résolution, le flou de mouvement et le filtrage temporel du bruit. Un exemple de code de référence est joint à cette présentation.
- 6:46 - Exemple d’utilisation : conversion de fréquence d’images
La conversion de la fréquence d’images est une technique de traitement vidéo qui permet d’augmenter le nombre d’images d’un clip en synthétisant de nouvelles images. Cette fonctionnalité améliore la fluidité de la lecture, élimine les saccades et permet des effets de ralenti. Elle est couramment utilisée dans la réalisation de films et le sport, afin d’améliorer l’impact et l’analyse visuels. Le processus de mise en œuvre implique l’utilisation de l’API 'VTFrameProcessor' en deux étapes principales. La première étape consiste à créer une session avec un objet de configuration qui spécifie des paramètres tels que la taille de la trame d’entrée, le niveau de qualité et la révision de l’algorithme. La deuxième étape consiste à traiter les images à l’aide d’un objet parameters qui gère les tampons d’entrée et de sortie et les paramètres d’interpolation. Les développeurs devront déterminer s’ils souhaitent précalculer le flux optique, un processus coûteux en termes de calcul, car il peut avoir un impact sur les performances des apps.
- 11:16 - Exemple d’utilisation : effet de flou de mouvement
Le flou de mouvement dans le montage vidéo simule une vitesse d’obturation lente, floutant les objets en mouvement pour rendre le mouvement naturel et ajouter de la vitesse. Vous pouvez l’appliquer en utilisant la classe 'VTMotionBlurConfiguration', nécessitant deux images de référence (la suivante et la précédente) avec une intensité de flou réglable comprise entre 1 et 100.
- 13:46 - Exemple d’utilisation : effet de super résolution à latence faible
La super résolution à faible latence améliore les flux vidéo en temps réel en augmentant la résolution. Ce processus implique deux classes simples : une classe de configuration et une classe de paramètres. Un exemple montre comment ces fonctionnalités améliorent la clarté d’un appel vidéo.
- 14:55 - Exemple d’utilisation : Interpolation d’images à latence faible
L’interpolation d’images à faible latence permet d’améliorer les flux vidéo en temps réel, en particulier sur les connexions lentes, en éliminant les saccades et en rendant les flux plus agréables à regarder. L’API propose également un filtre qui combine le doublement de la fréquence d’images et l’amélioration de la résolution, ce qui permet d’obtenir des traits du visage et des fonds plus nets ainsi que des flux plus fluides. En plus de ces fonctionnalités, l’API vous permet de créer des applications captivantes avec des fonctionnalités telles que le ralenti, le flou de mouvement et des expériences améliorées de streaming en direct.