
-
머신 러닝 기반 비디오 효과로 앱 향상하기
프레임 전환율, 초고화질 및 노이즈 필터링과 같은 효과를 추가하여 비디오 편집 및 라이브 스트리밍 경험을 향상하는 방법을 알아보세요. Video Toolbox 프레임워크에서 사용할 수 있는 Apple Silicon용 ML 기반 비디오 처리 알고리즘을 살펴보겠습니다. 이러한 효과를 통합하여 실제 사용 사례에 맞춰 앱의 기능을 향상하는 방법을 알아보세요.
챕터
- 0:00 - 서론
- 1:04 - 비디오 효과 개요
- 4:55 - 앱에 효과 추가하기
- 6:46 - 사용 사례: 프레임 전환율 전환
- 11:16 - 사용 사례: 모션 블러 효과
- 13:46 - 사용 사례: Low Latency Super Resolution 효과
- 14:55 - 사용 사례: Low Latency Frame Interpolation
리소스
-
비디오 검색…
저는 Video Processing 팀의 엔지니어인 Makhlouf입니다 Video Toolbox는 비디오 앱에서 많이 사용되는 프레임워크로 여러 비디오 관련 요구 사항을 충족하는 기능을 제공합니다 macOS 15.4부터 Video Toolbox는 VTFrameProcessor API로 개선되었습니다 이 API는 Apple Silicon에 최적화된 새로운 ML 기반 비디오 처리 알고리즘을 포함합니다 이제 이 API를 iOS 26에서도 사용하실 수 있습니다 먼저 VTFrameProcessor API를 통해 현재 사용할 수 있는 효과를 보여 드릴게요 그런 다음, 효과를 앱에 통합하는 기본 단계를 설명하겠습니다 마지막으로 주요 사용 사례를 위한 몇 가지 예시를 구현하는 방법을 시연할게요 VTFrameProcessor API는 다양하게 활용할 수 있는 여러 효과를 제공합니다 프레임 전환율, 초고화질과 모션 블러는 고품질 비디오 편집을 위해 설계되었습니다 저지연 프레임 보간 및 초고화질 효과는 실시간 처리를 담당하는 애플리케이션에 적합합니다 시간적 노이즈 필터는 두 경우 모두에 사용할 수 있습니다 이러한 효과로 어떤 결과를 낼 수 있는지 보여드릴게요 프레임 전환율은 클립의 초당 프레임 수를 목표 FPS에 맞추기 위해 조정합니다 슬로우 모션 효과를 만들 때도 사용할 수 있습니다 왼쪽 비디오에서 축구 선수들이 득점 후 세리모니를 하고 있습니다 오른쪽 비디오는 슬로우 모션 효과를 적용한 결과입니다 비디오에서 행동을 느리게 재생하여 세리모니의 강렬함을 포착하고 선수들의 감정을 강조할 수 있습니다 비디오 해상도를 높이고 오래된 비디오의 세밀한 디테일을 복원하는 초고화질 스케일러는 사진 보정, 미디어 복원과 같은 용도에 적합합니다 이 예시에서 초고화질 효과를 적용하면 비디오의 선명도와 품질이 개선되어 오른쪽에서 배의 디테일이 더 표현되며 덜 흐릿하게 보입니다 초고화질 효과를 위해 두 개의 ML 모델이 제공됩니다 하나는 이미지용, 다른 하나는 비디오용입니다 모션 블러는 영화 제작에서 인기 있는 기능으로 관객이 기대하는 자연스러운 움직임을 생성하는 데 필수입니다 다양한 효과를 생성할 때도 사용할 수 있습니다 이 예시에서 오른쪽 비디오에 모션 블러 효과가 적용된 결과 비디오 속 사람이 자전거로 훨씬 더 빠른 속도로 이동하는 것처럼 보입니다 또한 이 효과는 왼쪽 영상의 갑작스러운 움직임을 부드럽게 만들어 주므로 시청하기 더 편안합니다 시간적 노이즈 필터링도 매우 유용한 효과입니다 이는 과거와 미래의 참조 프레임을 활용한 모션 추정을 기반으로 하죠 이 효과는 시간적 노이즈를 부드럽게 처리하고 아티팩트를 제거하여 압축을 용이하게 하며 품질을 개선합니다 왼쪽에는 색상 노이즈가 많은 나무의 비디오가 있습니다 효과를 적용한 결과 오른쪽 비디오가 훨씬 깔끔해졌습니다 노이즈가 많이 줄었죠 특히 교통 표지판에서요 저지연 프레임 보간 효과는 실시간 성능으로 프레임 속도를 업샘플링합니다 옵션으로 해상도도 업샘플링할 수 있습니다 여성이 걸으면서 카메라에 대화하는 왼쪽 비디오는 끊김이 심하고 프레임 속도가 낮습니다 오른쪽의 향상된 비디오는 더 부드럽고 시청하기 편안합니다 저지연 비디오 초고화질은 가벼우면서도 강력한 성능을 갖춘 스케일러입니다 이 스케일러는 네트워크 상태가 나쁜 환경에서도 화상 회의 경험을 향상시키도록 특별히 최적화되었습니다 코딩 아티팩트를 줄이고 가장자리를 선명하게 하여 비디오 프레임을 개선하죠 이 효과를 시연해 보겠습니다 왼쪽에 남성이 대화하는 모습을 보여 주는 해상도와 화질이 낮은 비디오가 있습니다 효과로 처리된 오른쪽 비디오는 해상도가 높고, 압축 아티팩트가 줄고 가장자리가 선명해지고 얼굴 특징의 디테일이 부각되었습니다 다음 주제에서는 응용 프로그램이 이러한 효과를 통합하는 방법을 설명하겠습니다 응용 프로그램과 프레임워크 간에 데이터가 교환되는 방법을 설명하고 클립을 처리하는 주요 단계도 간략하게 알려 드리겠습니다 VTFrameProcessor API에 접근하려면 애플리케이션에서 Video Toolbox 프레임워크를 가져와야 합니다 그 후 클립을 처리하는 두 가지 주요 단계가 있습니다 첫 번째 단계는 효과를 선택하는 것입니다 이 단계에서 애플리케이션은 전체 세션 동안 효과를 사용하는 방법을 설명하는 설정 구성을 제공하여 처리 세션을 시작합니다 세션이 생성되면 애플리케이션은 프레임을 처리할 준비가 된 VTFrameProcessor 객체를 얻습니다 VTFrameProcessor는 프레임 기반 API로 애플리케이션은 입력 비디오 프레임과 관련 매개변수를 하나씩 전송해야 합니다 처리 완료 후 프레임워크는 출력 프레임을 반환합니다 VTFrameProcessor API는 다양한 사용 사례에 활용될 수 있습니다 몇 가지 예제를 살펴보고 구현 방법을 설명하겠습니다 설명하기 전에, 여러분이 참고하실 수 있는 완전한 샘플 코드가 이 발표에 첨부되어 있다고 알려 드리고 싶습니다 데모 애플리케이션의 테스트용 클립으로 효과를 체험해 보세요 비디오 편집과 실시간 비디오 향상 등 2가지 사용 사례에 초점을 두겠습니다 프레임 전환율, 초고화질, 모션 블러 및 시간적 노이즈 필터는 모두 비디오 편집 애플리케이션에 적합한 기능입니다 특히 비디오 품질이 중요할 때 유용하죠 먼저 프레임 전환율부터 시작하겠습니다 프레임 전환율은 비디오 클립의 프레임 수를 늘리는 과정으로 새로운 프레임을 합성하여 기존 프레임 사이에 삽입하는 방식으로 진행됩니다 주로 비디오 재생의 부드러움을 개선하기 위해 사용되며 특히 소스 및 대상 디스플레이 간의 프레임 속도 불일치로 인한 저더 현상을 해결하는 데 효과적입니다 누락된 프레임으로 인해 발생한 간격을 채우는 데도 도움이 됩니다 또한 슬로우 모션 효과를 만들 때 사용될 수 있으며 영화에서는 느린 재생을 통해 시각적으로 더 인상적인 액션 장면을 만들기 위해 이 효과를 자주 활용합니다 스포츠에서는 경기의 중요한 순간을 강조하고 분석하기 위해 슬로우 모션을 사용합니다 왼쪽에는 남자가 춤 루틴을 연습하는 비디오가 있습니다 오른쪽은 슬로우 모션 효과를 적용한 결과입니다 이 효과를 적용하면 시청자가 복잡한 춤 동작을 세세하게 감상할 수 있어 움직임이 더욱 멋있게 보입니다 이제 VTFrameProcessor API를 사용하여 프레임 전환율을 구현하는 방법을 시연하겠습니다 첫 번째 단계는 효과용 세션을 생성하는 것입니다 이를 위해 VTFrameProcessor 객체를 생성합니다 다음으로 configuration 객체를 생성합니다 프레임 전환율을 위해 VTFrameRateConversionConfiguration 유형을 사용하세요 구성을 초기화하려면 입력 프레임 너비와 높이 광학 흐름 사전 계산 여부 화질 수준, 알고리즘 버전 등 몇 가지 설정을 제공해야 합니다 이제 프레임 처리 엔진을 초기화하기 위해 startSession 메서드를 호출할 수 있습니다 두 번째 단계는 매개변수 객체로 프레임을 처리하는 것입니다 VTFrameRateConversionParameters 유형의 객체를 사용해야 합니다 하지만 매개변수 클래스 사용 전에 필요한 모든 버퍼를 할당해야 하죠 보통 모든 입력 및 출력 프레임 버퍼는 호출자가 할당합니다 구성 클래스의 소스 및 대상 픽셀 버퍼 속성을 사용하여 CVPixelBuffer 풀을 설정할 수 있습니다 먼저 현재 소스 및 다음 프레임 객체를 생성합니다 그다음 interpolationPhase 배열을 생성하여 보간된 프레임을 삽입할 위치를 지정합니다 배열 크기는 보간할 프레임 수를 나타냅니다 마지막으로 출력을 받을 버퍼로 구성된 목적지 배열을 생성합니다 이 배열의 크기는 interpolationPhase 배열과 동일합니다 버퍼가 준비되었으므로 나머지 매개변수를 설정할 수 있습니다 opticalFlow를 nil로 설정하여 프로세서가 흐름을 계산하도록 합니다 또한 submissionMode를 설정하여 프레임이 순서에 따라 전송되는지, 또는 무작위로 전송되는지 지정합니다 VTFrameRateConversionParameters가 생성되면 실제 처리를 위한 process 함수를 호출할 수 있습니다 요약하자면, 각 효과는 두 가지 유형의 클래스로 정의됩니다 VTFrameProcessorConfiguration 클래스는 효과의 처리 세션을 설정하는 방법을 설명하며 VTFrameProcessorParameters 클래스는 입력 및 출력 프레임과 관련된 모든 매개변수를 설명하죠 앱을 개발할 때 결정해야 할 중요한 사항 중 하나는 광학 흐름 사전 계산 여부입니다 광학 흐름 계산에는 비용이 많이 들 수 있으며 일부 앱은 렌더링 단계의 성능을 개선하기 위해 이를 사전에 처리합니다 광학 흐름을 사전에 계산하려면 VTOpticalFlowConfiguration과 VTOpticalFlowParameters 클래스를 사용하세요 구성에서 사전 계산된 흐름 매개변수가 false로 설정되면 프레임워크는 흐름을 실시간으로 계산합니다
이제 또 다른 중요한 비디오 편집 기능인 모션 블러에 대해 설명하겠습니다 모션 블러는 느린 셔터 속도를 시뮬레이션하여 움직이는 물체가 흐려지는 효과를 생성합니다 API를 통해 블러 강도를 조정하여 화면에서의 흐림 강도를 제어할 수 있습니다 블러는 동작이 자연스럽게 보이도록 하거나 빠른 물체에 속도감을 추가하는 것처럼 예술적인 이유로 사용되죠 왼쪽에 고속도로의 타임랩스 비디오가 있습니다 모션 블러 효과를 적용한 오른쪽 비디오에서는 움직임이 더 유동적으로 표현됩니다 타임랩스 비디오에 모션 블러를 적용하면 자연스러운 움직임이 재현되어 연속되는 정사진처럼 보이는 대신 더 사실적인 장면이 나타납니다 모션 블러 처리 세션을 생성하려면 VTMotionBlurConfiguration 클래스를 사용합니다 프레임 전환율 예시를 참고하세요 유사한 설정을 사용하거든요 다음으로 프레임을 처리하기 위해 VTMotionBlurParameters 객체를 초기화하는 방법을 다룰게요 모션 블러에는 next, previous 프레임 등 두 개의 참조 프레임이 필요하죠 클립의 첫 프레임에서 previous 프레임을 nil로 설정합니다 또한 클립의 최종 프레임에서 next 프레임을 nil로 설정해야 합니다 프레임 버퍼를 확보했으므로 VTMotionBlurParameters를 만들 수 있죠 프로세서가 광학 흐름을 계산하도록 흐름 매개변수를 nil로 설정합니다 그다음 블러 강도를 1에서 100 사이에서 선택합니다 모션 블러 매개변수를 생성한 다음 실제 처리를 시작하기 위해 process 함수를 호출합니다 이제 화상 회의, 실시간 스트리밍과 같은 실시간 사용 시나리오를 위한 두 가지 기능을 설명할게요 시간적 노이즈 필터링 저지연 프레임 보간 초고화질 효과는 모두 실시간 사용을 위해 설계되었습니다 이러한 기능은 성능을 고려하며 비디오를 개선합니다 저지연 효과의 경우 개선은 일반적으로 수신 기기에서 진행됩니다 이제 이 효과 중 두 가지를 설명해 드릴게요 먼저 저지연 초고화질을 설명하겠습니다 이 효과를 구현하려면 LowLatencySuperResolutionScalerConfiguration과 LowLatencySuperResolutionScalerParameters 클래스를 사용해야 합니다 두 클래스 모두 사용하기 쉽습니다 구성 클래스는 프레임 너비, 높이 및 스케일링 비율만 필요하며 파라미터 클래스는 소스 및 대상 프레임 버퍼만 필요합니다 이 예시는 저지연 초고화질이 화상 회의 세션을 어떻게 개선하는지 보여 줍니다 왼쪽 비디오에서는 수염을 가진 남자가 영상 통화 중 말하고 웃으며 손짓하고 있습니다 낮은 해상도로 인해 비디오가 흐릿하게 보입니다 초고해상도 효과를 적용한 결과인 오른쪽 영상에서 볼 수 있듯이 남자의 얼굴이 훨씬 선명해졌으며 특히 수염의 텍스처가 그렇습니다 저지연 프레임 보간도 실시간 화상 회의를 개선하기 위해 설계된 기능입니다 이 기술은 특히 연결 속도가 느릴 때 영상 통화 애플리케이션에 유용합니다 이 효과를 적용하려면 적절한 버전의 LowLatencyFrameInterpolationConfiguration과 LowLatencyFrameInterpolationParameters 클래스를 사용하세요 아까 저지연 프레임 보간이 저더를 완화하여 편안한 스트리밍 경험을 제공한다는 점을 설명해 드렸습니다 이 API에는 프레임 속도 더블링 및 해상도 업스케일링 기능을 하나의 필터로 결합한 유틸리티도 있습니다
처리 후 여성의 얼굴에 있는 특징과 배경이 더 선명해지고 스트리밍이 더 부드러워집니다 Video Toolbox 프레임워크는 이미 하드웨어 비디오 인코딩과 디코딩 기능에 대한 직접적인 접근을 비롯한 다양한 기능을 제공해 왔습니다 비디오 압축, 압축 해제 픽셀 형식 변환과 같은 서비스를 지원합니다 VTFrameProcessor API가 추가되었으므로 이제 개발자는 더 매력적인 애플리케이션을 만들 수 있습니다 VTFrameProcessor API에 대해 알아보셨으니 이 효과를 앱에 통합해 보세요 슬로우 모션, 모션 블러 등 새 효과로 비디오 편집 기능을 강화하세요 저지연 초고화질과 프레임 보간을 통해 실시간 스트리밍 경험을 개선하세요 오늘 다룬 내용은 VTFrameProcessor API로 만드실 수 효과의 일부 예시일 뿐입니다 이 비디오를 시청해 주셔서 감사합니다 여러분의 근사한 비디오를 기대하겠습니다
-
-
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 - 서론
비디오 애플리케이션에 자주 활용되는 프레임워크인 Video Toolbox가 ‘VTFrameProcessor’ API로 업그레이드되었습니다. 이 API는 Apple Silicon에 최적화된 ML 기반 비디오 처리 알고리즘의 모음입니다. macOS 15.4에서 처음 도입된 이 API를 이제 iOS 26에서도 사용할 수 있습니다. 이 세션에서는 활용 가능한 효과, 앱 통합 단계, 주요 사용 사례와 관련된 구현 예시를 보여 줍니다.
- 1:04 - 비디오 효과 개요
‘VTFrameProcessor’ API는 슬로우 모션용 프레임 전환율 전환, 저해상도 비디오를 향상시키는 초고해상도, 자연스러운 움직임을 표현하는 모션 블러, 부드러운 비디오 처리를 위한 시간적 노이즈 필터링, 화상 회의와 같은 실시간 사용 사례에 적합한 저지연 보간 및 초고해상도를 제공하여 다양한 비디오 시나리오에서 품질과 명확성을 개선합니다.
- 4:55 - 앱에 효과 추가하기
‘VTFrameProcessor’ API는 Video Toolbox 프레임워크를 통해 접근할 수 있으며, 애플리케이션에서 효과를 선택하고, 처리를 위한 입력 프레임을 전송하는 두 단계를 거쳐 비디오 클립을 처리하도록 합니다. 출력 프레임은 프레임워크가 반환합니다. 프레임 전환율 전환, 초고해상도, 모션 블러, 시간적 노이즈 필터링과 같은 기능을 갖춘 이 API는 비디오를 편집하고 실시간으로 비디오를 개선해야 할 때 적합합니다. 이 프레젠테이션에 첨부된 샘플 코드를 참고하세요.
- 6:46 - 사용 사례: 프레임 전환율 전환
프레임 전환율 전환은 새 프레임을 합성하여 클립의 프레임 수를 늘리는 비디오 처리 기술입니다. 이 기능은 비디오 재생의 부드러움을 개선하고, 저더를 제거하고, 슬로우 모션 효과를 활성화하므로 흔히 시각적 효과와 분석을 개선하기 위해 영화 제작이나 스포츠 분야에서 활용됩니다. 이 기능을 구현하려면 두 주요 단계에서 ‘VTFrameProcessor’ API를 사용해야 합니다. 첫 번째 단계는 입력 프레임 크기, 화질 수준, 알고리즘 버전과 같은 설정을 지정하는 구성 객체를 사용하여 세션을 만드는 것입니다. 두 번째 단계는 입력 및 출력 버퍼와 보간 설정을 관리하는 매개변수 객체를 사용하여 프레임을 처리하는 것입니다. 개발자가 결정해야 할 중요한 사항 중 하나는 계산량이 많은 프로세스인 광학 흐름의 사전 계산 여부입니다. 앱 성능에 영향을 미칠 수 있기 때문입니다.
- 11:16 - 사용 사례: 모션 블러 효과
비디오 편집에서 모션 블러는 느린 셔터 속도를 시뮬레이션하여 움직이는 물체가 흐려지도록 처리합니다. 이렇게 하면 움직임이 더 자연스러워지고 물체에 속도감이 추가됩니다. 이 효과는 ‘VTMotionBlurConfiguration’ 클래스를 통해 적용할 수 있으며, 두 개의 참조 프레임(next 및 previous)이 필요하고 블러 강도는 1~100의 범위에서 조정 가능합니다.
- 13:46 - 사용 사례: Low Latency Super Resolution 효과
저지연 초고화질은 화질을 업스케일링하여 실시간 비디오 스트림을 개선합니다. 이 프로세스에는 구성 클래스, 파라미터 클래스 등 두 개의 간단한 클래스가 사용됩니다. 예시를 통해 이러한 기능이 화상 통화의 선명도를 어떻게 개선하는지 보여 줍니다.
- 14:55 - 사용 사례: Low Latency Frame Interpolation
저지연 프레임 보간은 저더를 완화하고 더 편안한 스트리밍 경험을 제공하여 특히 연결 속도가 느린 상황에서 실시간 비디오 스트림을 개선합니다. 이 API는 프레임 속도 더블링 및 해상도 업스케일링 기능을 합치는 필터도 제공하므로 얼굴 특징과 배경이 선명해지고 스트림이 더 부드럽게 재생되도록 합니다. 이러한 기능 외에도 ‘VTFrameProcessor’ API는 슬로우 모션, 모션 블러, 개선된 실시간 스트림 경험 등을 갖춘 매력적인 애플리케이션을 제작하는 데 도움이 됩니다.