動態相片是包含靜態相片和 短片,其中包括錄音內容。使用者可以利用這類媒體 查看高解析度的靜態圖片,以及可擷取 對圖片拍攝的情緒和氛圍。
依附元件
以下為這個規格的常態參照:
- 用於指出需求等級的關鍵字 (用於 RFC 中)
- T.81 (09/92) 不間斷的數位壓縮和程式設計 圖片 (JPEG)
- ISO/IEC 23008-12:2022 在 異質環境第 12 部分:圖片檔案格式 (HEIC)
- AV1 圖片檔案格式 (AVIF) (AVIF)
- Ultra HDR 圖片格式 1.0 版 |Android 開發人員 (Ultra HDR)
- ISO 16684-1:2011(E) XMP 規格第 1 部分 (XMP)
- Adobe XMP 規格第 3 部分儲存空間 (XMP)
- ISO/IEC 14496-10:2022 影音物件編碼第 10 部分:進階 影片編碼 (AVC)
- ISO/IEC 23008-2:2023 在 異質環境第 2 部分:高效率影片 程式設計 (HEVC)
- AV1 Bitstream 與解碼程序規格 (AV1)
- ISO/IEC 14496-1:2010 視覺物件編碼: 系統
- ISO/IEC 14496-12:2015 ISO Box 媒體檔案格式 (ISOBMFF)
- ISO/IEC 14496-14:2020 影音物件編碼第 14 部分:MP4 檔案 格式 (MP4)
- Apple QuickTime 檔案格式 (MOV)
簡介
使用「必須」、「不得」、「必要」、「應」、 「不應該」、「建議」、「可能」和「選用」符合 IETF 標準 RFC2119 中定義的標準。
動態相片格式
動態相片檔案是由主要靜態圖片檔組成 JPEG、HEIC 或 AVIF,內含 附加次要影片檔案主要影像包含 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 中繼資料中:
名稱 |
類型 |
說明 |
|
這些屬性為 Microvideo V1 規格的一部分。這些都是從這個規格中刪除的,如有的話,請予以忽略。 特別是, |
|
|
|
0:表示檔案不應視為動態相片。 1:表示檔案應視為「動態相片」。 所有其他值都未定義,同樣會視為 0。 如果值為零或負數,則檔案一律會視為 非動態相片。 由於成效最高的編輯會移轉 XMP,因此靜態圖片檔 這個欄位的殘餘值可能仍為 1 影片已經移除。因此這個欄位無法確定,且不是讀者 請務必確認影片確實存在 |
|
|
指出動態相片的檔案格式。此規格定義了「1」版本。 |
|
|
代表與圖片靜止畫面的影片影格顯示時間戳記 (以微秒為單位) 的長值。這個值可以是 -1,表示未設定/未指定。 |
呈現方式
如果 Camera:MotionPhotoPresentationTimestampUs
未出現在 XMP 封包中,
讀者應使用緊接時間戳記之前的顯示時間戳記
最接近視訊軌中間值,例如視訊軌長度
除以 2
如果 Camera:MotionPhotoPresentationTimestampUs
出現在 XMP 封包中,
"application/motionphoto-image-meta"
出現在影片中
值必須出現在 primaryImageFrameScoreDescr
「presentationTimestampUs
」中
該軌跡的 [參照] 欄位如果 Camera:MotionPhotoPresentationTimestampUs
不是
且中繼資料軌跡存在,則
中繼資料音軌必須為 -1。
容器元素
容器元素已編碼為主要影像的 XMP 中繼資料, 會定義容器中的媒體項目目錄。媒體項目必須 資源按照媒體項目元素的順序 目錄,且必須緊密封裝。
- 命名空間 URI 為
http://ns.google.com/photos/1.0/container/
- 預設命名空間前置字串為
Container
目錄只能包含一個主要圖片項目,且必須是第一個圖片項目 目錄的項目
元素名稱 |
類型 |
說明 |
|
已排序的結構陣列 |
定義版面配置的 |
項目元素
媒體項目元素會說明每個項目應如何用於應用程式。
- 命名空間 URI 為
http://ns.google.com/photos/1.0/container/item/
- 預設命名空間前置字串為
Item
第一個媒體項目必須是主要圖片。其中必須包含 Mime
屬性,指定項目 MIME 類型中列出的其中一個圖片 MIME 類型
值。主要項目的長度可能取決於剖析主要項目
根據檔案容器開頭的 MIME 類型定義映像檔。
第一個媒體項目可以包含 Padding
屬性,用於指定額外的
編碼主要影像結尾與
下一個媒體項目只有第一個媒體項目可以包含 Padding
屬性。
每個媒體項目都必須包含 Mime
屬性。次要媒體項目必須
也包含長度屬性
依序媒體項目可能會在檔案容器內共用資源資料。
第一個媒體項目會決定檔案容器中資源的位置
但後續共用媒體項目的 Length
會設為 0,以防
資源資料本身就是一種容器
容器中的媒體項目資源位置取決於加總
將上述次要項目資源的 Length
值設為
主要圖片編碼加 Padding
(如有指定)。
屬性名稱 |
類型 |
說明 |
|
|
此為必要項目。這個簡易字串指出容器中媒體項目的 MIME 類型。 |
|
|
此為必要項目。簡易字串,指出媒體項目的應用程式特定意義。請參閱「商品語意值」一節的定義。 |
|
|
次要媒體項目 (包括影片容器) 的必要項目,項目的正整數長度 (以位元組為單位)。媒體項目應採用原始格式,且未套用任何編碼。長度值是檔案中位元組的實際長度。 次要媒體項目的長度為 0,表示與上一個媒體項目共用媒體項目資源。主要媒體項目的長度應為 0。 |
|
|
[JPEG 模式動態相片] 這是主要媒體項目的選填項目。 包含正整數長度的簡單字串 (以位元組為單位) 編碼主要圖片結尾與 下一個媒體項目 [HEIC/AVIF 動態相片] 主要媒體項目的必要欄位。值必須等於 8; 動態相片的標題長度 「影片資料」(「mpvd」) 方塊。 |
項目:MIME 類型值
Item:Mime
屬性定義了每個媒體項目的 MIME 類型。
值 |
說明 |
|
JPEG 圖片 |
|
HEIC 圖片 |
|
AVIF 圖片 |
|
MP4 容器 |
|
MOV 容器 |
項目:語意值
Item:Semantic
屬性定義了每個
已複製到容器目錄中的媒體項目
|
說明 |
|
表示媒體項目是容器中可立即使用的主要圖片。動態相片必須含有具此語意屬性的一張相片,且只能含有一個項目。 |
|
表示媒體項目是影片容器。動態相片必須含有具此語意屬性的一張相片,且只能含有一個項目。這個媒體項目的位置必須位於檔案結尾。這個媒體項目的位元組終止後,不得放置其他位元組。 |
使用主要 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 式運動的這個盒子結構 相片:
圖 1. 插圖:內含 HEIC 圖片的頂層方塊 單一 HEIC 動態相片檔案。請注意,方塊順序主要是 僅供參考 (請參閱有關建構方式的相關標準) HEIF 或影片檔案);不過,「mpvd」箱子必須緊接著所有的 HEIC 後方 建立映像檔的方塊
影片容器內容
附加至主要映像檔的影片容器檔案必須包括 一個主要視訊軌這首曲目為必要項目,且包含影片編碼 在 AVC 中進行, HEVC 或 AV1。 未定義主要影片影格解析度。影片色彩空間,傳輸 以及位元深度可能不同。例如,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