As fotos com movimento são arquivos únicos que contêm uma imagem estática e uma um vídeo curto, o que inclui gravação de áudio. Esse tipo de mídia permite que um usuário visualizar uma imagem estática de alta resolução, bem como o vídeo e o som para capturar a e o ambiente onde a imagem foi tirada.
Dependências
Confira a seguir referências normativas para esta especificação:
- Palavras-chave usadas em RFCs para indicar níveis de requisitos
- T.81 (09/92) Compressão digital e codificação de imagem estática de tom contínuo imagens (JPEG)
- ISO/IEC 23008-12:2022 Codificação de alta eficiência e entrega de mídia em ambientes heterogêneos. Parte 12: Formato de arquivo de imagem (HEIC, na sigla em inglês)
- Formato de arquivo de imagem AV1 (AVIF) (AVIF)
- Formato de imagem Ultra HDR v1.0 | Desenvolvedores Android (Ultra HDR)
- Especificação ISO 16684-1:2011(E) XMP Parte 1 (XMP)
- Armazenamento em arquivos da especificação Adobe XMP (parte 3) (XMP)
- ISO/IEC 14496-10:2022 Codificação de objetos audiovisuais Parte 10: avançada programação de vídeo (AVC, na sigla em inglês)
- ISO/IEC 23008-2:2023 Codificação de alta eficiência e entrega de mídia em ambientes heterogêneos (parte 2): vídeo de alta eficiência programação (HEVC, na sigla em inglês)
- AV1 Bitstream e Especificação do processo de decodificação (AV1, na sigla em inglês)
- ISO/IEC 14496-1:2010 Codificação de objetos audiovisuais - Sistemas
- Formato de arquivo de mídia ISO/IEC 14496-12:2015 (ISOBMFF)
- ISO/IEC 14496-14:2020 Codificação de objetos audiovisuais Parte 14: arquivo MP4 formato (MP4)
- Formato de arquivo do Apple QuickTime (MOV)
Introdução
O uso de "PRECISA", "NÃO PODE", "OBRIGATÓRIO", "DEVERIA", "NÃO DEVE", "RECOMENDADO", "PODE" e "OPCIONAL" é de acordo com o padrão IETF definido na RFC2119.
Formato de foto com movimento
Os arquivos de fotos com movimento consistem em um arquivo de imagem estática principal, JPEG, HEIC ou AVIF, com um um arquivo de vídeo secundário anexado a ele. A imagem principal contém XMP da câmera metadados que descrevem como exibir o arquivo de imagem estática e o conteúdo do arquivo de vídeo, e os metadados XMP do contêiner que descrevem como localizar o conteúdo do arquivo de vídeo.
O arquivo de imagem pode ter um mapa de ganho, como é o caso de JPEGs Ultra HDR.
Padrão de nome de arquivo
Os gravadores precisam usar um nome de arquivo correspondente à seguinte expressão regular:
^([^\\s\\/\\\\][^\\/\\\\]*MP)\\.(JPG|jpg|JPEG|jpeg|HEIC|heic|AVIF|avif)
Os leitores podem ignorar os metadados XMP, o arquivo de vídeo anexado ou o caso o padrão não seja seguido.
Codificação de dados de mídia
A imagem principal contém um elemento de contêiner XMP. Diretório de metadados que define a ordem e as propriedades da mídia subsequente no contêiner do arquivo. Cada arquivo no contêiner tem uma mídia correspondente item no diretório. O item de mídia descreve o local no arquivo. contêiner e as propriedades básicas de cada arquivo concatenado.
Atributos XMP
Dois conjuntos de metadados XMP são usados para definir as informações semânticas extras para no formato Foto com movimento. Eles podem aparecer em qualquer ordem.
Metadados da câmera
Os metadados da câmera codificam as informações sobre como apresentar a imagem principal e partes do vídeo da foto com movimento.
- O URI do namespace é
http://ns.google.com/photos/1.0/camera/
- O prefixo padrão do namespace é
Camera
Os seguintes atributos podem aparecer nos metadados XMP do arquivo de imagem estática:
Nome |
Tipo |
Descrição |
|
Essas propriedades faziam parte da especificação Microvideo V1. Eles são excluídos nesta especificação e precisam ser ignorados, se estiverem presentes. Mais especificamente, o atributo |
|
|
|
0: indica que o arquivo não deve ser tratado como uma foto com movimento. 1: indica que o arquivo deve ser tratado como uma foto com movimento. Todos os outros valores são indefinidos e são tratados de maneira equivalente a 0. Se o valor for zero ou negativo, o arquivo será sempre tratado como um que não seja uma foto com movimento, mesmo que um vídeo esteja de fato anexado ao arquivo. Como o XMP é transferido pelos editores mais bem comportados, os arquivos de imagem estática ainda pode ter um valor residual de 1 para este campo, mesmo que o vídeo foi retirado. Por isso, esse campo não é definitivo, e os leitores precisa sempre confirmar a presença de um vídeo. |
|
|
Indica a versão do formato do arquivo da foto com movimento. Esta especificação define a versão "1". |
|
|
Valor longo que representa o carimbo de data/hora da apresentação (em microssegundos) do frame do vídeo correspondente à imagem estática. O valor pode ser -1 para indicar não definido/não especificado. |
Comportamento da apresentação
Se Camera:MotionPhotoPresentationTimestampUs
não estiver presente no pacote XMP,
os leitores devem usar um carimbo de data/hora da apresentação imediatamente antes do carimbo de data/hora
mais próximo do meio da faixa de vídeo, isto é, a duração da faixa de vídeo
dividido por 2.
Se Camera:MotionPhotoPresentationTimestampUs
estiver presente no pacote XMP e
"application/motionphoto-image-meta"
estiver presente no vídeo, o mesmo
o valor precisa aparecer no presentationTimestampUs
primaryImageFrameScoreDescr
campo desse caminho. Se Camera:MotionPhotoPresentationTimestampUs
não for
presente no pacote XMP e a faixa de metadados estiver presente, o valor em
a faixa de metadados precisa ser -1.
Elemento Container
O elemento de contêiner é codificado nos metadados XMP da imagem principal e define o diretório dos itens de mídia no contêiner. Os itens de mídia devem ser localizados no arquivo de contêiner na mesma ordem que os elementos de item de mídia em diretório e precisa ser compactado.
- O URI do namespace é
http://ns.google.com/photos/1.0/container/
- O prefixo padrão do namespace é
Container
O diretório pode conter apenas um item de imagem principal e deve ser o primeiro item no diretório.
Nome do elemento |
Tipo |
Descrição |
|
Matriz ordenada de estruturas |
Matriz ordenada de estruturas |
Elemento do item
Os elementos de itens de mídia descrevem como cada item deve ser usado pelo aplicativo.
- O URI do namespace é
http://ns.google.com/photos/1.0/container/item/
- O prefixo padrão do namespace é
Item
O primeiro item de mídia precisa ser a imagem principal. Ela precisa conter um Mime
.
atributo especificando um dos tipos MIME de imagem listados no Tipo MIME do item
Valores. O comprimento do item principal pode ser determinado analisando-se
baseada no tipo MIME dela, começando no início do contêiner do arquivo.
O primeiro item de mídia pode conter um atributo Padding
especificando outros
padding entre o final da imagem principal codificada e o início da
próximo item de mídia. Somente o primeiro item de mídia pode conter um atributo Padding
.
Cada item de mídia precisa conter um atributo Mime
. Os itens de mídia secundários devem
também contêm atributos Length.
Os itens de mídia sequenciais podem compartilhar dados de recursos no contêiner de arquivos. A
o primeiro item de mídia determina a localização do recurso no contêiner do arquivo;
e os itens de mídia compartilhados subsequentes terão Length
definido como 0 caso o
os dados de recursos são um contêiner.
O local dos recursos de item de mídia no contêiner é determinado pela soma
os valores Length
dos recursos de item secundário anteriores para o comprimento de
a codificação de imagem principal mais Padding
, se especificado.
Nome do atributo |
Tipo |
Descrição |
|
|
Obrigatório. String simples que indica o tipo MIME do item de mídia no contêiner. |
|
|
Obrigatório. String simples que indica o significado específico do aplicativo para o item de mídia. Consulte a seção "Valores semânticos do item" para definição. |
|
|
Obrigatório para itens de mídia secundários, incluindo o contêiner de vídeo. O tamanho inteiro positivo em bytes do item. Os itens de mídia devem estar no formato original, sem codificação aplicada. O valor de comprimento é o tamanho real dos bytes no arquivo. O tamanho 0 nos itens de mídia secundários indica que o recurso do item de mídia é compartilhado com o item de mídia anterior. O tamanho esperado é 0 em um item de mídia principal. |
|
|
[Fotos com movimento baseadas em JPEG] Opcional para o item de mídia principal. String simples que contém um tamanho inteiro positivo em bytes de valores padding entre o final da imagem principal codificada e o início da próximo item de mídia. [Fotos com movimento baseadas em HEIC/AVIF] Obrigatório para o item de mídia principal. Deve ter um valor igual a 8, o comprimento do cabeçalho da foto com movimento Dados de vídeo ("mpvd"). |
Item:valores do tipo MIME
O atributo Item:Mime
define o tipo MIME de cada item de mídia.
Valor |
Descrição |
|
Imagem JPEG |
|
Imagem HEIC |
|
Imagem AVIF |
|
Contêiner MP4 |
|
Contêiner MOV |
Item:valores semânticos
O atributo Item:Semantic
define o significado específico do aplicativo de cada
item de mídia no diretório do contêiner.
|
Descrição |
|
Indica que o item de mídia é a principal imagem pronta para exibição no contêiner. Uma foto com movimento precisa incluir apenas um item com essa semântica. |
|
Indica que o item de mídia é o contêiner de vídeo. Uma foto com movimento precisa incluir apenas um item com essa semântica. O local desse item de mídia precisa estar no final do arquivo. Nenhum outro byte pode ser colocado depois que os bytes deste item de mídia forem encerrados. |
Fotos com movimento com uma imagem Ultra HDR principal
De acordo com as regras de valor semântico do item definidas nesta especificação e no
das especificações de imagem Ultra HDR,
as fotos com movimento com uma imagem Ultra HDR principal também precisam incluir um item de mídia com
uma semântica de item de "GainMap"
; Além disso, os autores que codificam as fotos com movimento devem colocar
o elemento do item winmap antes do elemento de vídeo.
Comportamento específico da imagem ISOBMFF
Fotos com movimento com Com base em ISOBMFF imagens (por exemplo, imagens HEIC e AVIF) devem ter uma estrutura que do arquivo termina com uma parte superior de "Dados de vídeo de fotos com movimento" caixa descritas com o uso da semântica da Linguagem de descrição sintática definida em Cláusula 8 da 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[];
}
em que os "dados" contém todos os bytes do vídeo. O valor especial de "0" não é permitido para o tamanho da caixa de dados de vídeos com fotos com movimento. (Consulte ISO/IEC 14496-12:2015: 4.2 para definir o tamanho de uma classe que estende o Box.)
O XMP da imagem ISOBMFF também deve definir o padding do item de mídia principal o valor do atributo é igual ao tamanho em bytes do vídeo da foto com movimento Cabeçalho da caixa de dados, que são os cabeçalhos de tamanho e nome.
Consulte a Figura 1 ilustrando essa estrutura de caixa para um exemplo de movimento baseado em HEIC. foto:
Figura 1. Ilustração das caixas de nível superior de uma amostra de imagem HEIC um único arquivo de foto com movimento HEIC. A ordem das caixas é principalmente para ilustração (consulte os padrões relevantes sobre como construir arquivos HEIF ou de vídeo); No entanto, o "mpvd" precisa vir depois de todas as consultas HEIC caixas de arquivo de imagem.
Conteúdo do contêiner de vídeo
O arquivo do contêiner de vídeo anexado à imagem principal precisa incluir pelo menos pelo menos uma faixa de vídeo principal. Esta faixa é obrigatória e contém vídeos codificados em AVC, HEVC ou AV1: A a resolução de frames do vídeo principal é indefinida. Espaço de cores do vídeo, transferência e a profundidade de bits pode variar. Por exemplo, vídeos SDR podem ter uma profundidade de cor, BT.709, com uma função de transferência sRGB. Ou, vídeos em HDR podem com profundidade de 10 bits, espaço de cor BT.2100 e transferência HLG ou PQ. com metadados HDR e faixas de metadados.
O arquivo de contêiner de vídeo pode conter uma instância secundária opcional de resolução mais alta faixa de vídeo. Os leitores devem usar o conteúdo para exibir substituições para o imagem estática principal codificada na imagem JPEG ou HEIC. Esta faixa pode conter vídeos com frame rate mais baixo codificados em AVC, HEVC ou AV1. O frame do vídeo secundário a resolução é indefinida.
Espera-se que todos os frames na faixa de vídeo secundária tenham frames correspondentes na faixa de vídeo principal. Cada par de valores os frames nas faixas de vídeo principal e secundária devem ter apresentação idêntica carimbos de data/hora. Se houver um frame de faixa secundário sem o principal correspondente os espectadores podem tentar selecionar um frame principal com o mais próximo carimbo de data/hora da apresentação igual à miniatura representativa dessa faixa de vídeo secundária.
O arquivo do contêiner de vídeo pode conter um áudio mono ou estéreo de 16 bits opcional a 44 kHz, 48 kHz ou 96 kHz codificadas em AAC. Os leitores devem apresentar este faixa de áudio quando a principal for exibida.
A faixa de vídeo secundária, se presente, deve sempre vir depois da faixa principal faixa de vídeo. Não há outras restrições de ordem em relação a outras faixas. A a faixa de vídeo principal deve ter um índice de faixa menor que o de qualquer faixa secundária faixa de vídeo. Ou seja, se a faixa de vídeo principal tiver a faixa número 2, todas as a faixa de vídeo secundária deve ter um número de faixa maior ou igual a 3.
Faixa de metadados de vídeo com pontuação de inteligência de máquina
Opcionalmente, os escritores podem adicionar uma faixa de metadados ao arquivo do contêiner de vídeo com uma digite "meta". A faixa de metadados deve ter exatamente uma amostra que contenha um stream de bytes no formato descrito em "Sintaxe".
Se a faixa de metadados estiver presente, o exemplo de entrada da tabela de descrição para o (ou seja, a caixa "stsd" localizada em "mdia.minf.stbl.stsd" em relação à "trak" caixa) precisa conter um único átomo que indique uma amostra de metadados de texto entrada - (ou seja, uma caixa "mett"). O "mett" precisa ter uma string de tipo MIME igual como "application/motionphoto-image-meta".
Sintaxe
Se essa faixa de metadados estiver definida, o conteúdo dela precisará ser composto por um stream de bytes
está em conformidade com esta especificação MotionPhotoMetadataDescriptor
, descrita
aqui usando a semântica da Linguagem de descrição sintática definida em
Cláusula 8 da 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