O que é vídeo de 8 bits?

O vídeo de 8 bits armazena cada componente de cor de cada amostra como um inteiro de 8 bits, oferecendo 256 valores de código possíveis por componente. É a única profundidade de bits do VP8 e dos perfis Constrained Baseline, Main e High do H.264, enquanto a ITU-R BT.2100 especifica seus sinais HDR com valores inteiros em 10 ou 12 bits.

Como funciona o vídeo de 8 bits

A profundidade de bits é o número de bits usados para quantizar cada componente de uma amostra. Oito bits oferecem 256 códigos, mas a faixa do sinal determina quais deles representam a imagem. A ITU-R BT.709, o padrão de HDTV, coloca o preto no código 16 e o branco de pico nominal em 235 para luma e R′G′B′, centraliza os componentes de diferença de cor em 128 dentro da faixa de 16 a 240 e reserva 0 e 255 para referências de temporização; o vídeo de faixa completa usa de 0 a 255. A codificação de 10 bits do mesmo padrão vai de 64 a 940, com quatro níveis para cada nível de 8 bits, e esse espaçamento maior de 8 bits explica por que os gradientes podem apresentar faixas visíveis abaixo de 10 bits por componente. A subamostragem de croma e a faixa são escolhidas separadamente da profundidade de bits: um formato de pixel identifica uma combinação de profundidade de bits e disposição de croma, um perfil de codec limita quais combinações um fluxo pode usar e a faixa normalmente é sinalizada por uma tag separada. HDR é a exceção a essa liberdade: a BT.2100 define sinais PQ e HLG com valores inteiros apenas em 10 ou 12 bits.

Informações essenciais

  1. Se um código de 8 bits significa preto, branco ou nenhum dos dois depende da faixa do sinal. Na faixa limitada (TV ou MPEG), o preto da luma é 16 e o branco nominal é 235, com valores de diferença de cor de 16 a 240; na faixa completa (PC ou JPEG), a escala vai de 0 a 255. Um vídeo de faixa limitada interpretado como faixa completa perde contraste, pois o preto e o branco ficam em 16 e 235, em vez de 0 e 255, portanto mantenha a tag de faixa consistente com as amostras em todas as conversões e atualize-a sempre que uma conversão alterar a faixa. O YouTube, por exemplo, converte uploads de faixa completa para faixa limitada.
  2. Um perfil de codec limita quais profundidades de bits e formatos de croma um fluxo pode usar. Os perfis Constrained Baseline, Main e High do H.264, HEVC Main, VP9 Profile 0 e VP8 são limitados a 8 bits com croma 4:2:0 (H.264 High também permite vídeo monocromático), portanto os dois codecs de vídeo que todo navegador com WebRTC deve implementar, VP8 e H.264 Constrained Baseline, são exclusivamente de 8 bits. O formato 4:2:0 de 10 bits exige um perfil superior, como H.264 High 10, HEVC Main 10 ou VP9 Profile 2, e os formatos 4:2:2 ou 4:4:4 de 8 bits exigem perfis como H.264 High 4:2:2, H.264 High 4:4:4 Predictive ou VP9 Profile 1. H.264 High 10 e HEVC Main 10 também aceitam vídeo de 8 bits, portanto o nome do perfil por si só não determina a profundidade de bits.
  3. A transcodificação por si só não garante uma saída 4:2:0 de 8 bits. O guia de codificação H.264 do FFmpeg alerta que, dependendo da fonte, a saída pode usar um formato de pixel que o QuickTime e a maioria dos outros reprodutores não conseguem reproduzir, e recomenda solicitar yuv420p explicitamente. Na nomenclatura do FFmpeg, yuv420p é 4:2:0 de 8 bits e yuv420p10le é seu equivalente de 10 bits, portanto verifique o formato de pixel tanto da fonte quanto da saída. Um formato de pixel não descreve a função de transferência, e o FFmpeg documenta o mapeamento de tons entre faixas dinâmicas como um filtro separado, tonemap, portanto solicitar yuv420p não transforma uma fonte PQ ou HLG em SDR.
  4. Reduzir um material de maior profundidade de bits para 8 bits pode introduzir faixas em regiões de tonalidade quase uniforme, e o dithering não é uma solução garantida. O filtro zscale do FFmpeg oferece dithering ordenado, aleatório e por difusão de erro, mas não aplica nenhum por padrão, e o FFmpeg documenta seu filtro de remoção de faixas gradfun como exclusivo para reprodução, pois a compressão com perdas tende a remover o dithering e fazer as faixas reaparecerem.

Quando o vídeo de 8 bits é importante

Escolha uma saída de 8 bits para entrega em faixa dinâmica padrão que precise ser reproduzida na maior variedade possível de navegadores e reprodutores, e solicite o formato de pixel explicitamente, pois, caso contrário, um codificador pode manter um formato de origem com maior profundidade de bits ou 4:2:2. Profundidade de bits não é faixa dinâmica: uma fonte de 10 bits não é necessariamente HDR, e reduzir uma fonte HDR para um formato de pixel de 8 bits não a converte por si só em SDR. Planeje usar pelo menos 10 bits junto com uma função de transferência PQ ou HLG para entrega HDR e inspecione primeiro as regiões de tonalidade quase uniforme e os gradientes suaves ao verificar a presença de faixas em um vídeo codificado de 8 bits.

Como a Transloadit ajuda com vídeo de 8 bits

O Robot /video/encode da Transloadit repassa ao FFmpeg as opções do seu parâmetro ffmpeg, e essas opções têm precedência sobre a predefinição escolhida, portanto uma Assembly pode solicitar explicitamente uma saída 4:2:0 de 8 bits, por exemplo com pix_fmt definido como yuv420p, em vez de depender da fonte ou da predefinição.

As tabelas de predefinições listam contêiner, codecs, taxas de bits e resolução, mas não o formato de pixel, portanto confirme a profundidade de bits de um arquivo codificado inspecionando-o.

Explore os recursos de vídeo da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente