모션 포토 형식 1.0

모션 포토는 스틸 사진 이미지와 녹음 파일이 포함된 짧은 동영상입니다. 사용자는 이러한 유형의 미디어를 통해 고해상도 정지 이미지뿐만 아니라 동영상과 사운드를 확인하여 분위기를 조성하는 데 도움이 됩니다.

종속 항목

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

소개

'MUST', 'MUST NOT', 'REQUIRED', 'SHOULD'의 사용은 'SHOULD NOT', 'RECOMMENDED', 'MAY', 'OPTIONAL' IETF 표준 RFC2119에 정의되어 있습니다.

모션 사진 형식

모션 포토 파일은 기본 정지 이미지 파일로 구성되며 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는 가장 유능한 편집자에 의해 이전되므로 정지 이미지 파일은 추가된 동영상이 제거되었습니다. 따라서 이 필드는 아직 정해진 것이 아니며 반드시 동영상이 존재하는지 확인해야 합니다.

Camera:MotionPhotoVersion

Integer

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

Camera:MotionPhotoPresentationTimestampUs

Long

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

프레젠테이션 동작

XMP 패킷에 Camera:MotionPhotoPresentationTimestampUs가 없으면 독자는 타임스탬프 바로 앞에 있는 프리젠테이션 타임스탬프를 사용해야 합니다. 동영상 트랙의 중간(예: 동영상 트랙의 길이)에 가장 가까운 위치 2로 나눕니다.

Camera:MotionPhotoPresentationTimestampUs가 XMP 패킷에 있고 동영상에 "application/motionphoto-image-meta"가 있는 경우 동일하게 값은 primaryImageFrameScoreDescr presentationTimestampUs 안에 표시되어야 합니다. 들판을 덮습니다. 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 기반 모션 사진]

기본 미디어 항목에 필요합니다. 값이 8이어야 합니다. 모션 포토의 헤더 길이 동영상 데이터('mpvd') 상자를 선택합니다.

항목: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' 동영상 데이터 상자의 크기에 사용할 수 없습니다. ( ISO/IEC 14496-12:2015: 4.2 Box를 확장합니다.)

ISOBMFF 이미지의 XMP는 기본 미디어 항목의 패딩도 정의해야 합니다. 속성 값이 모션 사진 동영상의 크기(바이트 단위)와 같아야 합니다. 데이터 상자 헤더로, 크기와 이름 헤더입니다.

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

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

그림 1. 내부에 있는 샘플 HEIC 이미지의 최상위 상자를 보여주는 삽화 하나의 HEIC 모션 사진 파일을 다운로드합니다. 상자 순서는 대부분 (구성 방법에 대한 관련 표준 참조) HEIF 또는 동영상 파일) 하지만 'mpvd'는 상자는 모든 HEIC 다음에 와야 함 이미지 파일의 상자에 넣으세요.

동영상 컨테이너 콘텐츠

기본 이미지에 추가되는 동영상 컨테이너 파일에는 기본 동영상 트랙을 1개 이상 선택해야 합니다. 이 트랙은 필수이며 인코딩된 동영상이 포함되어 있습니다. AVC 형식 HEVC 또는 AV1 이 기본 동영상 프레임 해상도가 정의되지 않았습니다. 동영상 색상 공간, 전송 함수이며 비트 심도는 다를 수 있습니다. 예를 들어 SDR 동영상은 심도, BT.709 색공간, sRGB 전달 함수 사용 HDR 동영상은 10비트 심도, BT.2100 색상 공간, HLG 또는 PQ 전송 HDR 메타데이터 및 메타데이터 트랙도 포함됩니다.

동영상 컨테이너 파일에는 더 높은 해상도의 보조 옵션 하나가 포함될 수 있습니다. 동영상 트랙입니다. 독자는 해당 콘텐츠를 사용하여 JPEG 또는 HEIC 이미지로 인코딩된 기본 정지 이미지입니다. 이 트랙에는 다음이 포함될 수 있습니다. AVC, HEVC 또는 AV1로 인코딩된 저속 프레임 동영상 보조 동영상 프레임 해상도가 정의되지 않았습니다.

보조 동영상 트랙의 모든 프레임은 해당하는 프레임이 포함되어 있을 수 있습니다. 해당하는 각 쌍의 기본 및 보조 동영상 트랙의 프레임은 프레젠테이션이 동일해야 합니다. 타임스탬프 해당하는 기본이 없는 보조 트랙 프레임이 있는 경우 시청자는 트랙 프레임의 위치를 지정할 때 가장 근접한 이에 대한 대표 썸네일로 일치하는 프레젠테이션 타임스탬프를 선택합니다. 두 번째 동영상 트랙입니다.

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

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

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

저작자는 동영상 컨테이너 파일에 메타데이터 트랙을 추가할 수 있습니다(선택사항). 'meta' 유형을 입력합니다. 메타데이터 트랙에는 '구문'에 설명된 형식의 바이트 스트림입니다.

메타데이터 트랙이 있는 경우 (예: 'mdia.minf.stbl.stsd'에 위치한 'stsd' 박스는 'trak' 텍스트 메타데이터 샘플을 나타내는 단일 Atom을 포함해야 합니다. 입력 - (예: '만트' 상자) 'mett' 상자의 MIME 유형 문자열은 다음과 같아야 합니다. 'application/motionphoto-image-meta'로 구성됩니다.

구문

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

// 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