
-
Aprimore seu app com efeitos de vídeo baseados em aprendizado de máquina
Descubra como adicionar efeitos como conversão de taxa de quadros, super-resolução e filtros de ruídos para melhorar as experiências de edição de vídeo e streaming ao vivo. Vamos explorar os algoritmos de processamento de vídeo baseados em ML otimizados para o Apple Silicon disponíveis no framework Video Toolbox. Saiba como integrar esses efeitos para aprimorar os recursos do seu app para casos de uso reais.
Capítulos
- 0:00 - Introdução
- 1:04 - Visão geral dos efeitos de vídeo
- 4:55 - Adicionar efeitos ao seu app
- 6:46 - Exemplo de uso: conversão de taxa de quadros
- 11:16 - Exemplo de uso: efeito de desfoque de movimento
- 13:46 - Exemplo de uso: efeito de super-resolução de baixa latência
- 14:55 - Exemplo de uso: interpolação de quadros de baixa latência
Recursos
-
Buscar neste vídeo...
Olá! Meu nome é Makhlouf. Sou engineer na equipe Video Processing. O Video Toolbox é um dos frameworks mais usados em apps de vídeo. Ele tem uma rica coleção de recursos para várias necessidades de vídeo. No macOS 15.4, o Video Toolbox foi aprimorado com a API VTFrameProcessor, algoritmos de processamento de vídeo baseados em ML otimizados para Apple Silicon. Agora essa API também está disponível no iOS 26. Neste vídeo, começarei mostrando os efeitos já disponíveis com a API VTFrameProcessor. Depois, vou falar das etapas básicas para integrar os efeitos no seu app. Por fim, demonstrarei como implementar alguns exemplos para os principais casos de uso. A API VTFrameProcessor oferece uma variedade de efeitos para muitos usos. Conversão de taxa de quadros, super-resolução e desfoque de movimento são ideais para edição de vídeo avançada. Interpolação de quadros de baixa latência e super-resolução são ideais para apps com processamento em tempo real. O filtro de ruído temporal pode ser usado nos dois casos. Vou mostrar os resultados possíveis com esses efeitos. A conversão de taxa de quadros ajusta o número de quadros por segundo do clipe para coincidir com o FPS desejado. Ela também pode criar um efeito de câmera lenta. À esquerda, temos um vídeo de jogadoras de futebol comemorando um gol. À direita, vemos o mesmo vídeo com o efeito de câmera lenta. Ao desacelerar a ação, o vídeo captura a intensidade da comemoração e destaca as emoções das jogadoras. O escalador de super-resolução aumenta a resolução do vídeo e recupera detalhes em vídeos antigos, sendo ideal para apps de melhoria de fotos e restauração de mídia. Neste exemplo, aplicar o efeito de super-resolução aumenta a nitidez e a clareza do vídeo, fazendo com que os barcos à direita pareçam mais detalhados e menos borrados. Dois modelos de ML estão disponíveis para super-resolução, um para imagens e outro para vídeos. O desfoque de movimento, um recurso popular no cinema, é essencial para criar movimentos naturais que o público espera. Também pode ser usado para criar vários efeitos. Neste exemplo, o desfoque de movimento é aplicado ao vídeo à direita, fazendo com que o ciclista pareça estar em um ritmo bem mais rápido. Além disso, o efeito ajuda a suavizar o movimento brusco do vídeo à esquerda, e é mais agradável de assistir. Outro efeito muito útil é a filtragem de ruído temporal. É baseado em estimativa de movimento usando quadros de referência passados e futuros. Ele ajuda a suavizar ruídos temporais e remover artefatos do vídeo, facilitando a compactação e melhorando a qualidade. À esquerda, temos o vídeo de uma árvore com muito ruído de cor. Depois de aplicar o efeito, o vídeo à direita fica muito mais limpo, com menos ruído, principalmente na placa. A interpolação de quadros de baixa latência aumenta a taxa de quadros com desempenho em tempo real. Opcionalmente, a resolução também pode ser aumentada. À esquerda, um vídeo instável com poucos quadros mostra uma mulher andando e falando com a câmera. O vídeo aprimorado à direita é mais suave e agradável de assistir. A super-resolução de vídeo de baixa latência é um superescalador leve. Ele é otimizado para melhorar a experiência de videoconferência mesmo quando a condição da rede é ruim. Ele reduz artefatos de codificação e realça as bordas para gerar quadros de vídeo aprimorados. À esquerda, há um vídeo de baixa resolução e baixa qualidade de um homem falando. O vídeo processado à direita tem resolução mais alta, artefatos de compressão reduzidos, bordas mais nítidas e recursos faciais mais detalhados. No próximo tópico, vou falar sobre como um app pode integrar esses efeitos. Vou explicar como os dados são trocados entre o app e o framework. E descreverei as principais etapas para processar um clipe. Para acessar a API VTFrameProcessor, os apps precisam importar o framework Video Toolbox. Depois, há duas etapas principais para processar um clipe. A primeira é selecionar o efeito. Nesse estágio, o app inicia uma sessão de processamento fornecendo uma configuração que descreve como usar o efeito em toda a sessão. Depois que a sessão é criada, o app obtém um objeto VTFrameProcessor pronto para processar quadros. A VTFrameProcessor é uma API baseada em quadros, então o app deve enviar os quadros de vídeo de entrada com seus parâmetros, um por um. Depois do processamento, o framework retorna o quadro de saída. Há muitos casos de uso que podem se beneficiar da API VTFrameProcessor. Vou mostrar alguns exemplos e como implementá-los. Mas antes disso, quero mencionar que há um código de exemplo totalmente funcional anexado a esta apresentação como referência. O app de demonstração tem clipes de teste para testar esses efeitos. Vou focar em dois casos de uso: edição de vídeo e aprimoramento de vídeo ao vivo. Conversão de taxa de quadros, super-resolução, desfoque de movimento e filtro de ruído temporal são adequados para apps de edição de vídeo, nos quais a qualidade do vídeo é a principal preocupação. Vou começar com a conversão de taxa de quadros. A conversão da taxa de quadros é o processo de aumentar o número de quadros em um clipe de vídeo. Isso é feito com a sintetização de novos quadros e inserção deles entre os já existentes. O objetivo é melhorar a fluidez da reprodução, em especial em casos de tremores causados por diferença na taxa de quadros entre a origem e a tela de exibição. Ela ajuda a preencher as lacunas criadas pela falta de quadros. Também pode ser usada para criar efeito de câmera lenta, frequente em filmes para desacelerar as cenas de ação, deixando-as visualmente mais impressionantes. No esporte, a câmera lenta é usada para destacar e analisar momentos-chave de um jogo. À esquerda, temos um vídeo de um homem fazendo uma coreografia. À direita, vemos o mesmo vídeo com o efeito de câmera lenta. Aplicar o efeito dá aos espectadores mais tempo para apreciar a complexidade dos movimentos de dança, tornando-o ainda mais cativante. Agora veremos como implementar a conversão de taxa de quadros usando a API VTFrameProcessor. O primeiro passo é criar a sessão para o efeito. Para fazer isso, criarei um objeto VTFrameProcessor. Depois, crio o objeto de configuração. Para conversão de taxa de quadros, use o tipo VTFrameRateConversionConfiguration. Para inicializar a configuração, preciso fornecer algumas definições, como largura e altura do quadro de entrada, se o fluxo óptico foi pré-calculado, nível de qualidade e revisão de algoritmo. Agora invoco o método startSession para inicializar o mecanismo de processamento de quadros. A segunda etapa é usar o objeto de parâmetros para processar quadros. Neste caso, o objeto deve ser do tipo VTFrameRateConversionParameters. Mas antes de usar a classe de parâmetros, preciso alocar todos os buffers necessários. Em geral, todos os buffers de quadros de entrada e saída são alocados pelo chamador. Os atributos de buffer de pixel de origem e destino da classe de configuração podem ser usados para configurar pools CVPixelBuffer. Primeiro, crio os objetos da fonte atual e do próximo quadro. Em seguida, a matriz interpolationPhase é criada para indicar onde inserir os quadros interpolados. O tamanho dela indica quantos quadros devem ser interpolados. Finalmente, a matriz de destino é criada com buffers para receber a saída. Ela é do mesmo tamanho que a matriz interpolationPhase. Agora que meus buffers estão prontos, posso definir os outros parâmetros. Defini o opticalFlow para nil, permitindo que o processador calculasse o fluxo para mim. Também defini o modo de envio para indicar se os quadros são enviados em sequência ou em ordem aleatória. Depois da criação de VTFrameRateConversionParameters, posso chamar a função process para o processamento. Em resumo, cada efeito é definido por dois tipos de classes: a classe VTFrameProcessorConfiguration, que descreve como configurar a sessão de processamento para o efeito e a classe VTFrameProcessorParameters, que descreve os quadros de entrada e saída, e os parâmetros associados.
Uma decisão importante ao desenvolver seu app é a de pré-calcular ou não o fluxo óptico. O cálculo de fluxo pode ser caro, e alguns apps fazem isso com antecedência para melhorar o desempenho na fase de renderização. Para calcular o fluxo óptico de antemão, use as classes VTOpticalFlowConfiguration e VTOpticalFlowParameters.
Quando o parâmetro usePrecomputedFlow é definido como false na configuração, o framework calcula o fluxo em tempo real.
Vamos abordar outro recurso importante de edição de vídeo: o desfoque de movimento. Ele simula uma velocidade de obturador lenta e cria um efeito desfocado em objetos em movimento. A intensidade do desfoque pode ser ajustada com a API. Ele é usado em muitas situações, como para deixar o movimento natural, ou por razões artísticas, como dar mais sensação de velocidade a objetos em movimento. À esquerda, há um vídeo em time-lapse de uma estrada. Depois de aplicar o desfoque de movimento, o vídeo à direita ficou mais fluido. A aplicação do desfoque de movimento a vídeos em time-lapse replica o movimento natural, tornando-os mais realistas, sem parecer várias imagens estáticas. Ao criar uma sessão de processamento de desfoque de movimento use a classe VTMotionBlurConfiguration. Como referência, consulte o exemplo de conversão de taxa de quadros, que tem configurações parecidas. Agora, mostrarei como inicializar o objeto VTMotionBlurParameters para processar quadros. O desfoque de movimento exige dois quadros de referência: próximo e anterior. Para o primeiro quadro do clipe, o quadro anterior deve ser definido como nil. Ao fim do clipe, o próximo quadro também deve ser nil. Agora que tenho os buffers de quadros, posso criar o VTMotionBlurParameters. Deixo o processador calcular o fluxo óptico definindo os parâmetros de fluxo para nil. Depois, escolho a intensidade do desfoque, que varia de 1 a 100. Depois de criar parâmetros de desfoque de movimento, chamo a função process para iniciar o processamento. Agora, discutirei alguns recursos voltados a cenários de uso em tempo real, como videoconferência e streaming ao vivo. Filtragem de ruído temporal, interpolação de quadros de baixa latência e super-resolução são projetados para usos em tempo real. Eles fornecem melhorias com foco no desempenho. Para efeitos de baixa latência, o aprimoramento geralmente é realizado nos dispositivos receptores. Agora vou falar de alguns desses efeitos. Primeiro, a super-resolução de baixa latência. Para implementar esse efeito, preciso usar as classes LowLatencySuperResolutionScalerConfiguration e Parameters. Ambas são simples de usar. A classe de configuração só precisa de largura de quadro, altura e taxa de dimensionamento, e a classe de parâmetros requer buffers de quadro de origem e destino. Este exemplo demonstra como a super-resolução de baixa latência pode melhorar a videoconferência. O vídeo à esquerda mostra um homem de barba em uma chamada de vídeo, falando, sorrindo e gesticulando. Sua imagem está borrada pela baixa resolução. Com o efeito de super-resolução, como mostra o vídeo à direita, o rosto do homem fica bem mais nítido, especialmente a textura de sua barba. A interpolação de quadros de baixa latência também foi criada para melhorar as videoconferências em tempo real. Ela é muito benéfica para apps de chamadas de vídeo, especialmente quando a conexão é lenta. Para aplicar esse efeito, use a versão apropriada das classes LowLatencyFrameInterpolationConfiguration e Parameters.
Há pouco, mostrei como a interpolação de quadros de baixa latência pode suavizar tremores e gerar uma experiência de streaming agradável. Temos um utilitário adicional nesta API que combina duplicação da taxa de quadros e ampliação de resolução em um só filtro.
Após o processamento, os traços faciais da mulher e o fundo ficam mais nítidos, e o vídeo mais fluido. O framework Video Toolbox já oferece muitos recursos, como acesso direto a recursos de codificação e decodificação de vídeo por hardware. Ele permite serviços como compactação e descompactação de vídeo e conversões de formato de pixel. Com a adição da API VTFrameProcessor, agora os desenvolvedores podem criar apps ainda mais envolventes. Agora que você aprendeu sobre a API VTFrameProcessor, é hora de integrar esses efeitos ao seu app. Aprimore seus recursos de edição de vídeo com novos efeitos, como desfoque de movimento e câmera lenta. Melhore suas experiências de streaming ao vivo com super-resolução de baixa latência e interpolação de quadros. Esses são apenas alguns exemplos do que você pode fazer com a API VTFrameProcessor. Obrigado por assistir ao meu vídeo, e estou ansioso para ver os seus.
-
-
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 - Introdução
Video Toolbox, um framework amplamente utilizado para apps de vídeo, é aprimorado com a API "VTFrameProcessor" ・・ um novo conjunto de algoritmos de processamento de vídeo baseados em ML e otimizados para o Apple Silicon. Essa API, introduzida pela primeira vez no macOS 15.4, já está disponível no iOS 26. Este vídeo demonstra os efeitos disponíveis, as etapas de integração do app e os exemplos de implementação para os principais casos de uso.
- 1:04 - Visão geral dos efeitos de vídeo
A API "VTFrameProcessor" fornece efeitos de edição de vídeo, incluindo conversão de taxa de quadros para câmera lenta, super-resolução para melhorar vídeos de baixa qualidade, desfoque de movimento para movimento natural, filtragem de ruído temporal para suavização, além de interpolação de baixa latência e super-resolução para apps em tempo real, como videoconferência, melhorando a qualidade e a clareza em vários cenários de vídeo.
- 4:55 - Adicionar efeitos ao seu app
Essa API, disponível pelo framework do Video Toolbox, permite que apps processem clipes de vídeo por meio de um processo de duas etapas: seleção de um efeito e envio de quadros de entrada para processamento, com o framework retornando quadros de saída. A API é adequada para edição de vídeo e aprimoramento de vídeo ao vivo, com recursos como conversão de taxa de quadros, super-resolução, desfoque de movimento e filtragem de ruído temporal. O código de exemplo de referência está anexado a esta apresentação.
- 6:46 - Exemplo de uso: conversão de taxa de quadros
A conversão de taxa de quadros é uma técnica de processamento de vídeo que aumenta o número de quadros em um clipe, sintetizando novos quadros. Esse recurso melhora a suavidade da reprodução, elimina vibrações e ativa efeitos de câmera lenta, normalmente usados em filmes e esportes, para melhorar o impacto visual e a análise. O processo de implementação envolve o uso da API "VTFrameProcessor" em duas etapas principais. A primeira etapa é criar uma sessão com um objeto de configuração que especifica ajustes como tamanho do quadro de entrada, nível de qualidade e revisão de algoritmo. A segunda etapa é processar quadros usando um objeto de parâmetros que gerencia buffers de entrada e saída e ajustes de interpolação. Uma decisão importante para desenvolvedores é pré-calcular o fluxo óptico, um processo computacionalmente caro, pois pode afetar o desempenho do app.
- 11:16 - Exemplo de uso: efeito de desfoque de movimento
O desfoque de movimento na edição de vídeo simula a velocidade lenta do obturador, desfocando objetos móveis para deixar o movimento mais natural e adicionar velocidade. Você pode aplicá-lo usando a classe "VTMotionBlurConfiguration", exigindo dois quadros de referência (próximo e anterior) com intensidade de desfoque ajustável de 1 a 100.
- 13:46 - Exemplo de uso: efeito de super-resolução de baixa latência
A super-resolução de baixa latência melhora os fluxos de vídeo em tempo real ao aumentar a resolução. O processo envolve duas classes simples: uma classe de configuração e uma classe de parâmetros. Um exemplo demonstra como esses recursos melhoram a nitidez de uma chamada de vídeo.
- 14:55 - Exemplo de uso: interpolação de quadros de baixa latência
A interpolação de quadros de baixa latência ajuda a melhorar os fluxos de vídeo em tempo real, especialmente em conexões lentas, suavizando vibrações e tornando os fluxos mais agradáveis de assistir. A API também oferece um filtro que combina duplicação da taxa de quadros e aumento da resolução, resultando em recursos faciais mais nítidos, planos de fundo e fluxos mais suaves. Além desses recursos, a API permite criar apps atraentes com recursos como câmera lenta, desfoque de movimento e experiências aprimoradas de transmissão ao vivo.