iOS 11 라이브 포토에 날개를 달다 – JPEG을 대체할 HEIF

얼마 전 WWDC 2017에서 iOS 11의 새 기능들이 발표됐습니다. iOS 11 소개중에 제일 관심이 갔던 부분은 사진앱의 개선이었는데 라이브 포토와 관련하여 추가된 몇 가지 기능들이 흥미로웠습니다. 지금까지의 라이브 포토는 단순히 JPEG 포맷 사진 1장과 함께 사진이 찍히기 전/후의 상황을 담은 짧은 동영상을 H.264 포맷으로 함께 저장하는 것이었지만(관련 링크) iOS 11에서는 사진파일의 포맷이 HEIF(High Efficiency Image File Format)로 바뀌면서 다양한 기능들을 추가할 수 있게 되었습니다. 이번 글에서는 먼저 라이브 포토에 추가된 기능들을 살펴보고 iOS 11에서 JPEG을 대체할 HEIF가 이러한 기능들을 구현하는데 어떻게 도움이 되는지 살펴보도록 하겠습니다.

라이브 포토 날개를 달다.

아래의 사진은 WWDC 2017 키노트 발표 장면을 캡처한 것인데 라이브 포토에 추가된 기능들을 설명하고 있습니다.

iOS 11 라이브 포토에 날개를 달다 - JPEG을 대체할 HEIF

iOS 11의 라이브 포토에 추가된 기능들 (출처 – WWDC 2017 키노트 발표 영상 캡처)

우선 Trim과 Select key photo는 밀접하게 연관된 기능인데, Trim은 사진을 찍은 순간의 전후로 저장된 영상에서 필요없는 부분을 잘라낼 수 있는 기능이고 Select Key photo는 사진으로 저장된 스틸샷(still shot) 대신 사진이 찍힌 순간의 앞/뒤 영상중의 한 장면을 라이브 포토의 스틸샷으로 재설정 할 수 있는 기능입니다. JPEG으로 저장되는 스틸샷 사진과는 다른 해상도의 H.264 포맷을 저장하던 iOS 10까지의 라이브 포토에서는 지원할 수 없던 기능인데 사진을 동영상에 가까운 포맷으로 저장하는 HEIF의 특징에 의해 가능하게 된 기능입니다. iPhone으로 사진을 많이 찍는 편이라 저장 공간의 부담 때문에 라이브 포토기능은 사용하지 않았는데 용량 부담이 훨씬 적은 HEIF를 사용하는 iOS 11이라면 항상 라이브 포토로 사진을 찍어 멋진 순간을 포착할 확률을 높일 수 있을 것 같습니다. 그 다음으로 소개된 Mute 기능은 라이브 포토에 저장된 영상의 소리를 끌 수 있는 기능으로 보이는데 별로 중요한 기능이 아니어서인지 키노트 발표에서도 별다른 설명은 하지 않습니다.

iOS 11 라이브 포토에 날개를 달다 - JPEG을 대체할 HEIF

iOS 11의 라이브 포토의 Loop 기능 (출처 – WWDC 2017 키노트 발표 영상 캡처)

다음으로 Loop 기능은 라이브 포토에 저장된 영상 중에서 machine learning을 통해 거의 비슷한 두 프레임을 찾은 후 그 사이 구간을 반복해서 보여줌으로서 특정 동작이 반복되는 효과를 자연스럽게 만들어내는 것입니다. 키노트 발표에서는 위와 같이 불던 풍선껌이 터지는 장면을 담은 라이브 포토를 예제로 사용했는데 꽤나 자연스럽게 풍선이 계속 부풀었다 터지는 라이브 포토가 만들어 집니다. Bounce 기능은 라이브 포토 영상의 특정 구간을 한번 재생한 후에 다시 역으로 재생한 영상을 추가하는 기능인데 키노트 발표중에는 수영장에 뛰어들었던 아이들이 다시 물 밖으로 날아오르는 영상을 만드는 예제를 보여주고 있습니다. 특별한 기능은 아니지만 별다른 영상 편집 프로그램이 없이도 쉽게 재미있는 영상을 만들 수 있는 것이 장점으로 보입니다.

iOS 11 라이브 포토에 날개를 달다 - JPEG을 대체할 HEIF

iOS 11의 라이브 포토의 Long Exposure 기능 (출처 – WWDC 2017 키노트 발표 영상 캡처)

라이브 포토에 추가된 기능 중에 가장 마음에 들었던 기능은 Long Exposure 기능이었는데 위의 사진과 같이 부드러운 물줄기의 표현이 가능합니다. 기존의 DSLR을 사용한다면 장노출 촬영을 위한 삼각대와 노출 과다를 방지하기 위한 ND 필터가 있어야 찍을 수 있는 사진인데 단노출 사진을 여러장 겹치는 방법으로 장노출과 같은 효과를 훌륭히 구현해 낸 것으로 보입니다. 무거운 DSLR을 버리고 iPhone으로 사진을 촬영하는 사람이 좀 더 늘어날 것 같은 느낌입니다.

HEIF 둘러보기

지금까지 iOS 11 라이브 포토에 추가된 기능들을 살펴보았는데, 이제 HEIF가 이런 기능들을 구현하는데 유리한 이유를 살펴 보도록 하겠습니다. JPG와 HEIF의 가장 큰 차이점은 포맷을 정할 때 처음부터 여러장의 이미지를 하나의 파일로 저장하는 경우를 고려했는지의 여부입니다. JPEG 압축 표준이 정해지던 시점에는 라이브 포토와 같은 기능은 등장하지 않았고 연사나 노출/포커스 브라케팅 촬영도 널리 사용되지 않는 상황이었습니다. 하지만 최근들어 스마트폰 카메라의 성능이 향상되면서 연사는 기본적인 기능이 되었고 두개의 카메라를 이용한 스테레오 촬영이나 라이브 포토와 같은 기능이 추가 되면서 하나의 파일에 여러장의 이미지를 효율적으로 저장할 필요성이 증가하였고 그 결과 HEIF가 등장했습니다.

HEIF와 관련된 자세한 정보는 링크의 사이트에서 찾아볼 수 있는데, 파일 포맷은 아래 그림과 같은 ISOBMFF(ISO Base Media File Format)를 바탕으로 하고 있습니다. ISOBMFF는 비디오나 오디오를 저장하기 위한 파일 구조에 대한 표준인데 파일의 맨 처음에 4 character code(4CC)로 이루어진 ftyp 필드에 어떤 내용이 기술 되느냐에 따라 MP4, DVB, 3GPP, HEIF 등으로 다양하게 디코딩 될 수 있습니다. ftyp 필드 아래에 moov, meta, mdat 등으로 표시된 부분은 ‘박스’로 불리는 구조체인데 moov(movie)박스가 ftyp 필드 바로 다음에 위치하고 mdat(media data) 박스가 맨 마지막에 위치하는 것은 표준에 정해진 사항입니다(관련 링크). meta 박스는 HEIF에만 사용되는 박스로 코딩된 영상정보를 이미지 뷰어에서 보여줄 때 어떤 작업을 해야하는지에 대한 정보를 담고 있습니다.

iOS 11 라이브 포토에 날개를 달다 - JPEG을 대체할 HEIF

HEIF에 사용되는 ISOBMFF의 구조 (출처 – https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format)

HEIF의 경우 ftyp 필드(Brand)로 아래 테이블과 같은 값을 가질 수 있는데, H.265 동영상 압축 표준인 HEVC(High Efficiency Video Codec)를 기본으로 하되 다른 코딩방식으로 확장될 수도 있습니다. 주목할 특징으로는 단일 스틸샷으로 이루어진 image와 여러장의 연속된 샷으로 이루어진 sequence 두 가지 방식을 모두 지원하기 때문에 단일 이미지는 물론 연속된 여러장의 이미지를 하나의 파일에 저장하기가 용이하다는 점입니다. Image의 경우 HEVC intra frame으로 독립적으로 인코딩되어 mdat 박스안에 “Item”으로 저장되고 sequence의 경우 기준이 되는 intra frame이 인코딩 된 뒤에 나머지 연속된 샷들은 intra frame과의 차이(prediction)를 기록하여 moov 박스내에 “Track”(위의 그림에서는 Trak으로 표기)으로 저장됩니다. 이 경우 연속된 샷들은 HEVC 동영상 압축방식의 일부 기능을 적용하여 인코딩 되기 때문에 여러개의 JPEG 파일로 저장하는 방식에 비해 파일의 용량이 크게 줄어듭니다.

HIEF에서 사용하는 Brand와 MIME Type/subtype
BrandCoding formatImage/esequenceMIME TypeMIME subtypeFile extension
mif1Anyimageimageheif.heif
msf1Anysequenceimageheif-sequence.heif
heicHEVC (Main/Main Still Picture profile)imageimageheic.heic
heixHEVC (Main 10/Format range extensions profile)imageimageheic.heic
hevcHEVC (Main/Main Still Picture profile)sequenceimageheic-sequence.heic
hevxHEVC (Main 10/Format range extensions profile)sequenceimageheic-sequence.heic

HEIF 파일의 경우 위의 파일 구조에서 표시된 것과 같이 여러개의 “Item”“Track”을 가질 수 있는데, HEIF에 포함된 여러 이미지들은 아래와 같은 역할(Role)들을 가질 수 있습니다. JPEG 파일에 포함된 정보는 거의 대부분이 단일 이미지를 표시하기 위한 것이지만 HEIF 파일에 포함된 정보는 여러장의 이미지와 그 중에 대표로 사용될 이미지, 썸네일, 그리고 직접 표시되지는 않지만 이미지 뷰어에서 최종 출력을 보여주기 위해 처리해야 할 작업을 위한 다양한 정보를 담고 있는 것이 차이점 입니다. 앞에서 설명한 iOS 11 라이브 포토의 Select key photo 기능을 아래 표의 Role과 관련지어 생각해보면, HEIF 파일에 라이브 포토의 모든 프레임이 원본 해상도로 저장되어 있는 상태에서 단순히 “cover image”가 어떤 이미지인지를 바꾸는 동작임을 알 수 있습니다.

RoleDescription
cover image파일에 Item 이나 Track으로 저장된 여러 이미지 중 대표로 표시되는 이미지. 파일 당 하나의 cover image만 가질 수 있음.
thumbnail image마스터 이미지의 저해상도 버전
auxiliary image마스터 이미지 표시를 위한 부가 정보로 깊이나(depth)나 투명도(alpha) 맵등의 정보
master image원본해상도의 표시가능한(displayable) 이미지.
hidden image표시되어서는 안 되지만 derived image 등의 계산을 위한 입력으로 활용되는 이미지.
pre-derived coded image다른 이미지로 부터 계산된 후 코딩된 이미지. 예를들어, high dynamic range 이미지는 노출 브라케팅 이미지로부터 계산된 후 코딩되어 저장될 수 있음.
coded image코딩되어있는 이미지.
derived image저장된 부가정보(auxiliary/hidden image)를 바탕으로 master image에 일련의 연산을 거쳐 계산된 이미지.

HEIF에 포함된 다양한 정보는 이미지 뷰어에서 일련의 처리작업을 거친 후 출력이미지로 표현되는데 아래 그림은 수행되어야 할 작업을 나타내고 있습니다. 단순히 코딩(압축)된 단일 이미지를 디코딩해서 보여줄 수도 있지만, 디코딩 된 이미지와 함께 HEIF 파일에 포함된 auxiliary/hidden 이미지를 이용하여 파생된(derived) 이미지 여러장을 겹치거나 격자형식으로 함께 보여주는 동작을 수행하여 재건(reconstructed)이미지를 만들어 낼 수도 있습니다. 재건 이미지에 필요할 경우 다시 rotate나 crop 연산을 수행하여 최종 출력이미지를 만드는데 crop을 수행하더라도 이미지에 대한 정보는 그대로 유지된 상태에서 이미지의 어느 부분을 보여줄 지에 대한 정보만을 수정하는 방식이기 때문에 원본 이미지와 영상정보는 그대로 보존됩니다. 파일을 수정했다가도 언제든지 원본으로 돌릴 수 있는 non-destructive editing을 파일포맷 자체에서 지원하는 것이지요.

전반적으로 모바일 기기들의 컴퓨팅 파워가 증가하면서 이미지 뷰어의 작업 능력이 늘어났고, HEIF는 이 능력을 활용하여 이미지 파일에 많은 정보를 담아두고 뷰어에서 거치는 작업에 따라 다양한 방식으로 하나의 파일이 표시될 수 있도록 한 것입니다. 앞에서 설명한  iOS 11 라이브 포토의 Long Exposure 기능은 투명도 정보를 가지고 있는 auxiliary이미지(위의 표 참고)를 이용하여 만든 파생이미지 여러장을 겹치는 표시 방식이 활용된 것으로 추측됩니다. 아래 작업을 통해 표현될 수 있는 HEIF 파일의 출력이미지 예제들은 링크에서 볼 수 있습니다.

iOS 11 라이브 포토에 날개를 달다 - JPEG을 대체할 HEIF

HEIF 파일을 표시하기 위해 파일뷰어에서 처리해야 할 작업 (출처 – http://nokiatech.github.io/heif/technical.html의 그림1을 한글화)

HEIF는 동영상을 함께 저장하는 것을 고려했으므로 저장된 이미지를 어떤 순서로 보여주어야 할 지를 결정하기 위해 아래와 같은 feature들을 포함합니다. iOS 11 라이브 포토에 추가된 기능과 연관지어 생각해보면 Trim이나 Bounce 기능은 edit list 정보를 수정하는 것이고 loop 기능은 edit list와 looping 정보를 함께 수정하는 동작 정도로 생각할 수 있습니다.

FeatureDescription
non-displayable sample출력 되지는 않지만 다른 프레임을 그리기 위한 기준 프레임에 부여
timed vs. non-timed playback여러장의 이미지가 시간순서를 가지는 비디오로 표현될지 시간 순서가 상관없는 갤러리의 형태로 표현될지를 결정
edit list연속된 이미지에서 출력될 이미지의 범위와 순서 및 속도를 제어하기 위한 리스트.
loopingedit list의 반복 횟수를 결정하기 위한 정보 (무한 반복 또는 일정 시간 반복)

마지막으로 이미지 파일 용량 변화에 대해 언급하면 HEIF 채용으로 인해 JPEG 대비 평균적으로 1/2로 줄어들었다는 내용이 WWDC 발표중에 언급되며, 링크에 설명된 test 이미지들에 대해서는 1/2.4배 정도로 줄어든다고 합니다. iOS 11에서의 HEIF 채용은 늘어난 컴퓨팅 파워를 이용해서 사용자 경험을 향상시킨 훌륭한 결정이라고 생각되는데, 아직은 HEIF가 널리 사용되고있지 않으므로 호환성을 위해 이메일이나 메신저 앱을 통해 iOS 기기를 사용하지 않는 상대방에게 사진을 보낼 때는 JPEG으로 변환하는 작업이 필수적으로 생각됩니다.

 

You may also like...

댓글 남기기