動態相片格式 1.0

動態相片是包含靜態相片和 短片,其中包括錄音內容。使用者可以利用這類媒體 查看高解析度的靜態圖片,以及可擷取 對圖片拍攝的情緒和氛圍。

依附元件

以下為這個規格的常態參照:

簡介

使用「必須」、「不得」、「必要」、「應」、 「不應該」、「建議」、「可能」和「選用」符合 IETF 標準 RFC2119 中定義的標準。

動態相片格式

動態相片檔案是由主要靜態圖片檔組成 JPEGHEICAVIF,內含 附加次要影片檔案主要影像包含 Camera XMP 說明如何顯示靜態圖片檔和影片檔案內容的中繼資料 和容器 XMP 中繼資料,說明如何找到影片檔案內容。

圖片檔可能有增益圖,就像使用 Ultra 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。

如果值為零或負數,則檔案一律會視為 非動態相片。

由於成效最高的編輯會移轉 XMP,因此靜態圖片檔 這個欄位的殘餘值可能仍為 1 影片已經移除。因此這個欄位無法確定,且不是讀者 請務必確認影片確實存在

Camera:MotionPhotoVersion

Integer

指出動態相片的檔案格式。此規格定義了「1」版本。

Camera:MotionPhotoPresentationTimestampUs

Long

代表與圖片靜止畫面的影片影格顯示時間戳記 (以微秒為單位) 的長值。這個值可以是 -1,表示未設定/未指定。

呈現方式

如果 Camera:MotionPhotoPresentationTimestampUs 未出現在 XMP 封包中, 讀者應使用緊接時間戳記之前的顯示時間戳記 最接近視訊軌中間值,例如視訊軌長度 除以 2

如果 Camera:MotionPhotoPresentationTimestampUs 出現在 XMP 封包中, "application/motionphoto-image-meta" 出現在影片中 值必須出現在 primaryImageFrameScoreDescrpresentationTimestampUs」中 該軌跡的 [參照] 欄位如果 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

表示媒體項目是影片容器。動態相片必須含有具此語意屬性的一張相片,且只能含有一個項目。這個媒體項目的位置必須位於檔案結尾。這個媒體項目的位元組終止後,不得放置其他位元組。

使用主要 Ultra HDR 圖像的動態相片

根據此規格和 Ultra HDR 圖片規格 採用主要 Ultra HDR 圖像的動態相片也必須包含 "GainMap" 的項目語意。此外,作家對動態相片編碼時 在影片項目元素前方取得 getmap 項目元素

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 也必須定義主要媒體項目的邊框間距 屬性值等於動態相片影片的大小 (以位元組為單位) Data Box 標頭,即大小和名稱標題。

請參考圖 1 的說明,瞭解 HEIC 式運動的這個盒子結構 相片:

這張折線圖展示 HEIC 動態檔案中的元素排列方式

圖 1. 插圖:內含 HEIC 圖片的頂層方塊 單一 HEIC 動態相片檔案。請注意,方塊順序主要是 僅供參考 (請參閱有關建構方式的相關標準) HEIF 或影片檔案);不過,「mpvd」箱子必須緊接著所有的 HEIC 後方 建立映像檔的方塊

影片容器內容

附加至主要映像檔的影片容器檔案必須包括 一個主要視訊軌這首曲目為必要項目,且包含影片編碼 在 AVC 中進行, HEVCAV1。 未定義主要影片影格解析度。影片色彩空間,傳輸 以及位元深度可能不同。例如,SDR 影片可能有 8 位元位元 BT.709 色彩深度,搭配 sRGB 傳遞函數。而 HDR 影片 具備 10 位元深度、BT.2100 色彩空間,以及 HLG 或 PQ 傳輸 和 HDR 中繼資料和中繼資料軌跡。

影片容器檔案可包含一個選用的高解析度次要檔案 視訊軌。讀者應該使用其內容來顯示替代的 以 JPEG 或 HEIC 圖片編碼的主要靜態靜態圖片。這個音軌可能包含 以 AVC、HEVC 或 AV1 編碼的影片,呈現的畫面更新率較低。次要影片影格 未定義解析度。

次要視訊軌中的所有影格應該都會有 兩個影格的對應影格。每組對應的 主要和次要視訊軌的影格應具有相同的呈現效果 時間戳記。如果次要軌跡影格沒有相應的主要軌跡 字幕軌,觀眾可以試著選擇 相符的簡報時間戳記 第二部影片軌道

影片容器檔案可能包含一個選用的 16 位元單聲道或立體聲音訊 以 44 kHz、48 kHz 或 96 kHz 為 AAC 編碼的音軌。讀者應簡報 主要視訊軌顯示時的音軌。

次要視訊軌 (如有) 應一律顯示在主要影片之後 視訊軌。其他測試群組沒有其他排序限制。 主要視訊軌的音軌索引必須低於任何次要音軌的索引 視訊軌。也就是說,如果主要影片音軌的 ID 是 2,則 次要視訊軌的曲目號碼必須大於或等於 3。

使用機器智慧評分功能的影片中繼資料追蹤

寫入者可以選擇在影片容器檔案中加入中繼資料音軌, 輸入「meta」。中繼資料軌只能有一個包含 採用「語法」格式的位元組串流。

如果有中繼資料音軌,就會提供範例說明表格項目 軌跡 (亦即位於「mdia.minf.stbl.stsd」的「stsd」方塊,與 「特拉克」方塊) 必須包含一個 Atom,用來表示文字中繼資料樣本 項目 - (也就是「金屬」盒)。「金屬」方塊的 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