Format Motion Photo 1.0

Les photos animées sont des fichiers uniques qui contiennent une photo fixe et un vidéo courte, incluant un enregistrement audio. Ce type de support permet à un utilisateur de affichez une image fixe haute résolution, ainsi que la vidéo et le son pour le sentiment et l'atmosphère où l'image a été prise.

Dépendances

Voici les références normatives pour cette spécification:

Introduction

Les valeurs "DOIT", "NE DOIT PAS", "OBLIGATOIRE" et "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDÉ", "PEUT" et "FACULTATIF" conformément à la norme IETF défini dans le document RFC 2119.

Format photo animé

Les photos animées se composent d'une image fixe principale, JPEG, HEIC ou AVIF, avec une un fichier vidéo secondaire qui lui est ajouté. L'image principale contient le XMP de l'appareil photo. Des métadonnées décrivant comment afficher le contenu des images fixes et des fichiers vidéo et les métadonnées XMP du conteneur décrivant comment localiser le contenu du fichier vidéo.

Le fichier image peut comporter un Gainmap, comme c'est le cas avec les JPEG Ultra HDR.

Modèle de nom de fichier

Les rédacteurs doivent utiliser un nom de fichier correspondant à l'expression régulière suivante:

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

Les lecteurs peuvent ignorer les métadonnées XMP, le fichier vidéo ajouté ou la vidéo contenu si le format n'est pas suivi.

Encodage de données multimédias

L'image principale contient un élément de conteneur XMP répertoire de métadonnées définissant l'ordre et les propriétés des éléments multimédias suivants dans le conteneur de fichiers. Chaque fichier du conteneur possède un média correspondant dans le répertoire. L'élément multimédia décrit l'emplacement dans le fichier. et les propriétés de base de chaque fichier concaténé.

Attributs XMP

Deux ensembles de métadonnées XMP sont utilisés pour définir les informations sémantiques supplémentaires pour le format Motion Photo. Les métadonnées peuvent apparaître dans n'importe quel ordre.

Métadonnées de l'appareil photo

Les métadonnées de l'appareil photo encodent les informations sur la façon de présenter l'image principale et les parties vidéo de la photo animée.

  • L'URI d'espace de noms est http://ns.google.com/photos/1.0/camera/.
  • Le préfixe d'espace de noms par défaut est Camera

Les attributs suivants peuvent apparaître dans les métadonnées XMP des fichiers d'images fixes:

Nom

Type

Description

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

Ces propriétés faisaient partie de la spécification Microvideo V1. Elles sont supprimées dans cette spécification et doivent être ignorées si elles sont présentes.

En particulier, l'attribut MicroVideoOffset est remplacé par la valeur GContainer:ItemLength pour localiser les données vidéo dans le fichier.

Camera:MotionPhoto

Integer

0: indique que le fichier ne doit pas être traité comme une photo animée.

1: indique que le fichier doit être traité comme une photo animée.

Toutes les autres valeurs ne sont pas définies et sont traitées de la même manière que 0.

Si la valeur est nulle ou négative, le fichier est toujours traité comme qui ne sont pas des photos animées, même si une vidéo est ajoutée au fichier.

Le XMP étant transmis par la plupart des éditeurs sages, les fichiers image fixes peut toujours avoir une valeur résiduelle de 1 pour ce champ, même si le a été supprimée. Ce champ n'est donc pas définitif et les lecteurs doit toujours confirmer la présence d'une vidéo.

Camera:MotionPhotoVersion

Integer

Indique la version du format de fichier de la photo animée. Cette spécification définit la version "1".

Camera:MotionPhotoPresentationTimestampUs

Long

Valeur longue représentant le code temporel de présentation (en microsecondes) de l'image vidéo correspondant à l'image fixe. La valeur peut être -1 pour indiquer qu'elle n'est pas définie ou n'est pas spécifiée.

Comportement de la présentation

Si Camera:MotionPhotoPresentationTimestampUs n'est pas présent dans le paquet XMP, les lecteurs doivent utiliser un code temporel de présentation situé juste avant le code temporel la plus proche du milieu de la piste vidéo, c'est-à-dire la durée de celle-ci ; divisé par 2.

Si Camera:MotionPhotoPresentationTimestampUs est présent dans le paquet XMP et "application/motionphoto-image-meta" est présent dans la vidéo (identique à doit apparaître dans le primaryImageFrameScoreDescr presentationTimestampUs de ce circuit. Si Camera:MotionPhotoPresentationTimestampUs n'est pas présente dans le paquet XMP et que la piste de métadonnées est présente, la valeur dans la valeur de la piste de métadonnées doit être -1.

Élément du conteneur

L'élément conteneur est encodé dans les métadonnées XMP de l'image principale. définit le répertoire des éléments multimédias dans le conteneur. Les éléments multimédias doivent être situés dans le fichier conteneur, dans le même ordre que les éléments de l'élément multimédia le répertoire et doit être étroitement empaqueté.

  • L'URI d'espace de noms est http://ns.google.com/photos/1.0/container/.
  • Le préfixe d'espace de noms par défaut est Container

Le répertoire ne peut contenir qu'un seul élément d'image principal. Il doit s'agir du premier élément dans le répertoire.

Nom de l'élément

Type

Description

Directory

Tableau ordonné de structures

Tableau ordonné de structures Container:Item définissant la mise en page et du conteneur.

Élément d'élément

Les éléments multimédias décrivent la manière dont chaque élément doit être utilisé par l'application.

  • L'URI d'espace de noms est http://ns.google.com/photos/1.0/container/item/.
  • Le préfixe d'espace de noms par défaut est Item

Le premier élément multimédia doit être l'image principale. Il doit contenir un Mime spécifiant l'un des types MIME d'image répertoriés dans la section "Type MIME de l'élément" Valeurs. La longueur de l'élément principal peut être déterminée en analysant l'élément principal en fonction de son type MIME, à partir du début du conteneur de fichiers.

Le premier élément multimédia peut contenir un attribut Padding spécifiant une marge intérieure entre la fin de l'image principale encodée et le début de la l'élément multimédia suivant. Seul le premier élément multimédia peut contenir un attribut Padding.

Chaque élément multimédia doit contenir un attribut Mime. Les éléments multimédias secondaires contiennent également des attributs de longueur.

Les éléments multimédias séquentiels peuvent partager des données de ressources dans le conteneur de fichiers. La le premier élément multimédia détermine l'emplacement de la ressource dans le conteneur de fichiers, et les éléments multimédias partagés suivants ont Length défini sur 0 dans le cas où les données de ressources sont elles-mêmes un conteneur.

L'emplacement des ressources d'éléments multimédias dans le conteneur est déterminé par la somme les valeurs Length des ressources d'éléments secondaires précédentes à la longueur de l'encodage de l'image principale, plus Padding si spécifié.

Nom de l'attribut

Type

Description

Mime

String

Cette colonne est obligatoire. Chaîne simple indiquant le type MIME de l'élément multimédia dans le conteneur.

Semantic

String

Cette colonne est obligatoire. Chaîne simple indiquant la signification spécifique de l'élément multimédia à l'application. Pour en savoir plus, consultez la section "Valeurs sémantiques des éléments".

Length

Integer

Obligatoire pour les éléments multimédias secondaires, y compris le conteneur vidéo. Nombre entier positif en octets de l'élément. Les éléments multimédias doivent se présenter dans leur forme d'origine, sans aucun codage. La valeur de longueur correspond à la longueur réelle des octets du fichier.

Une longueur de 0 dans les éléments multimédias secondaires indique que la ressource d'élément multimédia est partagée avec l'élément multimédia précédent. La longueur devrait être égale à 0 dans un élément multimédia principal.

Padding

Integer

[Photos animées au format JPEG]

Facultatif pour l'élément multimédia principal. Chaîne simple contenant un entier positif en octets de longueur supplémentaire une marge intérieure entre la fin de l'image principale encodée et le début de la l'élément multimédia suivant.

[Photos animées HEIC/AVIF]

Obligatoire pour l'élément multimédia principal. Doit avoir une valeur égale à 8, le longueur de l'en-tête de la Photo animée Données vidéo ("mpvd").

Item:Valeurs de type MIME

L'attribut Item:Mime définit le type MIME de chaque élément multimédia.

Valeur

Description

image/jpeg

Image JPEG

image/heic

Image HEIC

image/avif

Image AVIF

video/mp4

Conteneur MP4

video/quicktime

Conteneur MOV

Item:Valeurs sémantiques

L'attribut Item:Semantic définit la signification spécifique de chaque application l'élément multimédia dans le répertoire du conteneur.

Value

Description

Primary

Indique que l'élément multimédia est l'image display prête principale dans le conteneur. Une photo animée doit inclure un seul élément avec cette sémantique.

MotionPhoto

Indique que l'élément multimédia est le conteneur vidéo. Une photo animée doit inclure un seul élément avec cette sémantique. L'emplacement de cet élément multimédia doit se trouver à la fin du fichier. Aucun autre octet ne peut être placé après l'arrêt des octets de cet élément multimédia.

Photos animées avec une image Ultra HDR principale

Conformément aux règles de valeur sémantique des éléments définies dans cette spécification et dans Spécifications des images Ultra HDR les photos animées avec une image Ultra HDR principale doivent également inclure un élément multimédia avec une sémantique d'élément de "GainMap". De plus, les rédacteurs qui encodent les photos animées doivent placer l'élément "gainmap" avant l'élément "video".

Comportement spécifique aux images ISOBMFF

Photos animées avec Basé sur le format ISOBMFF des images (par exemple, les images HEIC et AVIF) doivent être structurées de sorte que l'image du fichier se termine par une mention de premier niveau "Motion Photo Video Data" (Données vidéo animées). boîte, à l'aide de la sémantique du langage de description syntaxique défini dans Clause 8 de la norme ISO/IEC 14496-1:2010(E) :

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

où les « données » contient tous les octets de la vidéo. La valeur spéciale de "0" n'est pas autorisée pour la taille de la zone Données vidéo des photos animées. (Reportez-vous à ISO/IEC 14496-12:2015: 4.2 pour la définition d'une taille de classe qui prolonge Box.)

Le XMP de l'image ISOBMFF doit également définir la marge intérieure de l'élément multimédia principal. valeur de l'attribut comme étant égale à la taille en octets de la vidéo animée En-tête de la zone de données, c'est-à-dire les en-têtes de taille et de nom.

Reportez-vous à la figure 1 illustrant cette structure en cases pour obtenir un exemple de mouvement basé sur l'algorithme HEIC. photo:

Graphique linéaire illustrant la disposition des éléments dans un fichier de mouvement HEIC

Figure 1 : Illustration des cadres supérieurs d'un exemple d'image HEIC dans un seul fichier photo animé HEIC. Notez que l'ordre des boîtes concerne principalement illustration uniquement (veuillez vous référer aux normes pertinentes sur la façon de créer HEIF ou des fichiers vidéo) ; mais le fichier "mpvd" doit être placé après tous les composants HEIC de votre fichier image.

Contenu du conteneur vidéo

Le fichier de conteneur vidéo ajouté à l'image principale doit être inclus dans au moins une piste vidéo principale. Cette piste est obligatoire et contient une vidéo encodée dans AVC. HEVC ou AV1. La la résolution de l'image de la vidéo principale n'est pas définie. L'espace colorimétrique de la vidéo, et la profondeur de bits peut varier. Par exemple, les vidéos SDR peuvent avoir une bande passante de 8 bits et l'espace colorimétrique BT.709, avec une fonction de transfert sRVB. Les vidéos HDR peuvent aussi Profondeur de 10 bits, espace colorimétrique BT.2100 et transfert HLG ou PQ , ainsi que les métadonnées et pistes de métadonnées HDR.

Le fichier du conteneur vidéo peut contenir une instance secondaire de résolution supérieure facultative la piste vidéo. Les lecteurs doivent utiliser son contenu pour afficher les substitutions pour le une image fixe principale encodée dans l'image JPEG ou HEIC. Cette piste contient peut-être avec une fréquence d'images inférieure codée en AVC, HEVC ou AV1. L'image vidéo secondaire la résolution n'est pas définie.

Il est normal que toutes les images de la piste vidéo secondaire aient les images correspondantes dans la piste vidéo principale. Chaque paire d'entrées correspondantes les images des pistes vidéo principales et secondaires doivent avoir la même présentation codes temporels. S'il existe une image de piste secondaire sans image principale correspondante l'image de suivi, les spectateurs peuvent essayer de sélectionner une image de piste principale avec l'image la plus proche code temporel de présentation correspondant comme miniature représentative une piste vidéo secondaire.

Le fichier du conteneur vidéo peut contenir une piste audio mono ou stéréo 16 bits facultative à 44 kHz, 48 kHz ou 96 kHz encodées en AAC. Les lecteurs doivent présenter ceci la piste audio lorsque la piste vidéo principale est affichée.

La piste vidéo secondaire, le cas échéant, doit toujours apparaître après la piste vidéo principale. la piste vidéo. Il n'existe aucune autre contrainte d'ordre concernant les autres pistes. La l'index de la piste vidéo principale doit être inférieur à celui des autres pistes la piste vidéo. Autrement dit, si la piste vidéo principale porte le numéro 2, le numéro de la piste vidéo secondaire doit être supérieur ou égal à 3.

Piste de métadonnées vidéo avec scores d'intelligence artificielle

Les rédacteurs peuvent éventuellement ajouter une piste de métadonnées au fichier du conteneur vidéo avec saisissez "meta". La piste de métadonnées doit contenir exactement un échantillon contenant Flux d'octets au format décrit dans la section "Syntaxe".

Si la piste de métadonnées est présente, l'exemple d'entrée de table de description pour la valeur (c'est-à-dire la boîte "stsd" située à l'adresse "mdia.minf.stbl.stsd" par rapport à "trak" ) doit contenir un seul atome indiquant un échantillon de métadonnées de texte. (une boîte "mett"). Le "mett" la boîte de dialogue doit présenter une chaîne de type MIME égale à par "application/motionphoto-image-meta".

Syntaxe

Si cette piste de métadonnées est définie, son contenu doit être un flux d'octets conforme à la spécification MotionPhotoMetadataDescriptor, décrite en utilisant ici la sémantique du langage de description syntaxique défini Clause 8 de la norme ISO/IEC 14496-1:2010(E).

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