nyancoder

WWDC 2021 - Capture high-quality photos using video formats 본문

WWDC/WWDC 2021

WWDC 2021 - Capture high-quality photos using video formats

nyancoder 2021. 7. 12. 06:04

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10247/

 

 

  • 사진이나 비디오 촬영 시에 사용자가 정의한 렌더링은 좋은 품질을 얻더라도 비용이 많이 들 수 있습니다.
  • 때로는 프레임이 끊기는 것을 방지하기 위해 낮은 해상도를 선호할 수 도 있습니다.
  • 이런 여러 가지 시나리오가 있기 때문에 품질과 성능의 원하는 타협점을 찾는 것이 중요합니다.

  • 사진을 찍기 위해 카메라를 제어할 수 있는 AVCaptureDevice를 이용해서 AVCaptureDeviceInput를 구성합니다.
  • 그다음 AVCaptureSession 객체를 연결하고 그 뒤에 사진의 결과를 받을 AVCapturePhotoOutput을 추가합니다.
  • 이러한 요소 간의 연결에 AVCaptureConnection을 사용합니다.

  • AVCapturePhotoOutput에서 capturePhoto를 호출하여 사진을 촬영할 수 있습니다.
  • capturePhoto 메서드에 전달된 AVCapturePhotoSettings를 사용하여 촬영을 설정할 수 있습니다.
  • 촬영된 사진은 delegate의 함수로 전달되며 AVCapturePhoto로 전달됩니다.

  • 이전에는 최상의 품질의 사진을 캡처하려면 AVCapturePhotoSettings에서 isAutoStillImageStabilizationEnabled 속성을 true로 설정해야 했습니다.
  • 하지만 지금은 Still Image Stabilization 이외에도 Smart HDR, Deep Fusion 등 다양한 다중 이미지 처리 기술이 있기 때문에 새로운 방법이 필요합니다.

  • iOS 13에서 제공되는 AVCapturePhotoOutput.QualityPrioritization을 사용하면 품질과 성능의 밸런스를 쉽게 달성할 수 있습니다.
  • 속도가 중요하면 .speed를 사용하고 균형이 중요하면 .balanced를, 품질이 중요하면 .quality를 사용할 수 있습니다.
  • 여기서 지정된 값은 촬영 결과에 대한 힌트를 제공하는 것일 뿐 알고리즘을 지정하는 것은 아닙니다.
  • 따라서 AVCapturePhotoOutput은 조명과 같은 환경에 따라 적합한 알고리즘을 선택하며 이는 촬영에 걸리는 시간이 다양하다는 것을 의미합니다.

  • AVCaptureResolvedPhotoSettings에서 사진 촬영에 걸리는 시간을 나타내는 photoProcessingTimeRange 속성을 제공합니다.
  • 이 속성을 활용하여 사용자의 UI에 촬영 결과를 기다리는 상태를 표현하는 등의 처리를 할 수 있습니다.

  • capturePhoto 메서드를 호출하기 전에 AVCapturePhotoSettings의 photoQualityPrioritization를 이용하여 품질 우선순위를 지정할 수 있습니다.
  • 이 우선순위는 AVCapturePhotoOutput의 최대 품질 우선순위를 초과할 수 없습니다.

  • 적용되는 알고리즘은 사진과 비디오 형식 등 상황에 따라 차이가 있습니다.
  • Speed로 설정된 경우 약간의 노이즈 감소만이 적용된 결과를 얻을 수 있습니다.
  • Balanced로 설정된 경우 약간 더 느리지만 더 나은 품질을 얻는 융합 알고리즘을 선택합니다.
  • Quality로 설정된 경우에는 현재 디바이스나 밝기에 따라 많은 시간을 사용하여 최상의 품질을 만들어 냅니다.
  • 비디오 촬영의 경우에는 모든 옵션에서 최소한의 처리만을 합니다.

  • 사진 형식을 선택하면 동작이 사진 촬영을 위주로 이루어지며 Live Photo, ProRAW 등과 같은 사진 형식에서만 동작하는 기능을 사용할 수 있습니다.
  • 사용 가능한 최고 해상도로 제공되지만 프레임 속도는 초당 30 프레임으로 제한됩니다.
  • session preset를 photo로 설정하거나 isHighestPhotoQualitySupported가 true인 포맷을 선택하면 됩니다.

  • 비디오 형식을 선택하면 동작이 비디오 촬영 중심이 되므로 60 fps와 같은 높은 프레임 속도를 사용할 수 있으며 녹화나 스트리밍에 적합한 해상도가 됩니다.
  • session preset이 photo가 아니거나 isHighestPhotoQualitySupported가 false인 포맷을 선택하면 됩니다.
  • 몇몇 사진 형식에서만 제공되는 기능을 사용할 수 없는데 비용이 비싼 연산을 적용할 경우 프레임 드롭이 발생하여 실시간 영상에서 사용되는 몇몇 핵심 기능이 중단될 수 있기 때문입니다.

  • 그래서 지금까지는 품질과 속도 사이의 균형을 맞추어 프레임 드롭이나 프리뷰가 멈추는 등의 사용자 경험이 나빠지는 일이 발생하는 것을 방지하고 있습니다.
  • 까다로운 조건에서도 항상 반응적으로 작동하도록 비디오 형식을 설계하였습니다.

  • 이제는 비디오 포맷을 사용해서도 높은 품질을 얻을 수 있게 되었습니다.

  • 오른쪽에 있는 어린 소년의 얼굴은 노이즈가 훨씬 적고, 머리카락도 오른쪽이 더 나은 광택을 보여줍니다.

  • 오른쪽 이미지의 눈에 있는 반사광이 더 생생합니다.

  • 저조도 상황에서도 오른쪽 이미지가 더 적은 노이즈와 개선된 반사광을 보여줍니다.

  • 의자의 가죽 질감도 더 잘 보존되어 있습니다.

  • 지원되는 비디오 형식에 대한 알고리즘 매핑을 살펴보겠습니다.

  • Speed 옵션을 선택하면 여전히 최소한의 기본적인 노이즈 감소만이 적용된 결과를 얻을 수 있습니다.
  • Balanced를 사용하면 처리시간은 약간 증가하고 품질은 크게 향상되며, 프레임 드롭이 없습니다.
  • Quality를 선택하면 더 나은 품질을 얻을 수 있지만 하드웨어 성능에 따라 프레임이 일부 드롭되거나 미리보기가 멈출 수 있습니다.

  • iPhone XS이상의 모든 기기에서 사용 가능합니다.
  • 1280x720은 가장 널리 사용되는 형식이며 초당 30 및 60 프레임을 모두 지원합니다.
  • 1920x1080 역시 초당 30 및 60 프레임을 지원합니다.
  • 1920x1440, 4k에서는 초당 30 프레임을 지원합니다.

  • iOS 15에서 AVCaptureDevice.Format에 isHighPhotoQualitySupported 속성이 추가됩니다.
  • 이 기능을 지원하는 format의 경우 이 속성은 true가 되며, 이 값이 true인 모든 format은 video format이 보장됩니다.

  • 새 속성 isHighPhotoQualitySupported는 새로 나온 품질의 비디오를 지원합니다.
  • 기존 isHighestPhotoQualitySupported는 사진 형식이며 비디오 포맷이 나은 품질을 지원하는지는 알 수 없습니다.

  • 기존에 AVCapturePhotoOutput과 .balanced속성을 사용하고 있는 경우에는 자동 적용됩니다.
  • .speed 속성을 사용하고 있는 경우에는 .balanced로 업데이트만 하면 더 나은 결과를 얻을 수 있습니다.
  • 기존의 AVCaptureStillImageOutput를 사용하고 있으면 코드의 변경이 필요합니다.

  • iOS15 이전에 컴파일된 경우에는 자동으로 .balanced로 처리됩니다.
  • .quality로 설정한 경우에는 iOS15 SDK로 재컴파일만 하면 됩니다.

  • 이 기능은 현재 AVCaptureSession에서만 작동하며 AVCaptureMultiCamSession에서는 작동하지 않습니다.
  • AVCaptureStillImageOutput은 이 기능을 지원하지 않습니다.
  • .balanced 또는 .quality를 사용하는 경우 사진과 녹화되는 비디오가 다르게 보일 수 있습니다.
  • 사진과 비디오가 동일하게 보여야 한다면 .speed를 사용해야 합니다.

 

목차: https://nyancoder.tistory.com/2

Comments