View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Temas
  • Todos los videos
  • Información

Volver a WWDC25

  • Información
  • Resumen
  • Transcripción
  • Código
  • Mejora tu app con efectos de video basados en aprendizaje automático

    Descubre cómo agregar efectos como conversión de velocidad de cuadros, superresolución y filtrado de ruido para mejorar la edición y las experiencias de streaming. Exploraremos los algoritmos de procesamiento basados en aprendizaje automático optimizados para el chip de Apple disponibles en la estructura Video Toolbox. Aprende a integrar estos efectos para mejorar las capacidades de tu app para casos de uso del mundo real.

    Capítulos

    • 0:00 - Introducción
    • 1:04 - Descripción de los efectos de video
    • 4:55 - Agrega efectos a tu app
    • 6:46 - Ejemplo de uso: conversión de velocidad de fotogramas
    • 11:16 - Ejemplo de uso: efecto de desenfoque de movimiento
    • 13:46 - Ejemplo de uso: efecto de superresolución de baja latencia
    • 14:55 - Ejemplo de uso: interpolación de cuadros de baja latencia

    Recursos

    • Enhancing your app with machine learning-based video effects
    • Frame processing
    • Video Toolbox
      • Video HD
      • Video SD
  • Buscar este video…

    Hola, soy Makhlouf, ingeniero del equipo de Video processing. Video Toolbox es una de las estructuras más utilizadas en apps de video. Tiene una colección de funciones pensadas para muchas necesidades de video. A partir de macOS 15.4, se mejoró con la API VTFrameProcessor. Un nuevo conjunto de algoritmos de procesamiento de video basados en ML y optimizados para Apple Silicon. Esta API también está disponible en iOS 26 actualmente. En este video, comenzaré mostrando los efectos disponibles en este momento con la API VTFrameProcessor. Luego, repasaremos los pasos básicos para integrar efectos en tu app. Finalmente, demostraré cómo implementar algunos ejemplos para casos de uso importantes. La API VTFrameProcessor ofrece una variedad de efectos que cubren muchos usos. La conversión de velocidad de cuadros, la súper resolución y el desenfoque de movimiento están diseñados para la edición de video de alta calidad. La interpolación de cuadros de baja latencia y los efectos de súper resolución son para apps con necesidades de procesamiento en tiempo real. El filtro de ruido temporal se puede usar en ambos casos. Te mostraré los resultados que puedes lograr con estos efectos. La conversión de velocidad de cuadros ajusta la cantidad de cuadros por segundo en un clip para que coincida con el FPS objetivo. También se puede utilizar para crear un efecto de cámara lenta. En el lado izquierdo, hay un video de jugadores de fútbol celebrando un gol. En el lado derecho está el mismo video con el efecto de cámara lenta. Al ralentizar la acción, el video captura la intensidad de la celebración y resalta las emociones de los jugadores. El escalador de súper resolución mejora la resolución de video y restaura detalles finos en videos antiguos, lo que lo hace ideal para apps de mejora de fotografías y restauración de contenido multimedia. En este ejemplo, la app del efecto de súper resolución mejora la nitidez y la claridad del video, y los barcos del lado derecho se ven más detallados y menos borrosos. Hay dos modelos ML disponibles para súper resolución: uno para imágenes y otro para videos. El desenfoque de movimiento, una característica popular en el cine, es esencial para crear los movimientos naturales que el público espera. También se puede utilizar para crear diversos efectos. En este ejemplo, el efecto de desenfoque de movimiento se aplica al video de la derecha, lo que hace que parezca que el ciclista viaja a un ritmo significativamente más rápido. Además, el efecto ayuda a suavizar el movimiento brusco del video de la izquierda, haciendo que sea más agradable de ver. Otro efecto muy útil es el filtrado de ruido temporal. Se basa en la estimación del movimiento utilizando marcos de referencia pasados y futuros. Puede ayudar a suavizar el ruido temporal y eliminar artefactos en un video, lo que facilita la compresión y mejora su calidad. A la izquierda, hay un video de un árbol con mucho ruido de color. Después de aplicar el efecto, el video la derecha está mucho más limpio y con menos ruido, especialmente en la señal de tráfico. El efecto de interpolación de cuadros de baja latencia sobremuestrea la frecuencia de cuadros con un rendimiento en tiempo real. Opcionalmente, se puede sobremuestrear la resolución. En el lado izquierdo, hay un video entrecortado y de baja velocidad de cuadros de una mujer que camina y habla con la cámara. El video mejorado de la derecha es más fluido y agradable a la vista. La súper resolución de video de baja latencia es un súper escalador liviano. Está específicamente optimizado para mejorar la experiencia de videoconferencia, incluso si la condición de la red es mala. Reduce los artefactos de codificación y agudiza los bordes para producir cuadros de video mejorados. Para demostrar este efecto, a la izquierda hay un video de baja resolución y baja calidad de un hombre hablando. El video procesado a la derecha tiene mayor resolución, artefactos de compresión reducidos, bordes nítidos y rasgos faciales más detallados. En el próximo tema, hablaré de cómo integrar los efectos en una app. Explicaré cómo se intercambian datos entre la app y la estructura. También describiré los pasos principales para procesar un clip. Para acceder a la API de VTFrameProcessor, las apps deben importar la estructura Video Toolbox. Después de eso, hay dos pasos principales para procesar un clip. El primer paso es seleccionar el efecto. Durante esta etapa, la app inicia una sesión de procesamiento proporcionando una configuración de ajustes para describir cómo utilizar el efecto durante toda la sesión. Una vez creada la sesión, la app obtiene un objeto VTFrameProcessor, que está listo para procesar fotogramas. VTFrameProcessor es una API basada en cuadros, o sea que la app debe enviar los cuadros de video de entrada con sus parámetros uno por uno. Una vez procesado, la estructura devuelve el cuadro de salida. Muchos casos de uso pueden beneficiarse de la API VTFrameProcessor. Revisaré algunos ejemplos y mostraré cómo implementarlos. Pero antes, quiero mencionar que hay un código de muestra funcional adjunto a esta presentación para usar como referencia. La app de demostración tiene clips de prueba para probar estos efectos. Me centraré en dos casos de uso: la edición de video y la mejora de video en vivo. La conversión de velocidad, la súper resolución, el desenfoque de movimiento y el filtro de ruido son ideales para apps de edición de video, donde la calidad del video es la principal preocupación. Comenzaré con la conversión de velocidad de cuadros. La conversión de velocidad de cuadros es el proceso de aumentar el número de cuadros en un videoclip. Esto se consigue sintetizando nuevos fotogramas e insertándolos entre los existentes. Se hace para mejorar la fluidez de la reproducción, especialmente en caso de vibración causada por una falta de coincidencia en la velocidad de cuadros entre la pantalla de origen y la de destino. Puede ayudar a llenar los huecos creados por los cuadros faltantes. También se puede utilizar para crear un efecto de cámara lenta, que suele utilizarse en el cine para ralentizar las escenas de acción y hacerlas visualmente más impresionantes. En los deportes, la cámara lenta se usa para resaltar y analizar momentos clave de un juego. En el lado izquierdo, hay un video de un hombre practicando un baile. En el lado derecho está el mismo video con el efecto de cámara lenta. La app de este efecto da a los espectadores tiempo para apreciar la complejidad de los movimientos de baile, haciéndolo aún más cautivador. Demostraré cómo implementar la conversión de velocidad de cuadros utilizando la API VTFrameProcessor. El primer paso es crear la sesión para el efecto. Para hacer esto, crearé un objeto VTFrameProcessor. Luego, crearé el objeto de configuración. Para la conversión de velocidad de cuadros, utiliza el tipo VTFrameRateConversionConfiguration. Para inicializar la configuración, necesito proporcionar configuraciones como el ancho y la altura del marco de entrada, si el flujo óptico se calculó previamente o no, el nivel de calidad y la revisión del algoritmo. Ya puedo invocar el método de inicio de sesión para inicializar el motor de procesamiento de cuadros. El segundo paso es utilizar el objeto de parámetros para procesar los marcos. En este caso, el objeto debe ser del tipo VTFrameRateConversionParameters. Pero antes de usar la clase de parámetros, necesito asignar todos los buffers necesarios. En general, el llamador asigna todos los buffers de trama de entrada y salida. Los atributos de búfer de píxeles de origen y destino de la clase de configuración se pueden utilizar para configurar grupos CVPixelBuffer. Primero, crearé el objeto fuente actual y el siguiente objeto de cuadro. Luego, se crea la matriz interpolationPhase para indicar dónde insertar los cuadros interpolados. El tamaño de la matriz indica cuántos cuadros interpolar. Finalmente, se crea la matriz de destino con buffers para recibir la salida. Tiene el mismo tamaño que la matriz de interpolationPhase. Ya que tengo mis buffers listos, puedo configurar los parámetros restantes. Establezco el flujo óptico en cero, lo que permite que el procesador calcule el flujo por mí. También configuro el modo de envío para indicar si los cuadros se envían en secuencia o en un orden aleatorio. Una vez creado VTFrameRateConversionParameters, puedo llamar a la función de proceso para el procesamiento real. En resumen, cada efecto está definido por dos tipos de clases: La clase VTFrameProcessorConfiguration, que describe cómo configurar la sesión de procesamiento para el efecto, y VTFrameProcessorParameters, que describe los cuadros de entrada y salida y todos los parámetros asociados. Una decisión importante a tomar al desarrollar tu app es si debes o no precalcular el flujo óptico. El cálculo del flujo puede ser costoso y algunas apps optan por hacerlo de antemano para mejorar el rendimiento en la fase de renderizado. Para calcular el flujo óptico de antemano, utiliza las clases VTOpticalFlowConfiguration y VTOpticalFlowParameters. Cuando el parámetro de flujo precalculado se establece como falso en una configuración, se calcula el flujo sobre la marcha.

    Repasaremos otra característica importante de edición de video: el difuminado de movimiento. Difuminado de movimiento simula una velocidad de obturación lenta para crear un efecto borroso en los objetos en movimiento. Puedes ajustar la intensidad del desenfoque a través de la API. Se utiliza en muchas situaciones, como para hacer que el movimiento parezca natural o por razones artísticas, como agregar una sensación de velocidad a objetos que se mueven rápidamente. A la izquierda, hay un video a intervalos de una autopista. Después de aplicar el efecto de desenfoque de movimiento, el video de la derecha es más fluido. La app de desenfoque de movimiento a los videos de lapso de tiempo reproduce el movimiento natural, haciéndolos parecer más realistas y menos como una serie de imágenes fijas. Para crear una sesión de procesamiento de desenfoque de movimiento, utiliza la clase VTMotionBlurConfiguration. Como referencia, puedes consultar el ejemplo de conversión de velocidad de cuadros, ya que comparten configuraciones similares. A continuación, mostraré cómo inicializar el objeto VTMotionBlurParameters para procesar fotogramas. Se necesitan dos cuadros de referencia para el difuminado de movimiento: siguiente y anterior. Para el primer fotograma de un clip, el fotograma anterior debe estar en nulo. Además, al final de un clip, el siguiente fotograma debe establecerse en cero. Ahora que tengo los buffers de cuadros, puedo crear VTMotionBlurParameters. Dejo que el procesador calcule el flujo óptico estableciendo los parámetros de flujo en cero. Luego, elijo la intensidad del desenfoque, que varía entre 1 y 100. Una vez creados los parámetros de desenfoque de movimiento, llamo a la función de proceso para iniciar el procesamiento real. Analizaré un par de funciones pensadas para escenarios de uso en tiempo real, como videoconferencias y transmisiones en vivo. El filtrado de ruido temporal, la interpolación de cuadros y los efectos de súper resolución están diseñados para usos en tiempo real. Proporcionan mejoras teniendo en cuenta el rendimiento. Para obtener efectos de baja latencia, la mejora generalmente se realiza en los dispositivos receptores. Ahora repasemos algunos de estos efectos. Comenzaré con la súper resolución de baja latencia. Para implementar este efecto, necesito usar las clases LowLatencySuperResolutionScalerConfiguration y Parameters. Ambas clases son fáciles de utilizar. La clase de configuración solo necesita el ancho y la altura del marco, así como la relación de escala, mientras que Parameters requiere búferes de marco de origen y destino. Este ejemplo demuestra cómo la súper resolución de baja latencia puede mejorar una sesión de videoconferencia. El video de la izquierda muestra a un hombre barbudo en una videollamada, hablando, sonriendo y haciendo gestos con las manos. Aparece borroso por su baja resolución. Después de aplicar el efecto, como muestra el video de la derecha, el rostro del hombre se vuelve significativamente más nítido, especialmente la textura de su vello facial. La interpolación de cuadros de baja latencia también mejora las videoconferencias en tiempo real. Esto es muy beneficioso para las apps de videollamadas, en especial cuando la conexión es lenta. Para aplicar este efecto, utilice la versión adecuada de las clases LowLatencyFrameInterpolationConfiguration y Parameters. Antes, demostramos cómo la interpolación de cuadros de baja latencia puede suavizar las vibraciones para proporcionar una experiencia de transmisión agradable. Tenemos una utilidad adicional en esta API que combina capacidades de duplicación de velocidad de cuadros y aumento de resolución en un solo filtro.

    Después del procesamiento, los rasgos faciales de la mujer y el fondo son más nítidos y la transmisión es más suave.

    La estructura de Video Toolbox ofrece muchas funciones, como acceso directo a capacidades de codificación y decodificación de video de hardware. Permite servicios como compresión y descompresión de video, así como conversiones de formato de píxeles. Con la incorporación de la API VTFrameProcessor, los desarrolladores pueden crear apps aún más atractivas. Ahora que aprendiste sobre la API VTFrameProcessor, es hora de integrar estos efectos en tu app. Mejora las funciones de edición de video con nuevos efectos, como la cámara lenta o el difuminado de movimiento. Mejora las experiencias de transmisión en vivo con súper resolución de baja latencia e interpolación de cuadros. Estos son solo algunos ejemplos de lo que puedes hacer con la API. Gracias por ver mi video y espero ver los tuyos.

    • 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 - Introducción
    • Video Toolbox, una estructura ampliamente utilizada para apps de video, se mejora con la API VTFrameProcessor, un nuevo conjunto de algoritmos de procesamiento de video basados en aprendizaje automático optimizado para el chip de Apple. Esta API, introducida por primera vez en macOS 15.4, ahora está disponible en iOS 26. Este video muestra los efectos disponibles, los pasos de integración de la app y ejemplos de implementación para los principales casos de uso.

    • 1:04 - Descripción de los efectos de video
    • La API VTFrameProcessor proporciona efectos de edición de video, incluida la conversión de velocidad de fotogramas para cámara lenta, superresolución para mejorar videos de baja resolución, desenfoque de movimiento para movimiento natural, filtrado de ruido temporal para suavizado e interpolación de baja latencia y superresolución para aplicaciones en tiempo real, como videoconferencias, lo que mejora la calidad y la claridad en varios escenarios de video.

    • 4:55 - Agrega efectos a tu app
    • Esta API, a la que se accede a través de la estructura Video Toolbox, permite que las apps procesen videoclips a través de un proceso de dos pasos: Seleccionar un efecto y enviar fotogramas de entrada para su procesamiento, y la estructura devuelve cuadros de salida. La API es adecuada para la edición de video y la mejora de video en vivo, con varias funcionalidades, como conversión de velocidad de fotogramas, superresolución, desenfoque de movimiento y filtrado de ruido temporal. Se adjunta a esta presentación un código de referencia de muestra.

    • 6:46 - Ejemplo de uso: conversión de velocidad de fotogramas
    • La conversión de velocidad de cuadros es una técnica de procesamiento de video que aumenta la cantidad de cuadros de un clip sintetizando nuevos cuadros. Esta capacidad mejora la suavidad de la reproducción, elimina las vibraciones y permite efectos de cámara lenta, comúnmente usados en el cine y los deportes para mejorar el impacto visual y el análisis. El proceso de implementación implica el uso de la API VTFrameProcessor en dos pasos principales. El primer paso es crear una sesión con un objeto de configuración que especifique configuraciones, como el tamaño del cuadro de entrada, el nivel de calidad y la revisión del algoritmo. El segundo paso es procesar los cuadros usando un objeto de parámetros que administra los buffers de entrada y salida y las configuraciones de interpolación. Una decisión importante para los desarrolladores es si precalcular el flujo óptico, un proceso computacionalmente costoso, ya que puede afectar el rendimiento de la app.

    • 11:16 - Ejemplo de uso: efecto de desenfoque de movimiento
    • El desenfoque de movimiento en la edición de video simula una velocidad de obturación lenta, por medio del desenfoque de los objetos en movimiento para que el movimiento se vea natural y agregue velocidad. Puedes aplicarlo usando la clase VTMotionBlurConfiguration, que requiere dos fotogramas de referencia (siguiente y anterior) con una intensidad de desenfoque ajustable de 1 a 100.

    • 13:46 - Ejemplo de uso: efecto de superresolución de baja latencia
    • La superresolución de baja latencia mejora las transmisiones de video en tiempo real al aumentar la resolución. El proceso involucra dos clases simples: Una clase de configuración y una clase de parámetros. Un ejemplo demuestra cómo estas capacidades mejoran la claridad de una videollamada.

    • 14:55 - Ejemplo de uso: interpolación de cuadros de baja latencia
    • La interpolación de fotogramas de baja latencia ayuda a mejorar las transmisiones de video en tiempo real, especialmente en conexiones lentas, lo que suaviza las vibraciones y hace que las transmisiones sean más agradables de ver. La API también ofrece un filtro que combina la duplicación de la velocidad de fotogramas y el aumento de la resolución, lo que da como resultado rasgos faciales y fondos más nítidos, y transmisiones más fluidas. Además de estas capacidades, la API le permite crear apps atractivas con funcionalidades como cámara lenta, desenfoque de movimiento y experiencias de transmisión en vivo mejoradas.

Developer Footer

  • Videos
  • WWDC25
  • Mejora tu app con efectos de video basados en aprendizaje automático
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines