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
- 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.
- 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.
- 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
yuv420pexplicitamente. Na nomenclatura do FFmpeg,yuv420pé 4:2:0 de 8 bits eyuv420p10leé 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 solicitaryuv420pnão transforma uma fonte PQ ou HLG em SDR. - 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
zscaledo 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 faixasgradfuncomo 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.
Fontes
- Recomendação ITU-R BT.709-6: valores dos parâmetros para os padrões de HDTV (PDF)
- Recomendação ITU-R BT.2100-3: valores dos parâmetros de imagem para televisão de alta faixa dinâmica (PDF)
- MDN: guia de codecs de vídeo para a web
- WebM Project: perfis de codificação do VP9
- RFC 7742: requisitos de processamento de vídeo e codecs do WebRTC
- Wiki do FFmpeg: guia de codificação de vídeo H.264
- Documentação dos filtros do FFmpeg (scale, zscale, gradfun, tonemap)
- Código-fonte do FFmpeg n7.1: definições de formatos de pixel em libavutil/pixfmt.h
- Ajuda do YouTube: configurações de codificação recomendadas para upload
- Ajuda do YouTube: fazer upload de vídeos de alta faixa dinâmica (HDR)