Formato de fotos en movimiento 1.0

Las fotos en movimiento son archivos individuales que contienen una imagen fija y una un video corto, que incluye la grabación de audio. Este tipo de contenido multimedia le permite al usuario ver una imagen fija de alta resolución, así como el video y el sonido para capturar la y la atmósfera donde se tomó la imagen.

Dependencias

Las siguientes son referencias normativas para esta especificación:

Introducción

El uso de "DEBE", "NO DEBE", "OBLIGATORIO", "DEBERÍA", "NO DEBERÍA", "RECOMENDADO", "MAYO" y "OPCIONAL" según el estándar IETF definido en RFC2119.

Formato de fotos en movimiento

Los archivos de fotos en movimiento consisten en un archivo de imagen estática principal, JPEG, HEIC o AVIF, con una archivo de video secundario adjunto. La imagen principal contiene el archivo XMP de la cámara. metadatos que describen cómo mostrar el archivo de imagen estática y el contenido del archivo de video y metadatos de XMP del contenedor que describen cómo ubicar el contenido del archivo de video.

El archivo de imagen puede tener un mapa de ganancia, como es el caso de los JPEG Ultra HDR.

Patrón de nombre de archivo

Los escritores deben usar un nombre de archivo que coincida con la siguiente expresión regular:

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

Los lectores pueden ignorar los metadatos XMP, el archivo de video anexado o el video. el contenido si no se sigue el patrón.

Codificación de datos multimedia

La imagen principal contiene un elemento XMP de elemento de contenedor. Directorio de metadatos que define el orden y las propiedades del contenido multimedia posterior en el contenedor de archivos. Cada archivo del contenedor tiene un contenido multimedia correspondiente del directorio. El elemento multimedia describe la ubicación en el archivo. y las propiedades básicas de cada archivo concatenado.

Atributos XMP

Se usan dos conjuntos de metadatos XMP para definir la información semántica adicional para el formato de Foto en movimiento. Los metadatos pueden aparecer en cualquier orden.

Metadatos de la cámara

Los metadatos de la cámara codifican la información sobre cómo presentar la imagen principal y partes de video de la Foto en movimiento.

  • El URI del espacio de nombres es http://ns.google.com/photos/1.0/camera/
  • El prefijo del espacio de nombres predeterminado es Camera

Los siguientes atributos pueden aparecer en los metadatos XMP del archivo de imagen fija:

Name

Tipo

Descripción

Camera:MicroVideo

Camera:MicroVideoVersion

Camera:MicroVideoOffset

Camera:MicroVideoPresentation
TimestampUs

Estas propiedades formaban parte de la especificación de Microvideo V1. Se borran en esta especificación y se deben ignorar si están presentes.

En particular, el atributo MicroVideoOffset se reemplaza por el valor GContainer:ItemLength para ubicar los datos de video en el archivo.

Camera:MotionPhoto

Integer

0: Indica que el archivo no debe tratarse como una Foto en movimiento.

1: Indica que el archivo debe tratarse como una Foto en movimiento.

Todos los demás valores son indefinidos y se tratan de forma equivalente a 0.

Si el valor es cero o negativo, el archivo siempre se considera un que no sean fotos en movimiento, incluso si se agregó un video al archivo.

Debido a que la mayoría de los editores con buen comportamiento transfieren XMP, los archivos de imagen aún aún puede tener un valor residual de 1 para este campo aunque el valor el video se ha eliminado. Por lo tanto, este campo no es definitivo, y los lectores siempre debe confirmar que hay un video presente.

Camera:MotionPhotoVersion

Integer

Indica la versión en formato de archivo de la Foto en movimiento. Esta especificación define la versión “1”.

Camera:MotionPhotoPresentationTimestampUs

Long

Valor largo que representa la marca de tiempo de presentación (en microsegundos) del fotograma correspondiente a la imagen estática El valor puede ser -1 para indicar no establecido o no especificado.

Comportamiento de la presentación

Si Camera:MotionPhotoPresentationTimestampUs no está presente en el paquete XMP, los lectores deberían usar una marca de tiempo de presentación que anteceda inmediatamente a la marca de tiempo más cercana a la mitad de la pista de video, es decir, la duración de la pista de video dividida por 2.

Si Camera:MotionPhotoPresentationTimestampUs está presente en el paquete XMP y la "application/motionphoto-image-meta" está presente en el video, el mismo el valor debe aparecer en el primaryImageFrameScoreDescr presentationTimestampUs de la rama. Si Camera:MotionPhotoPresentationTimestampUs no es presente en el paquete XMP y la pista de metadatos, entonces el valor en la pista de metadatos debe ser -1.

Elemento de contenedor

El elemento contenedor está codificado en los metadatos XMP de la imagen principal y define el directorio de los elementos multimedia del contenedor. Los elementos multimedia deben ubicado en el archivo contenedor en el mismo orden que los elementos multimedia de del directorio y deben estar bien empaquetados.

  • El URI del espacio de nombres es http://ns.google.com/photos/1.0/container/
  • El prefijo del espacio de nombres predeterminado es Container

El directorio solo puede contener un elemento de imagen principal y debe ser el primero. del directorio.

Nombre del elemento

Tipo

Descripción

Directory

Arreglo de estructuras ordenado

Array ordenado de estructuras Container:Item que definen el diseño y los contenidos del contenedor.

Elemento:

Los elementos de elementos multimedia describen cómo debe usar la aplicación cada elemento.

  • El URI del espacio de nombres es http://ns.google.com/photos/1.0/container/item/
  • El prefijo del espacio de nombres predeterminado es Item

El primer elemento multimedia debe ser la imagen principal. Debe contener un Mime atributo que especifica uno de los tipos de MIME de imagen incluidos en el tipo de MIME del elemento Valores. La longitud del elemento principal se puede determinar analizando el elemento principal según su tipo de MIME, comenzando por el principio del contenedor de archivos.

El primer elemento multimedia puede contener un atributo Padding que especifique relleno entre el final de la imagen primaria codificada y el inicio de la elemento multimedia siguiente. Solo el primer elemento multimedia puede contener un atributo Padding.

Cada elemento multimedia debe contener un atributo Mime. Los elementos multimedia secundarios deben también contienen atributos de longitud.

Los elementos multimedia secuenciales pueden compartir datos de recursos dentro del contenedor de archivos. El El primer elemento multimedia determina la ubicación del recurso en el contenedor de archivos. y los siguientes elementos multimedia compartidos tienen Length establecido en 0 en caso de que el elemento los datos de recursos son en sí mismos un contenedor.

La ubicación de los recursos de los elementos multimedia en el contenedor se determina mediante la suma los valores de Length de los recursos del elemento secundario anteriores a la longitud de la codificación de la imagen principal más Padding si se especifica

Nombre del atributo

Tipo

Descripción

Mime

String

Obligatorio. Es una cadena simple que indica el tipo de MIME del elemento multimedia del contenedor.

Semantic

String

Obligatorio. Es una cadena simple que indica el significado específico de la aplicación del elemento multimedia. Consulta la sección Valores semánticos de los elementos para obtener una definición.

Length

Integer

Obligatorio para los elementos multimedia secundarios, incluido el contenedor de video. La longitud del número entero positivo en bytes del elemento. Se espera que los elementos multimedia tengan su forma original, sin codificación. El valor de longitud es la longitud real de los bytes en el archivo.

La longitud 0 en los elementos multimedia secundarios indica que el recurso del elemento multimedia se comparte con el elemento multimedia anterior. Se espera que la longitud sea de 0 en un elemento multimedia principal.

Padding

Integer

[Fotos en movimiento basadas en JPEG]

Opcional para el elemento multimedia principal. Cadena simple que contiene un número entero positivo en bytes de cantidad adicional relleno entre el final de la imagen primaria codificada y el inicio de la elemento multimedia siguiente.

[Fotos en movimiento basadas en HEIC/AVIF]

Obligatorio para el elemento multimedia principal. Debe tener un valor igual a 8, el longitud de encabezado de la Foto en movimiento Cuadro de datos de video ("mpvd")

Elemento:Valores de tipo MIME

El atributo Item:Mime define el tipo de MIME de cada elemento multimedia.

Valor

Descripción

image/jpeg

Imagen JPEG

image/heic

Imagen HEIC

image/avif

Imagen AVIF

video/mp4

Contenedor MP4

video/quicktime

Contenedor MOV

Elemento:Valores semánticos

El atributo Item:Semantic define el significado específico de la aplicación de cada uno elemento multimedia en el directorio del contenedor.

Value

Descripción

Primary

Indica que el elemento multimedia es la imagen lista para mostrar principal del contenedor. Una foto en movimiento debe incluir un solo elemento con esta semántica.

MotionPhoto

Indica que el elemento multimedia es el contenedor de video. Una foto en movimiento debe incluir un solo elemento con esta semántica. La ubicación de este elemento multimedia debe estar al final del archivo. No se pueden colocar otros bytes después de que terminan los bytes de este elemento multimedia.

Fotos en movimiento con una imagen principal Ultra HDR

Según las reglas de valor semántica del elemento definidas en esta especificación y en la especificación para las imágenes Ultra HDR las fotos en movimiento con una imagen principal Ultra HDR también deben incluir un elemento multimedia con una semántica de elemento de "GainMap". Además, los escritores que codifican fotos en movimiento deben colocar el elemento de getmap antes del elemento de video.

Comportamiento específico de la imagen ISOBMFF

Fotos en movimiento con Basado en ISOBMFF imágenes (p.ej., imágenes HEIC y AVIF) deben tener una estructura que termina con un "Datos de video y foto en movimiento" de nivel superior. caja, descrito utilizando la semántica del Lenguaje de descripción sintáctico definido en Cláusula 8 de la norma 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[];
}

en la que los "datos" contiene todos los bytes de video. El valor especial de "0" no se permite para el tamaño del cuadro de datos de video y foto en movimiento. (Consulta ISO/IEC 14496-12:2015: 4.2 para la definición de un tamaño de clase que extiende Box).

El XMP de la imagen ISOBMFF también debe definir el relleno del elemento multimedia principal. valor del atributo sea igual al tamaño en bytes del video de la foto en movimiento el encabezado de Data Box, que son los encabezados de tamaño y nombre.

Consulta la Figura 1 en la que se ilustra la estructura de esta caja para ver un ejemplo de un movimiento basado en HEIC. foto:

Diagrama de líneas que muestra la disposición de los elementos en un archivo de movimiento HEIC

Figura 1: Ilustración de los cuadros de nivel superior de una imagen HEIC de muestra dentro un único archivo de fotos en movimiento HEIC. Ten en cuenta que el orden de los cuadros es principalmente para solo ilustración (consulte los estándares relevantes sobre cómo crear archivos HEIF o de video); pero el "mpvd" debe venir luego de todas las declaraciones de tu archivo de imagen.

Contenidos del contenedor de video

El archivo contenedor de video que se añade a la imagen principal debe incluir en al menos una pista de video principal. Esta pista es obligatoria y contiene un video codificado en AVC HEVC o AV1 El la resolución del fotograma principal del video no está definida. El espacio de color del video, transfiere y la profundidad de bits puede variar. Por ejemplo, los videos SDR pueden tener una configuración profundidad, espacio de color BT.709 y una función de transferencia sRGB. O bien, los videos HDR pueden Deben tener una profundidad de bits de 10 bits, un espacio de color BT.2100 y una transferencia HLG o PQ. junto con metadatos HDR y pistas de metadatos.

El archivo contenedor de video puede contener una resolución secundaria opcional de mayor resolución Pista de video. Los lectores deben usar su contenido para mostrar sustituciones para el elemento imagen estática principal codificada en la imagen JPEG o HEIC. Esta pista puede contener video con velocidad de fotogramas baja codificado en AVC, HEVC o AV1. El fotograma de video secundario la resolución no está definida.

Se espera que todos los fotogramas de la pista de video secundario tengan los fotogramas correspondientes en la pista de video principal. Cada par de direcciones IP Los fotogramas de las pistas de video principales y secundarias deben tener la misma presentación. y marcas de tiempo. Si hay un fotograma de seguimiento secundario sin el principal correspondiente fotograma del segmento, los usuarios pueden seleccionar el fotograma principal con el que coincide con la marca de tiempo de la presentación como la miniatura representativa de la pista de video secundaria.

El archivo de contenedor de video puede contener un audio mono o estéreo opcional de 16 bits. pista a 44 kHz, 48 kHz o 96 kHz codificada en AAC. Los lectores deben presentar esto cuando se muestra la pista de video principal.

La pista de video secundaria, si está presente, siempre debe ir después de la principal. Pista de video. No existen otras restricciones de orden con respecto a otras pistas. El La pista de video principal debe tener un índice de pista inferior al de las pistas de video secundarias. Pista de video. Es decir, si la pista de video principal tiene la pista número 2, cualquier la pista de video secundaria debe tener un número de pista superior o igual a 3.

Seguimiento de metadatos de video con puntuación de inteligencia artificial

Los escritores pueden agregar opcionalmente una pista de metadatos al archivo contenedor de video con una escribe “meta”. La pista de metadatos debe tener exactamente una muestra que contenga un Flujo de bytes en el formato descrito en “Sintaxis”

Si la pista de metadatos está presente, la entrada de la tabla con la descripción de ejemplo para el de seguimiento (es decir, el cuadro "stsd" ubicado en "mdia.minf.stbl.stsd" en relación con el “trak” debe contener un solo átomo que indique un ejemplo de metadatos de texto (por ejemplo, un cuadro "mett"). The "mett" el cuadro debe tener una cadena de tipo MIME igual por “application/motionphoto-image-meta”.

Sintaxis

Si se define esta pista de metadatos, su contenido debe consistir en un flujo de bytes. conforme a esta especificación de MotionPhotoMetadataDescriptor, que se describe aquí con la semántica del lenguaje de descripción sintáctico definido en Cláusula 8 de la norma 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