モーション フォト形式 1.0

モーション フォトは、静止画画像と 音声録音を含む短い動画このタイプのメディアでは 高解像度の静止画に加えて、動画と音声も表示できます。 雰囲気や感情を表すことができます

依存関係

この仕様の規範的なリファレンスは次のとおりです。

はじめに

「しなければならない」「しなければならない」「必要」「必須」「するべき」という表現は、 「すべきでないこと」、「推奨」、「しても構いません」、「任意」IETF 標準に準拠しています RFC2119 で定義されています。

モーション フォト形式

モーション フォト ファイルは、メインの静止画像ファイルと、 JPEGHEICAVIF、 追加されるものです。メイン画像にカメラの XMP が含まれている 静止画像ファイルと動画ファイルのコンテンツの表示方法を記述するメタデータ およびコンテナの XMP メタデータで、動画ファイルのコンテンツの場所が記述されています。

ウルトラ HDR JPEG の場合と同様に、画像ファイルにゲインマップが含まれていることがあります。

ファイル名パターン

ライターは、次の正規表現に一致するファイル名を使用する必要があります。

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

リーダーは、XMP メタデータ、追加された動画ファイル、または動画が無視されてもかまいません。 内容が返されます。

メディアデータのエンコード

メイン画像にコンテナ要素 XMP が含まれている 後続のメディアの順序とプロパティを定義するメタデータ ディレクトリ ファイル コンテナに格納されます。コンテナ内の各ファイルには対応するメディアが含まれる ディレクトリにあります。メディア アイテムにはファイル内の場所が記述されています 基本的なプロパティが含まれます。

XMP 属性

次の 2 セットの XMP メタデータを使用して、 モーション フォト形式メタデータは順不同で表示されます。

カメラのメタデータ

カメラのメタデータは、メイン画像の表示方法に関する情報をエンコードし、 モーション フォトの動画部分です。

  • 名前空間 URI は http://ns.google.com/photos/1.0/camera/ です。
  • デフォルトの名前空間の接頭辞は Camera です。

静止画像ファイルの XMP メタデータには次の属性が含まれます。

名前

タイプ

説明

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

これらのプロパティはマイクロ動画 V1 の仕様に含まれていました。この仕様では削除されており、存在する場合は無視する必要があります。

具体的には、MicroVideoOffset 属性は GContainer:ItemLength 値に置き換えられ、ファイル内の動画データの場所を特定するために使用されます。

Camera:MotionPhoto

Integer

0: ファイルをモーション フォトとして扱わないことを示します。

1: ファイルをモーション フォトとして扱う必要があることを示します。

その他の値はすべて定義されず、0 と同様に扱われます。

値がゼロまたは負の場合、ファイルは常に モーション フォト以外の動画もアップロードできます。

一般的なエディタでは XMP が引き継がれるため、 末尾に 1 を追加しても、このフィールドの残余値は 1 である可能性があります。 動画が削除されています。したがって、このフィールドは決定的なものではなく、 必ず動画が存在することを確認する必要があります。

Camera:MotionPhotoVersion

Integer

モーション フォトのファイル形式のバージョンを示します。この仕様ではバージョン「1」を定義します。

Camera:MotionPhotoPresentationTimestampUs

Long

画像の静止画に対応する動画フレームの表示タイムスタンプ(マイクロ秒単位)を表す long 値。値を -1 にすることで、設定されていないか、指定されていないことを表します。

表示の動作

XMP パケットに Camera:MotionPhotoPresentationTimestampUs が存在しない場合、 タイムスタンプの直前にあるプレゼンテーション タイムスタンプを使用する必要があります。 動画トラックの中間に最も近い位置(動画トラックの再生時間) 割った数値です。

XMP パケットに Camera:MotionPhotoPresentationTimestampUs が存在し、 "application/motionphoto-image-meta" が動画に含まれている。 値は primaryImageFrameScoreDescr presentationTimestampUs に存在する必要があります。 フィールドを指定します。Camera:MotionPhotoPresentationTimestampUs が次の値でない場合 XMP パケットに存在し、メタデータ トラックが存在する場合、 メタデータ トラックは -1 である必要があります。

コンテナ要素

コンテナ要素はプライマリ画像の XMP メタデータにエンコードされ、 コンテナ内のメディア アイテムのディレクトリを定義します。メディア アイテムは のメディア アイテム要素と同じ順序で配置する必要があります。 密にパックする必要があります。

  • 名前空間 URI は http://ns.google.com/photos/1.0/container/ です。
  • デフォルトの名前空間の接頭辞は Container です。

ディレクトリに含めることができるメイン画像アイテムは 1 つだけです。また、これを最初の画像アイテムにする必要があります。 ディレクトリにあります。

要素名

タイプ

説明

Directory

構造体の順序付き配列

レイアウトを定義する Container:Item 構造体の順序付き配列 コンテナの内容。

アイテム要素

メディア アイテム要素では、アプリケーションでの各アイテムの使用方法を記述します。

  • 名前空間 URI は http://ns.google.com/photos/1.0/container/item/ です。
  • デフォルトの名前空間の接頭辞は Item です。

最初のメディア アイテムはメイン画像である必要があります。Mime を含める必要があります。 アイテムの MIME タイプにリストされている画像 MIME タイプのいずれかを指定する属性 値。プライマリ アイテムの長さは、 ファイル コンテナの先頭から始まる MIME タイプに基づいて画像が生成されます。

最初のメディア アイテムには、追加のメディア アイテムを指定する Padding 属性を含めることができます。 エンコードされたメイン画像の末尾と 次のメディア アイテム。Padding 属性を指定できるのは最初のメディア アイテムのみです。

各メディア アイテムには Mime 属性を含める必要があります。付随メディア アイテムは Length 属性も含まれます

シーケンシャル メディア アイテムは、ファイル コンテナ内でリソースデータを共有できます。「 最初のメディア アイテムによって、ファイル コンテナ内のリソースの場所が決まります。 後続の共有メディア アイテムで Length が 0 に設定されるのは、 リソースデータ自体がコンテナです。

コンテナ内のメディア アイテムのリソースの場所は、 前のセカンダリ アイテム リソースの Length 値を、 メイン画像エンコードと Padding(指定された場合)。

属性名

タイプ

説明

Mime

String

必須。コンテナ内のメディア アイテムの MIME タイプを示すシンプルな文字列です。

Semantic

String

必須。メディア アイテムのアプリ固有の意味を示すシンプルな文字列。定義については、「アイテムのセマンティック値」セクションをご覧ください。

Length

Integer

動画コンテナなど、付随するメディア アイテムでは必須。正の整数の長さ(バイト単位)。メディア アイテムは、エンコードが適用されていない元の形式である必要があります。長さの値はファイルのバイトの実際の長さです。

付随メディア アイテムの長さ 0 は、メディア アイテムのリソースが前のメディア アイテムと共有されていることを示します。プライマリ メディア アイテムの長さは 0 である必要があります。

Padding

Integer

[JPEG ベースのモーション フォト]

メイン メディア アイテムの場合は省略可能。 追加分のバイト単位の正の整数長を含む単純な文字列 エンコードされたメイン画像の末尾と 次のメディア アイテム。

[HEIC/AVIF ベースのモーション フォト]

メイン メディア アイテムでは必須。値は 8 にする必要があり、 モーション フォトのヘッダーの長さ 動画データ(「mpvd」)ボックス

Item:MIME 型の値

Item:Mime 属性は、各メディア アイテムの MIME タイプを定義します。

説明

image/jpeg

JPEG 画像

image/heic

HEIC 画像

image/avif

AVIF イメージ

video/mp4

MP4 コンテナ

video/quicktime

MOV コンテナ

アイテム:セマンティック値

Item:Semantic 属性は、各要素のアプリケーション固有の意味を定義します。 削除することもできます。

Value

説明

Primary

メディア アイテムがコンテナ内の表示可能なプライマリ画像であることを示します。モーション フォトには、このセマンティックを持つアイテムを 1 つだけ含める必要があります。

MotionPhoto

メディア アイテムが動画コンテナであることを示します。モーション フォトには、このセマンティックを持つアイテムを 1 つだけ含める必要があります。このメディア アイテムの場所は、ファイルの末尾にする必要があります。このメディア アイテムのバイトが終了したら、他のバイトを配置できません。

メインのウルトラ 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[];
}

ここで「データ」はフィールドには動画のすべてのバイトが含まれます。特別な値「0」 モーション フォト動画データ ボックスのサイズではは使用できません。( ISO/IEC 14496-12:2015: 4.2 で、クラス Box を拡張します)。

ISOBMFF 画像の XMP では、メイン メディア アイテムのパディングも定義する必要があります。 属性値は、モーション フォト動画のバイト単位のサイズと同じである必要があります。 データボックスヘッダー、つまりサイズと名前のヘッダーです。

HEIC ベースのモーションのサンプルについては、このボックス構造を示した図 1 を参照してください。 写真:

HEIC モーション ファイル内の要素の配置を示す線図

図 1. 階層内の HEIC サンプル画像が表示されている、 1 つの HEIC モーション フォト ファイルです。なお、ボックスの順序は通常、 例示のみ。構成方法については、関連する標準を HEIF または動画ファイル)それでも「mpvd」はHEIC の後に必ずボックスを配置する必要があります。 表示されます。

動画コンテナのコンテンツ

メイン画像に追加する動画コンテナ ファイルには、 メイン動画トラックを 1 つ以上必要。このトラックは必須で、エンコードされた動画が含まれています (AVC)、 HEVC AV1。「 メイン動画のフレーム解像度が定義されていません。動画の色空間、転送 ビット深度は異なる場合があります。たとえば、SDR 動画は 8 ビットビット 深度、BT.709 色空間、sRGB 伝達関数また HDR 動画は ビット深度 10 ビット、BT.2100 色空間、HLG または PQ 転送 HDR メタデータとメタデータ トラックが含まれています。

動画コンテナ ファイルには、必要に応じて高解像度のサブを 1 つ含めることができます。 提供します。リーダーはその内容を使用して、 JPEG または HEIC 画像でエンコードされたメイン静止画像。このトラックに含まれる可能性のあるコンテンツ AVC、HEVC、AV1 でエンコードされた低フレームレートの動画。サブ動画のフレーム 解像度が定義されていません。

付随動画のトラック内のすべてのフレームが メイン動画トラックの対応するフレームが対応する各ペアの メイン動画トラックとサブ動画トラックのフレームの表示は同一にする必要があります。 あります。対応するメインがないサブトラック フレームがある場合 最も近くにあるメイン トラック フレームを選択して、 その代表的なサムネイルと照合する表示タイムスタンプを 追加します。

動画コンテナ ファイルには、オプションの 16 ビットモノラルまたはステレオ音声を 1 つ含めることができます。 トラックは AAC でエンコードされた 44 kHz、48 kHz、96 kHz のいずれかです。読者はこれを提示する必要があります 音声トラックを表示したとき。

付随動画のトラックが存在する場合は、必ずメインのトラックのに配置する 提供します。他のトラックに関する順序の制約は他にありません。「 メイン動画のトラックのトラック インデックスは、どのサブのトラック インデックスよりも低くする必要があります 提供します。つまり、メイン動画のトラックのトラック番号が 2 の場合、 付随動画のトラックには 3 以上のトラック番号を指定する必要があります。

マシン・インテリジェンス・スコアリングによる動画メタデータ・トラック

ライターは、オプションで、メタデータ トラックを 「meta」と入力します。メタデータ トラックには、 「構文」で規定されている形式のバイト ストリーム。

メタデータ トラックが存在する場合、そのサンプルの説明テーブル エントリ すなわち、「mdia.minf.stbl.stsd」の 「trak」ボックス)には、テキスト メタデータのサンプルを示す Atom が 1 つ含まれている必要があります。 エントリ -(「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