Formato foto in movimento 1.0

Le foto in movimento sono singoli file che contengono un'immagine fotografica statica e un un breve video che include la registrazione audio. Questo tipo di contenuti multimediali consente a un utente visualizzare un fermo immagine ad alta risoluzione, nonché il video e l'audio per acquisire il sentiment e l'atmosfera in cui è stata scattata l'immagine.

Dipendenze

Di seguito sono riportati i riferimenti normativi per questa specifica:

Introduzione

L'utilizzo di "MUST", "MUST NOT", "REQUIRED", "SHOULD", "NON DOVREBBE", "CONSIGLIATO", "MAGGIO" e "FACOLTATIVO" secondo lo standard IETF definito in RFC2119.

Formato foto in movimento

I file di foto in movimento sono costituiti da un file immagine principale, JPEG, HEIC o AVIF, con un viene aggiunto un file video secondario. L'immagine principale contiene Fotocamera XMP metadati che descrivono come visualizzare i contenuti del file immagine e del file video; e i metadati del container XMP che descrivono come individuare i contenuti del file video.

Il file immagine potrebbe avere una mappa di guadagno, come nel caso dei file JPEG Ultra HDR.

Pattern nome file

Gli autori devono utilizzare un nome file corrispondente alla seguente espressione regolare:

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

I lettori possono ignorare i metadati XMP, il file video aggiunto o il video se il pattern non viene seguito.

codifica dei dati multimediali

L'immagine principale contiene un elemento container XMP una directory di metadati che definisce l'ordine e le proprietà dei contenuti nel contenitore di file. A ogni file nel contenitore corrisponde un file multimediale corrispondente dell'elemento nella directory. L'elemento multimediale descrive la posizione nel file e le proprietà di base di ogni file concatenato.

Attributi XMP

Vengono usati due insiemi di metadati XMP per definire le informazioni semantiche aggiuntive per il formato foto in movimento. I metadati possono essere visualizzati in qualsiasi ordine.

Metadati della videocamera

I metadati della videocamera codificano le informazioni su come presentare l'immagine principale e parti video della foto in movimento.

  • L'URI dello spazio dei nomi è http://ns.google.com/photos/1.0/camera/
  • Il prefisso dello spazio dei nomi predefinito è Camera

Nei metadati XMP del file immagine possono essere presenti i seguenti attributi:

Nome

Tipo

Descrizione

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

Queste proprietà facevano parte della specifica Microvideo V1. Vengono eliminati in questa specifica e devono essere ignorati, se presenti.

In particolare, l'attributo MicroVideoOffset viene sostituito dal valore GContainer:ItemLength per l'individuazione dei dati relativi ai video all'interno del file.

Camera:MotionPhoto

Integer

0: indica che il file non deve essere considerato come foto in movimento.

1: indica che il file deve essere trattato come una foto in movimento.

Tutti gli altri valori non sono definiti e vengono trattati in modo equivalente a 0.

Se il valore è zero o negativo, il file viene sempre considerato non in movimento, anche se al file viene aggiunto un video.

Poiché l'XMP viene trasferito dalla maggior parte degli editor ben educati, i file immagine potrebbe avere un valore residuo pari a 1 per questo campo anche se alla fine il video è stato rimosso. Questo campo, pertanto, non è definitivo e i lettori Deve sempre confermare la presenza di un video.

Camera:MotionPhotoVersion

Integer

Indica la versione del formato file della foto in movimento. Questa specifica definisce la versione "1".

Camera:MotionPhotoPresentationTimestampUs

Long

Valore lungo che rappresenta il timestamp della presentazione (in microsecondi) del frame video corrispondente al fermo dell'immagine. Il valore può essere -1 per indicare non impostato/non specificato.

Comportamento della presentazione

Se Camera:MotionPhotoPresentationTimestampUs non è presente nel pacchetto XMP, i lettori devono utilizzare un timestamp della presentazione immediatamente precedente al timestamp più vicino al centro della traccia video, ovvero la durata della traccia diviso per 2.

Se Camera:MotionPhotoPresentationTimestampUs è presente nel pacchetto XMP e "application/motionphoto-image-meta" è presente nel video, lo stesso deve apparire nell'elemento primaryImageFrameScoreDescr presentationTimestampUs campo di quel percorso. Se Camera:MotionPhotoPresentationTimestampUs non è nel pacchetto XMP e la traccia dei metadati è presente, allora il valore la traccia dei metadati deve essere -1.

Elemento contenitore

L'elemento container è codificato nei metadati XMP dell'immagine principale e definisce la directory degli elementi multimediali nel container. Gli elementi multimediali devono essere situato nel file contenitore, nello stesso ordine degli elementi dell'elemento multimediale della directory e deve essere compresso.

  • L'URI dello spazio dei nomi è http://ns.google.com/photos/1.0/container/
  • Il prefisso dello spazio dei nomi predefinito è Container

La directory può contenere un solo elemento dell'immagine principale e deve essere il primo dell'elemento nella directory.

Nome elemento

Tipo

Descrizione

Directory

Array ordinato di strutture

Array ordinato di strutture Container:Item che definisce il layout e i contenuti del container.

Elemento elemento

Gli elementi degli elementi multimediali descrivono come ogni elemento dovrebbe essere utilizzato dall'applicazione.

  • L'URI dello spazio dei nomi è http://ns.google.com/photos/1.0/container/item/
  • Il prefisso dello spazio dei nomi predefinito è Item

Il primo elemento multimediale deve essere l'immagine principale. Deve contenere un Mime attributo che specifica uno dei tipi MIME immagine elencati in Tipo MIME elemento Valori. La lunghezza dell'elemento principale può essere determinata analizzando il valore in base al tipo MIME a partire dall'inizio del contenitore di file.

Il primo elemento multimediale può contenere un attributo Padding che specifica spaziatura interna tra la fine dell'immagine principale codificata e l'inizio del successivo. Solo il primo elemento multimediale può contenere un attributo Padding.

Ogni elemento multimediale deve contenere un attributo Mime. Gli elementi multimediali secondari devono e contiene anche gli attributi Length.

Gli elementi multimediali sequenziali possono condividere dati delle risorse all'interno del contenitore dei file. La il primo elemento multimediale determina la posizione della risorsa nel contenitore di file, e gli elementi multimediali condivisi successivi hanno Length impostato su 0 nel caso in cui l'elemento e i dati delle risorse sono di per sé un container.

La posizione delle risorse degli elementi multimediali nel contenitore viene determinata sommando i valori Length delle risorse di elementi secondari precedenti alla lunghezza del la codifica dell'immagine principale più Padding, se specificato.

Nome attributo

Tipo

Descrizione

Mime

String

Obbligatorio. Stringa semplice che indica il tipo MIME dell'elemento multimediale nel contenitore.

Semantic

String

Obbligatorio. Stringa semplice che indica il significato specifico dell'applicazione dell'elemento multimediale. Consulta la sezione Valori semantici degli elementi per la definizione.

Length

Integer

Obbligatorio per gli elementi multimediali secondari, incluso il contenitore video. Il numero intero positivo in byte dell'articolo. Gli elementi multimediali devono essere nella loro forma originale, senza codifica. Il valore della lunghezza corrisponde alla lunghezza effettiva dei byte nel file.

La lunghezza pari a 0 negli elementi multimediali secondari indica che la risorsa dell'elemento multimediale è condivisa con l'elemento multimediale precedente. La lunghezza dovrebbe essere pari a 0 in un elemento multimediale principale.

Padding

Integer

[Foto in movimento basate su JPEG]

Facoltativo per l'elemento multimediale principale. Stringa semplice contenente un numero intero positivo in byte di lunghezza spaziatura interna tra la fine dell'immagine principale codificata e l'inizio del successivo.

[Foto in movimento basate su HEIC/AVIF]

Obbligatorio per l'elemento multimediale principale. Deve avere un valore uguale a 8, lunghezza dell'intestazione della foto in movimento Riquadro Dati video ("mpvd").

Elemento:valori tipo MIME

L'attributo Item:Mime definisce il tipo MIME di ogni elemento multimediale.

Valore

Descrizione

image/jpeg

Immagine JPEG

image/heic

Immagine HEIC

image/avif

Immagine AVIF

video/mp4

Contenitore MP4

video/quicktime

Contenitore MOV

Elemento:valori semantici

L'attributo Item:Semantic definisce il significato specifico dell'applicazione di ogni un elemento multimediale nella directory del container.

Value

Descrizione

Primary

Indica che l'elemento multimediale è l'immagine display principale pronta nel contenitore. Una foto in movimento deve includere un solo elemento con questa semantica.

MotionPhoto

Indica che l'elemento multimediale è il contenitore video. Una foto in movimento deve includere un solo elemento con questa semantica. Il percorso di questo elemento multimediale deve trovarsi alla fine del file. Non è possibile inserire altri byte dopo la terminazione dei byte di questo elemento multimediale.

Foto in movimento con un'immagine Ultra HDR principale

In base alle regole per i valori semantici degli elementi definite in questa specifica e le specifiche delle immagini Ultra HDR, le foto in movimento con un'immagine Ultra HDR principale devono includere anche un elemento multimediale con una semantica dell'elemento pari a "GainMap". Inoltre, gli autori che codificano le foto in movimento devono inserire l'elemento revenuemap prima dell'elemento video.

Comportamento specifico per immagine ISOBMFF

Foto in movimento con Basato su ISOBMFF immagini (ad es. le immagini HEIC e AVIF) devono avere una struttura che del file termina con i "Dati video con foto in movimento" di primo livello casella di controllo, descritti utilizzando la semantica del Syntactic Description Language definito in ISO/IEC 14496-1:2010(E) clausola 8:

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

dove i "dati" contiene tutti i byte video. Il valore speciale "0" non è consentito per le dimensioni della casella dati video foto in movimento. (Consultare ISO/IEC 14496-12:2015: 4.2 per la definizione di una dimensione della classe che estende Box).

L'XMP dell'immagine ISOBMFF deve anche definire la spaziatura interna dell'elemento multimediale principale. uguale alle dimensioni in byte del video con foto in movimento Data Box, ovvero le intestazioni di dimensione e nome.

Fai riferimento alla Figura 1 che illustra la struttura di questa scatola per un esempio di movimento basato su HEIC foto:

Diagramma a linee che mostra la disposizione degli elementi in un file di movimento HEIC

Figura 1. Illustrazione dei riquadri di primo livello di un'immagine HEIC di esempio all'interno un singolo file di foto in movimento HEIC. Tieni presente che l'ordine delle caselle è composto principalmente per a scopo puramente illustrativo (fai riferimento agli standard pertinenti su come costruire HEIF o file video); tuttavia, il file "mpvd" la casella deve essere inserita dopo nelle caselle del file immagine.

Contenuti del contenitore video

Il file del contenitore video aggiunto all'immagine principale deve includere in almeno una traccia video principale. Questa traccia è obbligatoria e contiene video codificato in AVC, HEVC oppure AV1. La La risoluzione del frame video principale non è definita. Lo spazio colore del video, e la profondità di bit può variare. Ad esempio, i video in SDR potrebbero avere una velocità a 8 bit profondità, spazio colore BT.709, con funzione di trasferimento sRGB. Oppure, i video HDR possono hanno una profondità di 10 bit, uno spazio colore BT.2100 e un trasferimento HLG o PQ insieme a metadati HDR e tracce di metadati.

Il file del contenitore video può contenere un elemento secondario facoltativo a risoluzione più alta traccia video. I lettori devono utilizzare i suoi contenuti per mostrare le sostituzioni dei valori immagine statica principale codificata nell'immagine JPEG o HEIC. Questa traccia può contenere video con frequenza fotogrammi inferiore codificati in AVC, HEVC o AV1. Il frame video secondario non è definita.

È previsto che tutti i fotogrammi nella traccia video secondaria abbiano i fotogrammi corrispondenti nella traccia video principale. Ogni coppia di risposte i frame nelle tracce video primarie e secondarie devono avere una presentazione identica i timestamp. Se è presente un frame della traccia secondaria senza un frame principale corrispondente frame del brano, gli spettatori possono provare a selezionare un frame della traccia principale con il con il timestamp della presentazione corrispondente alla miniatura rappresentativa traccia video secondaria.

Il file del contenitore video può contenere un audio in formato mono o stereo a 16 bit facoltativo traccia a 44 kHz, 48 kHz o 96 kHz codificata in AAC. I lettori dovrebbero presentare quando viene visualizzata la traccia video principale.

La traccia video secondaria, se presente, deve sempre essere dopo quella principale traccia video. Non ci sono altri vincoli di ordinamento relativi ad altre tracce. La La traccia video principale deve avere un indice delle tracce inferiore a quello di qualsiasi traccia video secondaria traccia video. In altre parole, se la traccia video principale ha la traccia numero 2, allora qualsiasi La traccia video secondaria deve avere un numero di traccia maggiore o uguale a 3.

Traccia dei metadati video con punteggio di Machine Intelligence

Gli autori possono aggiungere facoltativamente una traccia di metadati al file del contenitore video con un digita "meta". La traccia di metadati deve avere esattamente un campione contenente un flusso di byte nel formato descritto in "Sintassi".

Se è presente la traccia dei metadati, viene visualizzata la voce della tabella della descrizione di esempio per il parametro traccia (ovvero la casella "stsd" situata in "mdia.minf.stbl.stsd" relativa al parametro "trak" (box) deve contenere un singolo atomo che indica un campione di metadati di testo - (ad es.una casella "mett"). Il "mett" deve avere una stringa di tipo MIME uguale in "application/motionphoto-image-meta".

Sintassi

Se viene definita questa traccia di metadati, i relativi contenuti devono essere costituiti da uno stream di byte. conforme a questa specifica MotionPhotoMetadataDescriptor, descritta utilizzando la semantica del Syntactic Description Language definito in ISO/IEC 14496-1:2010(E) clausola 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