Formato de arquivo MP4 com extensão de faixas auxiliares (MP4-AT) 0.9

O formato de arquivo MP4-AT oferece suporte ao armazenamento de faixas auxiliares úteis para edição e composição pós-captura (por exemplo, uma faixa de vídeo de mapa de profundidade) com dados de mídia reproduzíveis em uma estrutura ISOBMFF/MP4.

O objetivo do formato é armazenar faixas auxiliares para que elas fiquem ocultas de clientes que não implementam essa especificação. Isso impede que os clientes interpretem faixas auxiliares como dados reproduzíveis.

Dependências

Confira a seguir as referências normativas para esta especificação:

Introdução

O uso de "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" e "OPTIONAL" é conforme o padrão IETF definido na RFC2119.

Formato de arquivo MP4-AT

O formato de arquivo MP4-AT consiste em faixas principais e auxiliares para permitir várias operações de edição. As faixas principais (por exemplo, uma faixa de vídeo a que foi aplicado um efeito de bokeh) são gravadas no arquivo MP4 normalmente, enquanto as faixas auxiliares são gravadas em um MP4 de faixas auxiliares. O MP4 de faixas auxiliares é outro contêiner compatível com MP4 e é colocado dentro da caixa axte(Extensão de faixas auxiliares). Recomendamos que a caixa axte seja a última no arquivo, o que facilita a remoção de dados auxiliares truncando o arquivo.

Esse formato é compatível com versões anteriores: os players que não oferecem suporte ao restante dele vão ler e reproduzir as faixas de vídeo principais ao carregar o arquivo.

Diagrama de linhas demonstrando a disposição dos elementos em um arquivo MP4-AT

O arquivo tem uma caixa moov.meta com um gerenciador mdta que contém os seguintes metadados. Os metadados podem aparecer em qualquer ordem.

Chave de metadados

Indicador de tipo

Valor

auxiliary.tracks.offset

78 (inteiro não assinado de 64 bits big endian)

O deslocamento do arquivo (em bytes) da caixa axte

auxiliary.tracks.length

78 (inteiro não assinado de 64 bits big endian)

O comprimento (em bytes) da caixa axte

Caixa de extensão de faixas auxiliares (axte)

Sintaxe

A caixa axte é descrita usando a semântica da caixa definida em ISO/IEC 14496-12:2022: 4.2

aligned(8) class AuxiliaryTracksExtensionBox extends Box('axte') {
  bit(8) data[];
}

em que o campo de dados contém o MP4 de faixas auxiliares.

Payload

O payload da caixa axte é um MP4 de faixas auxiliares. O MP4 de faixas auxiliares tem a estrutura MP4 usual.

Diagrama de linhas demonstrando a organização de elementos no MP4 de faixas auxiliares

O MP4 de faixas auxiliares contém metadados de amostra para todas as faixas auxiliares. Todos os payloads de amostra de faixa auxiliar precisam ser armazenados na caixa mdat do MP4 de faixas auxiliares ou na caixa mdat do MP4 externo, mas não nos dois.

No primeiro caso, auxiliary.tracks.interleaved precisa ser definido como 0 (consulte "Metadata estáticos" abaixo) e os deslocamentos de amostra na caixa axte.moov são relativos ao início do MP4 de faixas auxiliares. Isso faz com que o MP4 de faixas auxiliares seja independente, o que significa que o MP4 de faixas auxiliares pode ser lido de forma independente, sem nenhuma referência ao MP4 externo.

Nesse último caso, auxiliary.tracks.interleaved precisa ser definido como 1 (consulte "Metadados estáticos" abaixo) e os deslocamentos de amostra na caixa axte.moov são relativos ao início do arquivo, e os payloads de amostra das faixas principal e auxiliar podem ser intercalados. A caixa axte.mdat pode estar ausente nesse caso.

Metadados estáticos

O MP4 de faixas auxiliares contém uma caixa moov.meta com um manipulador mdta que contém os seguintes metadados. Os metadados podem aparecer em qualquer ordem.

Chave de metadados

Indicador de tipo

Valor

(Opcional) auxiliary.tracks.interleaved

75 (número inteiro sem sinal de 8 bits)

0: indica que as amostras não estão intercaladas e estão na caixa axte.mdat

1: indica que as amostras são intercaladas na caixa mdat da faixa de vídeo principal

Todos os outros valores são reservados e não devem ser usados.

A ausência desses metadados indica o valor padrão 0.

auxiliary.tracks.map

0 (reservado)

Formato binário:

  • Versão de 1 byte = 1
  • 1 byte de contagem de faixas = n
  • n bytes de tipos de faixa do conjunto a seguir
    • 0 = Vídeo nítido
    • 1 = Vídeo de profundidade (linear)
    • 2 = Vídeo de profundidade (invertido)
    • 3 = Metadados de profundidade com tempo
    • 4 = Vídeo translúcido
    • 5 a 127 = Reservado para uso futuro
    • 128-255 = tipos de faixa personalizados

A ordem dos tipos de faixa no auxiliary.tracks.map indica a ordem delas no payload do MP4 de faixas auxiliares.

Tipos de faixa auxiliar

O MP4 de faixas auxiliares pode conter as seguintes faixas de vídeo e metadados úteis para edição.

Faixa de vídeo nítido

Um vídeo em resolução máxima sem efeitos editáveis aplicados. A faixa de vídeo pode ser armazenada em uma resolução diferente da faixa de vídeo principal. A faixa de vídeo nítido pode usar qualquer codec de vídeo comum e pode estar em HDR padrão ou alto.

Faixa de vídeo de profundidade

A faixa de vídeo de profundidade fornece as informações de profundidade codificadas como um vídeo padrão em escala de cinza. Isso permite decodificar e codificar faixas de profundidade em dispositivos que não têm suporte especial de decodificação ou codificação para profundidade. A faixa de vídeo de profundidade pode usar H.264/AVC, H.265/HEVC, VP9, AV1 ou qualquer outro codec de vídeo comum. A faixa de vídeo de profundidade pode ser de 8 ou 10 bits e codificada linear ou inversamente (consulte a especificação de profundidade dinâmica 1.0).

Faixa de metadados de profundidade com tempo

A faixa de metadados de profundidade com tempo contém valores de normalização para calcular a profundidade e uma tabela focal que pode ser usada para calcular o raio de desfoque para um efeito bokeh.

Exemplo de tipo MIME

application/x-depth-metadata

Exemplo de sintaxe

Formato binário (todos os ints little-endian):

  • Distância próxima (ponto flutuante de 16 bits)
  • Distância longa (ponto flutuante de 16 bits)
  • Contagem de entradas da tabela focal (int de 16 bits)
  • Entrada da tabela focal
    • Distância de entrada (ponto flutuante de 16 bits)
    • Raio de entrada (ponto flutuante de 16 bits)
Faixa de vídeo translúcida

Uma faixa de vídeo que armazena o valor Alfa (transparência) para cada pixel no frame correspondente. Um valor mínimo indica transparência total, enquanto o valor máximo indica opacidade total. Os valores intermediários representam níveis variados de transparência em uma escala linear, e a composição usa o modo de mesclagem normal com valores de cor não pré-multiplicados. Assim como a faixa de vídeo de profundidade, essa faixa também precisa ser codificada como um vídeo padrão em escala de cinza.

Exemplos de casos de uso

  • Armazenar um vídeo bokeh renderizado e reproduzível em uma faixa principal, com faixas de vídeo auxiliares para os dados de cores nítidas originais (antes do desfoque) e um mapa de profundidade, além de uma faixa de metadados temporizados com metadados de profundidade que refletem o ponto de foco em cada frame. As faixas auxiliares podem ser usadas em um editor de vídeo para modificar o assunto em foco e renderizar novamente uma faixa de vídeo de bokeh de alta qualidade.

  • Armazenar um vídeo de "adesivo" translúcido pré-renderizado, por exemplo, um vídeo de emoji animado em um plano de fundo branco em uma faixa de vídeo principal, com uma faixa de vídeo auxiliar contendo um mapa alfa. A faixa auxiliar pode ser usada por um compositor para mesclar o adesivo com um plano de fundo usando informações de transparência da faixa auxiliar.