Foto mit Bewegtbild 1.0

Fotos mit Bewegtbild sind einzelne Dateien, die ein unbewegtes Foto und ein kurzes Video mit einer Audioaufnahme enthalten. Diese Art von Medien ermöglicht es einem Nutzer, ein hochauflösendes Standbild sowie Video und Ton anzusehen, um die Stimmung und die Atmosphäre, in der das Bild aufgenommen wurde, einzufangen.

Abhängigkeiten

Im Folgenden finden Sie normative Referenzen für diese Spezifikation:

Funktionen vorstellen

Die Verwendung von "Must", "Must NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" und "OPTIONAL" entspricht dem in RFC 2119 definierten IETF-Standard.

Foto mit Bewegtbild

Dateien mit Bewegtbild bestehen aus einer primären Bilddatei im JPEG-, HEIC- oder AVIF-Format, an die eine sekundäre Videodatei angehängt ist. Das primäre Bild enthält Kamera-XMP-Metadaten, die beschreiben, wie die Inhalte der Standbild- und Videodateien angezeigt werden, sowie Container-XMP-Metadaten, die beschreiben, wie der Inhalt der Videodatei zu finden ist.

Die Bilddatei kann eine Verstärkungskarte enthalten, wie es bei Ultra HDR-JPEGs der Fall ist.

Dateinamenmuster

Autoren sollten einen Dateinamen verwenden, der dem folgenden regulären Ausdruck entspricht:

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

Leser können die XMP-Metadaten, die angehängte Videodatei oder die Videoinhalte ignorieren, wenn das Muster nicht befolgt wird.

Codierung von Mediendaten

Das primäre Image enthält ein Containerelement-XMP-Metadatenverzeichnis, in dem die Reihenfolge und die Attribute der nachfolgenden Mediendatei im Dateicontainer festgelegt sind. Jede Datei im Container hat ein entsprechendes Medienelement im Verzeichnis. Das Medienelement beschreibt den Speicherort im Dateicontainer und die grundlegenden Eigenschaften jeder verketteten Datei.

XMP-Attribute

Für das Motion Photo-Format werden zwei Sätze von XMP-Metadaten verwendet, um zusätzliche semantische Informationen zu definieren. Die Metadaten können in beliebiger Reihenfolge angegeben werden.

Kamera-Metadaten

Kamerametadaten codieren Informationen zur Darstellung des primären Bild- und Videoanteils des Fotos mit Bewegtbild.

  • Der Namespace-URI lautet http://ns.google.com/photos/1.0/camera/
  • Das Standard-Namespace-Präfix ist Camera

Die folgenden Attribute können in den XMP-Metadaten der Standbilddatei erscheinen:

Name

Typ

Beschreibung

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

Diese Eigenschaften waren Teil der Microvideo V1-Spezifikation. Sie werden in dieser Spezifikation gelöscht und müssen gegebenenfalls ignoriert werden.

Insbesondere wird das Attribut MicroVideoOffset durch den Wert GContainer:ItemLength ersetzt, mit dem die Videodaten in der Datei gefunden werden.

Camera:MotionPhoto

Integer

0: Gibt an, dass die Datei nicht als Foto mit Bewegtbild behandelt werden soll.

1: Gibt an, dass die Datei als Foto mit Bewegtbild behandelt werden soll.

Alle anderen Werte sind nicht definiert und werden entsprechend behandelt.

Ist der Wert null oder negativ, wird die Datei immer als Foto ohne Bewegtbild behandelt, auch wenn tatsächlich ein Video an die Datei angehängt wurde.

Da XMP von den meisten gut verhaltenden Editoren übernommen wird, können Standbilder für dieses Feld immer noch einen Restwert von 1 haben, obwohl das angehängte Video entfernt wurde. Dieses Feld ist daher nicht endgültig und Leser müssen immer bestätigen, dass ein Video vorhanden ist.

Camera:MotionPhotoVersion

Integer

Gibt das Dateiformat des Fotos mit Bewegtbild an. Diese Spezifikation definiert Version „1“.

Camera:MotionPhotoPresentationTimestampUs

Long

Long-Wert, der den Präsentationszeitstempel (in Mikrosekunden) des Videoframes angibt, der dem Standbild entspricht. Der Wert kann -1 sein, wenn er nicht festgelegt oder nicht angegeben werden soll.

Präsentationsverhalten

Wenn Camera:MotionPhotoPresentationTimestampUs nicht im XMP-Paket vorhanden ist, sollten Leser einen Präsentationszeitstempel verwenden, der sich unmittelbar vor dem Zeitstempel befindet, der der Mitte des Videotracks am nächsten liegt, d.h. die Dauer des Videotracks geteilt durch 2.

Wenn Camera:MotionPhotoPresentationTimestampUs im XMP-Paket und "application/motionphoto-image-meta" im Video vorhanden ist, muss derselbe Wert im Feld primaryImageFrameScoreDescr presentationTimestampUs dieses Tracks angezeigt werden. Wenn Camera:MotionPhotoPresentationTimestampUs nicht im XMP-Paket und der Metadatenspur vorhanden ist, muss der Wert im Metadatenspur -1 sein.

Container element

Das Containerelement wird in den XMP-Metadaten des primären Bildes codiert und definiert das Verzeichnis der Medienelemente im Container. Medienelemente müssen sich in derselben Reihenfolge in der Containerdatei wie die Medienelementelemente im Verzeichnis befinden und eng gepackt sein.

  • Der Namespace-URI lautet http://ns.google.com/photos/1.0/container/
  • Das Standard-Namespace-Präfix ist Container

Das Verzeichnis darf nur ein primäres Bildelement enthalten. Es muss das erste Element im Verzeichnis sein.

Elementname

Typ

Beschreibung

Directory

Geordnetes Array von Strukturen

Geordnetes Array von Container:Item-Strukturen, die das Layout und den Inhalt des Containers definieren.

Elementelement

Medienelemente beschreiben, wie jedes Element von der Anwendung verwendet werden soll.

  • Der Namespace-URI lautet http://ns.google.com/photos/1.0/container/item/
  • Das Standard-Namespace-Präfix ist Item

Das erste Medienelement muss das primäre Bild sein. Er muss ein Mime-Attribut enthalten, das einen der Bild-MIME-Typen angibt, die in den MIME-Typ-Werten für Artikel aufgeführt sind. Die Länge des primären Elements kann bestimmt werden, indem das primäre Bild anhand seines MIME-Typs am Anfang des Dateicontainers geparst wird.

Das erste Medienelement kann ein Padding-Attribut enthalten, das einen zusätzlichen Abstand zwischen dem Ende des codierten primären Bildes und dem Anfang des nächsten Medienelements festlegt. Nur das erste Medienelement darf ein Padding-Attribut enthalten.

Jedes Medienelement muss ein Mime-Attribut enthalten. Die sekundären Medienelemente müssen außerdem Längenattribute enthalten.

Aufeinanderfolgende Medienelemente teilen möglicherweise Ressourcendaten innerhalb des Dateicontainers. Das erste Medienelement bestimmt den Speicherort der Ressource im Dateicontainer. Für nachfolgende freigegebene Medienelemente ist Length auf 0 gesetzt, falls die Ressourcendaten selbst ein Container sind.

Der Speicherort der Medienelementressourcen im Container ergibt sich aus der Addition der Length-Werte der vorhergehenden sekundären Elementressourcen zur Länge der primären Bildcodierung plus Padding (sofern angegeben).

Attributname

Typ

Beschreibung

Mime

String

Erforderliche Angabe. Einfacher String, der den MIME-Typ des Medienelements im Container angibt.

Semantic

String

Erforderliche Angabe. Einfacher String, der die anwendungsspezifische Bedeutung des Medienelements angibt. Die Definition finden Sie im Abschnitt zu den semantischen Werten.

Length

Integer

Erforderlich für sekundäre Medienelemente, einschließlich des Videocontainers. Die positive Ganzzahllänge des Elements in Byte. Medienelemente müssen in ihrer ursprünglichen Form ohne Codierung vorliegen. Der Längenwert ist die tatsächliche Länge der Byte in der Datei.

Die Länge 0 bei sekundären Medienelementen gibt an, dass die Medienelementressource mit dem vorherigen Medienelement geteilt wird. Die Länge eines primären Medienelements muss 0 sein.

Padding

Integer

[JPEG-basierte Fotos mit Bewegtbild]

Optional für das primäre Medienelement. Einfacher String mit einer positiven Ganzzahl für zusätzlichen Abstand in Byte zwischen dem Ende des codierten primären Bildes und dem Anfang des nächsten Medienelements.

[HEIC/AVIF-basierte Fotos mit Bewegtbild]

Für das primäre Medienelement erforderlich. Muss den Wert 8 haben, also die Kopfzeilenlänge des Feldes „mpvd“ (Videodaten mit Bewegtbild).

Element:Werte für den MIME-Typ

Das Attribut Item:Mime definiert den MIME-Typ der einzelnen Medienelemente.

Antwort

Beschreibung

image/jpeg

JPEG-Bild

image/heic

HEIC-Bild

image/avif

AVIF-Bild

video/mp4

MP4-Container

video/quicktime

MOV-Container

Element:Semantische Werte

Das Attribut Item:Semantic definiert die anwendungsspezifische Bedeutung der einzelnen Medienelemente im Containerverzeichnis.

Value

Beschreibung

Primary

Gibt an, dass das Medienelement das primäre Bild für „Anzeigebereit“ im Container ist. Ein Foto mit Bewegtbild muss genau ein Element mit dieser Semantik enthalten.

MotionPhoto

Gibt an, dass das Medienelement der Videocontainer ist. Ein Foto mit Bewegtbild muss genau ein Element mit dieser Semantik enthalten. Der Speicherort dieses Medienelements muss sich am Ende der Datei befinden. Nachdem die Byte dieses Medienelements beendet wurden, dürfen keine weiteren Bytes platziert werden.

Fotos mit Bewegtbild mit einem primären Ultra HDR-Bild

Gemäß den Regeln für den semantischen Wert von Elementen in dieser Spezifikation und in der Ultra HDR-Bildspezifikation müssen Fotos mit Bewegtbild mit einem primären Ultra HDR-Bild auch ein Medienelement mit der Semantik für "GainMap" enthalten. Außerdem müssen Autoren, die Bewegungsfotos codieren, das GainMap-Element vor dem Videoelement-Element platzieren.

ISOBMFF-Bildspezifisches Verhalten

Bewegte Fotos mit ISOBMFF-basierten Bildern (z.B. HEIC- und AVIF-Bilder) müssen eine Struktur haben, bei der der Bildteil der Datei mit einem Feld "Videodaten für bewegliche Fotos" auf oberster Ebene endet, das mit der Semantik der in ISO/IEC 14496-1:2010(E) Klausel 8 definierten Syntax der Syntaxbeschreibung beschrieben wird:

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

wobei das Feld "data" alle Videobyte enthält. Der Sonderwert "0" ist für die Größe des Videodatenfelds mit Bewegtbild nicht zulässig. (Informationen zur Definition einer Klassengröße, die Box erweitert, finden Sie in ISO/IEC 14496-12:2015: 4.2.)

Im XMP des ISOBMFF-Bilds muss auch der Padding-Attributwert des primären Medienelements als Wert der Größe in Byte des Headers des Videodatenfelds mit Bewegungsfoto definiert werden, also der Größe und den Namens-Headern.

In Abbildung 1, die diese Boxstruktur veranschaulicht, finden Sie ein Beispiel für ein HEIC-basiertes Bewegungsfoto:

Liniendiagramm, das die Anordnung von Elementen in einer HEIC-Bewegungsdatei zeigt

Abbildung 1: Abbildung der Felder auf oberster Ebene eines HEIC-Beispielbilds in einer einzelnen HEIC-Fotodatei mit Bewegtbild Die Reihenfolge der Felder dient hauptsächlich zur Veranschaulichung. Beachten Sie die relevanten Standards zur Erstellung von HEIF- oder Videodateien. Das mpvd-Feld muss jedoch nach allen Feldern der HEIC-Bilddatei stehen.

Videocontainer-Inhalte

Die Videocontainerdatei, die an das primäre Bild angehängt wird, muss mindestens einen primären Videotrack enthalten. Dieser Track ist erforderlich und enthält mit AVC, HEVC oder AV1 codierte Videos. Die Auflösung des primären Videoframes ist nicht definiert. Der Farbraum des Videos, die Übertragungsfunktion und die Bittiefe können variieren. SDR-Videos können beispielsweise eine 8-Bit-Tiefe, den Farbraum BT.709, mit einer sRGB-Transferfunktion haben. HDR-Videos können auch eine Tiefe von 10 Bit, einen Farbraum von BT.2100 und eine HLG- oder PQ-Übertragungsfunktion sowie HDR-Metadaten und Metadatentracks haben.

Die Videocontainerdatei kann einen optionalen sekundären Videotrack mit höherer Auflösung enthalten. Leser sollten deren Inhalt verwenden, um Substitutionen für das primäre Standbild anzuzeigen, das im JPEG- oder HEIC-Bild codiert ist. Dieser Track kann Videos mit niedrigerer Framerate enthalten, die in AVC, HEVC oder AV1 codiert sind. Die Auflösung des sekundären Videoframes ist nicht definiert.

Es wird erwartet, dass alle Frames im sekundären Videotrack entsprechende Frames in der primären Videospur haben. Jedes Paar entsprechende Frames in primären und sekundären Videotracks sollte identische Präsentationszeitstempel haben. Wenn es einen sekundären Track-Frame ohne entsprechenden primären Track-Frame gibt, können Betrachter versuchen, einen primären Track-Frame auszuwählen, dessen Präsentationszeit am nächsten kommt, als repräsentative Miniaturansicht für diesen sekundären Audiotrack.

Die Videocontainerdatei kann einen optionalen 16-Bit-Mono- oder Stereo-Audiotrack mit 44 kHz, 48 kHz oder 96 kHz enthalten, der in AAC codiert ist. Leser sollten diesen Audiotrack zeigen, wenn der primäre Videotrack angezeigt wird.

Der sekundäre Videotrack, falls vorhanden, sollte immer nach dem primären Videotrack folgen. In Bezug auf andere Tracks gibt es keine weiteren Einschränkungen bei der Reihenfolge. Der Trackindex des primären Videotracks muss niedriger sein als der aller sekundären Videotracks. Wenn also der primäre Videotrack die Titelnummer 2 hat, muss jeder sekundäre Videotrack eine Titelnummer größer oder gleich 3 haben.

Videometadaten-Track mit Machine-Intelligence-Bewertung

Autoren können der Videocontainerdatei optional einen Metadatentrack mit dem Typ „meta“ hinzufügen. Der Metadatenspur muss genau ein Beispiel enthalten, das einen Bytestream in dem unter "Syntax" beschriebenen Format enthält.

Wenn der Metadatentrack vorhanden ist, muss der Tabelleneintrag mit der Beispielbeschreibung für den Titel (das Feld "stsd", das sich unter "mdia.minf.stbl.stsd" relativ zum Feld "trak" befindet), ein einzelnes Atom enthalten, das auf einen Beispieleintrag für Textmetadaten hinweist, also ein "mett"-Feld. Das Feld "mett" muss einen MIME-Typ-String haben, der "application/motionphoto-image-meta" ist.

Syntax

Wenn dieser Metadatentrack definiert ist, muss sein Inhalt aus einem Bytestream bestehen, der dieser MotionPhotoMetadataDescriptor-Spezifikation entspricht und hier mit der Semantik der in ISO/IEC 14496-1:2010(E) Klausel 8 definierten Syntax der Syntaxbeschreibung beschrieben wird.

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