모션 포토 형식 1.0

모션 포토는 스틸 사진 이미지와 짧은 동영상(오디오 녹음 포함)이 포함된 단일 파일입니다. 이러한 유형의 미디어를 통해 사용자는 고해상도 정지 이미지는 물론 동영상과 사운드를 통해 이미지를 촬영한 감정과 분위기를 포착할 수 있습니다.

종속 항목

다음은 이 사양의 표준 참조입니다.

소개

'MUST', 'MUST NOT', 'REQUIRED', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY' 및 'OPTIONAL'의 사용은 RFC2119에 정의된 IETF 표준에 의거합니다.

모션 사진 형식

모션 사진 파일은 기본 정지 이미지 파일인 JPEG, HEIC 또는 AVIF로 구성되며 보조 동영상 파일이 추가됩니다. 기본 이미지에는 정지 이미지 파일 및 동영상 파일 콘텐츠를 표시하는 방법을 설명하는 카메라 XMP 메타데이터와 동영상 파일 콘텐츠를 찾는 방법을 설명하는 컨테이너 XMP 메타데이터가 포함됩니다.

울트라 HDR JPEG의 경우처럼 이미지 파일에는 게인맵이 있을 수 있습니다.

파일 이름 패턴

작성자는 다음 정규 표현식과 일치하는 파일 이름을 사용해야 합니다.

^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)

패턴을 따르지 않으면 리더가 XMP 메타데이터, 첨부된 동영상 파일 또는 동영상 콘텐츠를 무시할 수 있습니다.

미디어 데이터 인코딩

기본 이미지에는 파일 컨테이너에 있는 후속 미디어 파일의 순서와 속성을 정의하는 컨테이너 요소 XMP 메타데이터 디렉터리가 포함됩니다. 컨테이너의 각 파일 디렉터리에는 상응하는 미디어 항목이 있습니다. 미디어 항목은 파일 컨테이너 내 위치와 연결된 각 파일의 기본 속성을 설명합니다.

XMP 속성

두 개의 XMP 메타데이터 세트가 모션 사진 형식의 추가 시맨틱 정보를 정의하는 데 사용됩니다. 메타데이터는 어떤 순서로든 표시될 수 있습니다.

카메라 메타데이터

카메라 메타데이터는 모션 사진의 기본 이미지와 동영상 부분을 표시하는 방법에 관한 정보를 인코딩합니다.

  • 네임스페이스 URI는 http://ns.google.com/photos/1.0/camera/입니다.
  • 기본 네임스페이스 프리픽스는 Camera입니다.

정지 이미지 파일 XMP 메타데이터에 다음과 같은 속성이 나타날 수 있습니다.

이름

유형

설명

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

이러한 속성은 Microvideo V1 사양의 일부였습니다. 이 사양에서 삭제되며 있는 경우 무시해야 합니다.

특히 MicroVideoOffset 속성은 파일에서 동영상 데이터를 찾는 GContainer:ItemLength 값으로 대체됩니다.

Camera:MotionPhoto

Integer

0: 파일이 모션 사진으로 처리되지 않아야 함을 나타냅니다.

1: 파일을 모션 사진으로 처리해야 함을 나타냅니다.

다른 모든 값은 정의되지 않으며 0과 동일하게 취급됩니다.

값이 0 또는 음수이면 동영상이 실제로 파일에 추가되더라도 파일은 항상 모션 사진이 아닌 사진으로 취급됩니다.

XMP는 대부분의 잘 작동하는 편집기에 의해 이전되므로 추가된 동영상이 제거된 경우에도 이 필드의 정적 이미지 파일의 잔여 값이 1로 유지될 수 있습니다. 따라서 이 필드는 확실하지 않으며 독자는 동영상이 있는지 항상 확인해야 합니다.

Camera:MotionPhotoVersion

Integer

모션 사진의 파일 형식 버전을 나타냅니다. 이 사양은 버전 '1'을 정의합니다.

Camera:MotionPhotoPresentationTimestampUs

Long

이미지에 해당하는 동영상 프레임의 프레젠테이션 타임스탬프 (마이크로초)를 나타내는 long 값입니다. 값이 -1로 설정되어 설정되지 않았거나 지정되지 않음을 나타낼 수 있습니다.

프레젠테이션 동작

Camera:MotionPhotoPresentationTimestampUs가 XMP 패킷에 없는 경우 리더는 동영상 트랙의 중간에서 가장 가까운 타임스탬프 바로 앞에 있는 프레젠테이션 타임스탬프(즉, 동영상 트랙의 길이를 2로 나눈 값)를 사용해야 합니다.

XMP 패킷에 Camera:MotionPhotoPresentationTimestampUs가 있고 동영상에 "application/motionphoto-image-meta"이 있는 경우 동일한 값이 해당 트랙의 primaryImageFrameScoreDescr presentationTimestampUs 필드에 표시되어야 합니다. XMP 패킷에 Camera:MotionPhotoPresentationTimestampUs가 없고 메타데이터 트랙이 있는 경우 메타데이터 트랙의 값은 -1이어야 합니다.

컨테이너 요소

컨테이너 요소는 기본 이미지의 XMP 메타데이터로 인코딩되며 컨테이너의 미디어 항목 디렉터리를 정의합니다. 미디어 항목은 디렉터리의 미디어 항목 요소와 동일한 순서로 컨테이너 파일에 있어야 하며 꼭 꽉 차게 패킹되어야 합니다.

  • 네임스페이스 URI는 http://ns.google.com/photos/1.0/container/입니다.
  • 기본 네임스페이스 프리픽스는 Container입니다.

디렉터리는 기본 이미지 항목을 하나만 포함할 수 있으며 디렉터리의 첫 번째 항목이어야 합니다.

요소 이름

유형

설명

Directory

정렬된 구조체 배열

컨테이너의 레이아웃과 콘텐츠를 정의하는 Container:Item 구조의 정렬된 배열.

항목 요소

미디어 항목 요소는 애플리케이션에서 각 항목을 어떻게 사용해야 하는지 설명합니다.

  • 네임스페이스 URI는 http://ns.google.com/photos/1.0/container/item/입니다.
  • 기본 네임스페이스 프리픽스는 Item입니다.

첫 번째 미디어 항목은 기본 이미지여야 합니다. 항목 MIME 유형 값에 나열된 이미지 MIME 유형 중 하나를 지정하는 Mime 속성을 포함해야 합니다. 기본 항목의 길이는 파일 컨테이너의 시작 부분에서 시작하는 MIME 유형에 따라 기본 이미지를 파싱하여 결정할 수 있습니다.

첫 번째 미디어 항목에는 인코딩된 기본 이미지의 끝과 다음 미디어 항목의 시작 부분 사이의 추가 패딩을 지정하는 Padding 속성이 포함될 수 있습니다. 첫 번째 미디어 항목만 Padding 속성을 포함할 수 있습니다.

각 미디어 항목은 Mime 속성을 포함해야 합니다. 보조 미디어 항목에는 길이 속성도 포함되어야 합니다.

순차 미디어 항목은 파일 컨테이너 내에서 리소스 데이터를 공유할 수 있습니다. 첫 번째 미디어 항목은 파일 컨테이너에서 리소스 위치를 결정하며, 후속 공유 미디어 항목에는 리소스 데이터 자체가 컨테이너인 경우 Length이 0으로 설정됩니다.

컨테이너의 미디어 항목 리소스 위치는 앞에 오는 보조 항목 리소스의 Length 값을 기본 이미지 인코딩 길이에 더한 다음 지정된 경우 Padding를 더하여 결정됩니다.

속성 이름

유형

설명

Mime

String

필수 항목입니다. 컨테이너에 있는 미디어 항목의 MIME 유형을 나타내는 간단한 문자열입니다.

Semantic

String

필수 항목입니다. 미디어 항목의 애플리케이션별 의미를 나타내는 간단한 문자열입니다. 정의는 항목 시맨틱 값 섹션을 참고하세요.

Length

Integer

동영상 컨테이너를 포함한 보조 미디어 항목에 필수입니다. 항목의 바이트 단위 양의 정수 길이입니다. 미디어 항목은 인코딩이 적용되지 않은 원본 형식이어야 합니다. 길이 값은 파일에 있는 바이트의 실제 길이입니다.

보조 미디어 항목의 길이가 0이면 미디어 항목 리소스가 이전 미디어 항목과 공유됨을 나타냅니다. 기본 미디어 항목에서 길이는 0이어야 합니다.

Padding

Integer

[JPEG 기반 모션 사진]

기본 미디어 항목의 선택사항입니다. 인코딩된 기본 이미지의 끝과 다음 미디어 항목의 시작 부분 사이의 추가 패딩(바이트)이 포함된 간단한 문자열입니다.

[HEIC/AVIF 기반 모션 사진]

기본 미디어 항목에 필요합니다. 값은 모션 사진 동영상 데이터 ('mpvd') 상자의 헤더 길이인 8과 같아야 합니다.

항목:MIME 유형 값

Item:Mime 속성은 각 미디어 항목의 MIME 유형을 정의합니다.

설명

image/jpeg

JPEG 이미지

image/heic

HEIC 이미지

image/avif

AVIF 이미지

video/mp4

MP4 컨테이너

video/quicktime

MOV 컨테이너

항목:시맨틱 값

Item:Semantic 속성은 컨테이너 디렉터리에 있는 각 미디어 항목의 애플리케이션별 의미를 정의합니다.

Value

설명

Primary

미디어 항목이 컨테이너의 기본 디스플레이 지원 이미지임을 나타냅니다. 모션 사진에는 이 시맨틱 항목이 포함된 항목이 하나만 있어야 합니다.

MotionPhoto

미디어 항목이 동영상 컨테이너임을 나타냅니다. 모션 사진에는 이 시맨틱 항목이 포함된 항목이 하나만 있어야 합니다. 이 미디어 항목의 위치는 파일 끝에 있어야 합니다. 이 미디어 항목의 바이트가 종료된 후에는 다른 바이트를 배치할 수 없습니다.

기본 울트라 HDR 이미지를 사용한 모션 사진

이 사양 및 울트라 HDR 이미지 사양에 정의된 항목 시맨틱 값 규칙에 따라 기본 울트라 HDR 이미지가 있는 모션 사진은 항목 시맨틱이 "GainMap"인 미디어 항목도 포함해야 합니다. 또한 모션 사진을 인코딩하는 작성기는 동영상 항목 요소 앞에 게인맵 항목 요소를 배치해야 합니다.

ISOBMFF 이미지 관련 동작

ISOBMFF 기반 이미지가 포함된 모션 사진 (예: HEIC 및 AVIF 이미지)는 ISO/IEC 14496-1:2010(E) 8절에 정의된 구문 설명 언어의 시맨틱스를 사용하여 설명된 파일의 이미지 부분이 최상위 '모션 사진 동영상 데이터' 상자로 끝나는 구조여야 합니다.

// Box as defined in ISO/IEC 14496-12:2015: 4.2
aligned(8) class MotionPhotoVideoData extends Box('mpvd') {
  bit(8) data[];
}

여기서 'data' 필드는 모든 동영상 바이트를 포함합니다. 특별한 값 '0'은 모션 사진 동영상 데이터 상자의 크기에 허용되지 않습니다. (Box를 확장하는 클래스 크기 정의는 ISO/IEC 14496-12:2015: 4.2를 참고하세요.)

또한 ISOBMFF 이미지의 XMP는 기본 미디어 항목의 패딩 속성 값을 모션 사진 동영상 데이터 상자 헤더의 크기(크기 및 이름 헤더)의 크기(바이트 단위)와 동일하게 정의해야 합니다.

샘플 HEIC 기반 모션 사진의 상자 구조를 보여주는 그림 1을 참고하세요.

HEIC 모션 파일의 요소 배열을 보여주는 선 다이어그램

그림 1. 단일 HEIC 모션 사진 파일 내 샘플 HEIC 이미지의 최상위 상자를 보여주는 삽화 상자의 순서는 주로 설명을 위한 것이며 (HEIF 또는 동영상 파일 구성 방법에 관한 관련 표준을 참고) 'mpvd' 상자는 모든 HEIC 이미지 파일의 상자 뒤에 나와야 합니다.

동영상 컨테이너 콘텐츠

기본 이미지에 추가되는 동영상 컨테이너 파일에는 기본 동영상 트랙이 하나 이상 포함되어야 합니다. 이 트랙은 필수이며 AVC, HEVC 또는 AV1로 인코딩된 동영상을 포함합니다. 기본 동영상 프레임 해상도는 정의되지 않습니다. 동영상 색공간, 전송 함수, 비트 심도는 다를 수 있습니다. 예를 들어 SDR 동영상은 sRGB 전송 함수가 포함된 8비트 심도인 BT.709 색상 공간을 가질 수 있습니다. 또는 HDR 동영상은 HDR 메타데이터 및 메타데이터 트랙과 함께 10비트 심도, BT.2100 색상 공간, HLG 또는 PQ 전송 기능을 포함할 수 있습니다.

동영상 컨테이너 파일에는 선택적인 고해상도 보조 동영상 트랙이 하나 포함될 수 있습니다. 리더는 해당 콘텐츠를 사용하여 JPEG 또는 HEIC 이미지로 인코딩된 기본 정지 이미지를 대체하는 항목을 표시해야 합니다. 이 트랙에는 AVC, HEVC 또는 AV1로 인코딩된 저속 프레임 동영상이 포함될 수 있습니다. 보조 동영상 프레임 해상도는 정의되지 않습니다.

보조 동영상 트랙의 모든 프레임은 기본 동영상 트랙에도 대응하는 프레임이 있을 것으로 예상됩니다. 기본 동영상 트랙과 보조 동영상 트랙의 각 프레임 쌍의 프레젠테이션 타임스탬프는 동일해야 합니다. 해당하는 기본 트랙 프레임이 없는 보조 트랙 프레임이 있다면 시청자는 프레젠테이션 타임스탬프가 가장 정확하게 일치하는 기본 트랙 프레임을 보조 동영상 트랙의 대표 썸네일로 선택해 볼 수 있습니다.

동영상 컨테이너 파일에는 AAC로 인코딩된 44kHz, 48kHz 또는 96kHz의 16비트 모노 또는 스테레오 오디오 트랙(선택사항) 1개가 포함될 수 있습니다. 독자는 기본 동영상 트랙이 표시될 때 이 오디오 트랙을 제시해야 합니다.

보조 동영상 트랙이 있는 경우 이 트랙은 항상 기본 동영상 트랙 뒤에 와야 합니다. 다른 트랙과 관련된 다른 주문 제약 조건은 없습니다. 기본 동영상 트랙의 트랙 색인은 보조 동영상 트랙의 트랙 색인보다 낮아야 합니다. 즉, 기본 동영상 트랙의 트랙 번호가 2이면 모든 보조 동영상 트랙의 트랙 번호는 3 이상이어야 합니다.

Machine Intelligence 채점을 사용한 동영상 메타데이터 트랙

저작자는 선택적으로 'meta' 유형의 동영상 컨테이너 파일에 메타데이터 트랙을 추가할 수 있습니다. 메타데이터 트랙에는 '구문'에 설명된 형식의 바이트 스트림을 포함하는 샘플이 정확히 1개 있어야 합니다.

메타데이터 트랙이 있는 경우 트랙의 샘플 설명 표 항목 (즉, 'trak' 상자를 기준으로 'mdia.minf.stbl.stsd'에 위치한 'stsd' 상자)에는 텍스트 메타데이터 샘플 항목('mett' 박스)을 나타내는 단일 Atom이 포함되어야 합니다. 'mett' 상자에는 'application/motionphoto-image-meta'와 동일한 MIME 유형 문자열이 있어야 합니다.

문법

이 메타데이터 트랙이 정의된 경우 콘텐츠는 ISO/IEC 14496-1:2010(E) 8절에 정의된 구문 설명 언어의 의미 체계를 사용하여 여기에 설명된 이 MotionPhotoMetadataDescriptor 사양을 준수하는 바이트 스트림으로 구성되어야 합니다.

// BaseDescriptor as defined in ISO/IEC 14496-1:2010(E): 7.2.2.2
abstract aligned(8) expandable((1<<28) - 1) class BaseDescriptor
    : bit(8) tag=0 {
  // Empty. To be filled by classes extending this class.
}

// Score data for a frame.
class MotionPhotoFrameScoreDescriptor extends BaseDescriptor
    : bit(8) tag=MotionPhotoFrameScoreDescrTag {
  // The frame's score in the range [0, 1].
  float(32) score;

  // The frame's presentation timestamp in microseconds.
  int(64) presentationTimestampUs;
}

// Score data for a track.
class MotionPhotoTrackScoreDescriptor extends BaseDescriptor
    : bit(8) tag=MotionPhotoTrackScoreDescrTag {
  // The number of scored frames in the track.
  unsigned int(32) numScoredFrames;

  // The track's frames' score data. They must be in ascending order with
  // respect to the presentation timestamp.
  MotionPhotoFrameScoreDescriptor trackFrameScoreDescr[numScoredHighResFrames];
}

// Score data for a motion photo.
class MotionPhotoScoreDescriptor extends BaseDescriptor
    : bit(8) tag=MotionPhotoScoreDescrTag {

  // Machine-intelligence model version used to calculate the scores. Writers
  // using a scoring model should set this field to 1 or greater. Writers not
  // using any scoring model should set this field to 0.
  unsigned int(32) modelVersion;

  // The primary image's frame score data.
  MotionPhotoFrameScoreDescriptor primaryImageFrameScoreDescr;

  // The high-resolution motion photo frames' score data.
  MotionPhotoTrackScoreDescriptor highResTrackScoreDescr;
}

// Flag data for a track.
class MotionPhotoTrackFlagsDescriptor extends BaseDescriptor
    : bit(8) tag=MotionPhotoTrackFlagDescrTag {
  // Set to true to indicate the video frames have been stabilized and don't
  // require readers of the track to apply any further stabilization.
  bit(1) isStabilized;
}

// Flags for a motion photo.
class MotionPhotoFlagsDescriptor extends BaseDescriptor
        : bit(8) tag=MotionPhotoFlagDescrTag {
  // The low-resolution motion photo track's flag data.
  MotionPhotoTrackFlagDescriptor lowResTrackFlagsDescr;

  // The high-resolution motion photo track's flag data.
  MotionPhotoTrackFlagDescriptor highResTrackFlagsDescr;
}

// Container for motion photo metadata, like stabilization indicators and
// quality scoring.
class MotionPhotoMetadataDescriptor extends BaseDescriptor
    : bit(8) tag=MotionPhotoMetadataDescrTag {
  // Scoring data for the still and high-res frames.
  MotionPhotoScoreDescriptor motionPhotoScoreDescr;

  // Flags for the low-res and high-res frames.
  MotionPhotoFlagDescriptor motionPhotoFlagDescr;
}

// Class tags for MotionPhotoData using the "User Private" tag space 0xC0-0xFE
// for descriptors defined in ISO/IEC 14496-1:2010(E): 7.2.2.1, Table 1.
// 0xC0 MotionPhotoMetadataDescrTag
// 0xC1 MotionPhotoScoreDescrTag
// 0xC2 MotionPhotoTrackScoreDescrTag
// 0xC3 MotionPhotoFrameScoreDescrTag
// 0xC4 MotionPhotoFlagsDescrTag
// 0xC5 MotionPhotoTrackFlagDescrTag