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:
- Palavras-chave para uso em RFCs para indicar níveis de requisito
- ISO/IEC 14496-12:2022 Formato de arquivo de mídia ISO Box (ISOBMFF/MP4)
- ISO/IEC 14496-10:2022 Codificação de objetos audiovisuais Parte 10: codificação de vídeo avançada (AVC)
- ISO/IEC 23008-2:2023 Codificação de alta eficiência e entrega de mídia em ambientes heterogêneos Parte 2: Codificação de vídeo de alta eficiência (HEVC)
- Codecs de vídeo VP9 (VP9)
- Especificação do processo de decodificação e do fluxo de bits AV1 (AV1)
- Especificação de profundidade dinâmica 1.0
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.
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 |
|
78 (inteiro não assinado de 64 bits big endian) |
O deslocamento do arquivo (em bytes) da caixa |
|
78 (inteiro não assinado de 64 bits big endian) |
O comprimento (em bytes) da caixa |
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.
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) |
75 (número inteiro sem sinal de 8 bits) |
0: indica que as amostras não estão intercaladas e estão na caixa 1: indica que as amostras são intercaladas na caixa Todos os outros valores são reservados e não devem ser usados. A ausência desses metadados indica o valor padrão 0. |
|
0 (reservado) |
Formato binário:
|
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 |
|
Exemplo de sintaxe |
Formato binário (todos os ints little-endian):
|
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.