processo de algoritmo de codificação h264

codec xh264: 

Camada de codificação: algoritmos centrais, como compactação e descompactação de vídeo, VLC é esta série de algoritmos e a sequência de bits obtida após a codificação são dados VLC.

Camada de abstração de rede: use as informações de emenda do fluxo de código original compactado para identificar durante a decodificação e organize o formato para facilitar a transmissão de rede subsequente ou o armazenamento de mídia. Mapeie os dados VLC na etapa anterior em unidades NAL.

Camada de transporte: usada para transporte.

estrutura de codificação de imagem da camada h264-VLC:

Como a camada VLC é a sequência de bits codificada obtida pelo codec do monitor principal, para se adaptar ao comprimento máximo da unidade de transmissão de diferentes redes de transmissão, a divisão da faixa é realizada. A prática usual é que uma NALU contenha uma fatia.

h264-frame (quadro), campo (campo), linha (linhas)

Uma sequência de vídeo é composta por quadros N. Geralmente, existem dois métodos de varredura ao capturar imagens, um é a varredura progressiva e o outro é a varredura entrelaçada. Para varredura entrelaçada, cada quadro geralmente tem 2 campos, um é chamado de campo superior e o outro é chamado de campo inferior. Supondo que um quadro de imagem tenha 720 linhas, para o campo superior, as linhas de dados válidas são todas as linhas pares de um quadro de imagem e, para o campo inferior, as linhas de dados válidas são todas as linhas ímpares de um quadro de imagem.

Campo = campo superior de supressão vertical (primeira supressão vertical) + linha de dados válida (vídeo ativo) + campo inferior de supressão vertical (segunda supressão vertical)

Linha = código final (EAV) + blanking horizontal (Horizontal Vertical Blanking) + código inicial (SAV) + dados válidos (Active Video)

h264-o que é NAL

O nome completo do NAL é Network Abstract Layer, que é a camada de abstração da rede. No padrão de codificação de vídeo H.264/AVC, toda a estrutura do sistema é dividida em dois níveis: Nível de Codificação de Vídeo (VCL) e Nível de Abstração de Rede (NAL). Entre eles, o primeiro é responsável por representar efetivamente o conteúdo dos dados de vídeo, enquanto o último é responsável por formatar os dados e fornecer informações de cabeçalho para garantir que os dados sejam adequados para transmissão em vários canais e mídias de armazenamento. VCL (Video Coding Layer) é uma especificação de H.264/AVC, que significa dados de imagem compactados e sem redundância (redundância visual). Seu núcleo técnico inclui estimativa de movimento, codificação de conversão, codificação preditiva, filtro de desbloqueio e codificação de entropia.

h264 - o que é uma unidade NAL

O fluxo de código h264 original é um fluxo contínuo de unidades NAL. A estrutura da unidade NAL consiste em duas partes. Contém informações de cabeçalho, um byte e carga útil de sequência de bytes brutos RBSP (SODB).

A informação do cabeçalho NAL ocupa um byte e contém três campos, o bit de proibição F, o bit de indicação de importância R e o sinalizador de tipo T. Entre eles, o bit de proibição indica se a unidade NAL atual tem um erro de bit e o bit indicador de importância é usado para indicar a importância. Por exemplo, a unidade NAL atual não é usada para previsão, o que significa que a perda da decodificação final não causará muito impacto.Na etapa de transmissão, a importância precisa ser ajustada.Unidades NAL superiores são protegidas.

Previsão h264-intra, previsão de brilho de bloco 4*4:

A~P são os valores dos pixels conhecidos circundantes e a~p são as posições dos pixels a serem previstos. É necessário prever os valores de pixel de um total de 16 pontos de a até p através dos valores de pixel do entorno de A a P.

Mode0 (Vertical): cálculo vertical de A, B, C, D acima

Modo1 (Horizontal): Calcular horizontalmente de I, J, K, L à esquerda

Modo2 (DC): Os valores previstos de todas as amostras em P são iguais à média de AD e IL

Mode3 (Diagonal para baixo-esquerda): Interpolado das amostras inferior esquerda e superior direita na direção de 45 graus

Mode4 (Diagonal Down-Right): Os cálculos são feitos em um ângulo de 45 graus para o canto inferior direito

Modo5 (Vertical-Direita): Efetua o cálculo na direção de cerca de 26,6 graus para a direita na direção vertical para baixo (ou seja, largura/altura = 1/2).

Mode6 (Horizontal-Down): Os cálculos são feitos em uma direção de cerca de 26,6 graus para baixo da horizontal para a direita.

Mode7 (Vertical-Left): O cálculo é realizado em uma direção que é cerca de 26,6 graus para a esquerda na direção vertical descendente.

Modo 8 (Horizontal-Up): Os cálculos são feitos em uma direção de cerca de 26,6 graus para cima da horizontal para a direita.

Previsão h264-intra, previsão de brilho de 16*16 blocos:

Da mesma forma, use os pontos circundantes para prever 16*16 pontos de pixel. Existem quatro modos no total.

Mode0 (vertical): Calculado verticalmente a partir da amostra superior (H)

Modo1 (horizontal) é calculado horizontalmente a partir da amostra esquerda (V) 

Modo2 (DC): Média da amostra superior (H) e da amostra esquerda (V)

Mode3 (Plano): Com base na amostra superior (H) e na amostra esquerda (V) por meio de uma função de plano, funciona bem em áreas onde o brilho muda suavemente.

Previsão h264-intra, previsão de croma de 8*8 blocos:

Observe que todas as previsões acima são luma, 8*8 é usado para previsão de croma e a seleção do modo de previsão dos componentes Cr e Cb do croma é a mesma. O modo de previsão de croma é descrito de forma semelhante ao modo de previsão de 16x16 luma, exceto que os números do modo são diferentes. DC (modo 0), horizontal (modo 1), vertical (modo 2), plano (modo 3).

Seleção do modo de previsão h264-intra:

Seleção do modo de melhor previsão do Chroma, compare apenas o custo de 4 modos e o custo de substituição é o menor.

Para selecionar o melhor modo de previsão de brilho, primeiro compare o custo de 4*4 (em 9) e depois compare o custo de 16*16 (em 4). Aquele que leva o menor custo no final.

Observe que a função de custo de brilho 4*4 é o modelo RDO e o brilho 16*16 é o modelo SATD. A função de custo chroma 8*8 é semelhante ao luma 4*4.

Codificação h264 para previsão intra:

Normalmente, os quadros I executam muita predição intraquadro. Para predição de bloco luma 4*4 intraquadro, a codificação exponencial não assinada de Golomb é usada para codificar diretamente o número do modo de predição no fluxo de código. Por exemplo, usando mode0, é necessário apenas registrar os números do modo de codificação dos pixels circundantes e os pontos a serem previstos e, em seguida, um máximo de 13 pixels pode ser usado para representar os valores de brilho de 13+4*4 pixels.

previsão h264-inter, interpolação luma sub-pixel:

1/2 pixels usam (1,-5,20,20,-5,1) interpolação de filtro de seis toques e, em seguida, quatro cores e cinco entradas.

1/4 de pixel é para calcular o valor médio dos pixels adjacentes.

Previsão h264-inter, interpolação de subpixel de croma:

A estimativa de movimento de croma precisa suportar a longitude de 1/8 de pixel, usando um método linear quadrático.

quadro de referência de longo prazo h264:

O codificador armazenará em cache até 16 quadros de referência, e os quadros de referência de curto prazo armazenados anteriormente serão inúteis devido à troca de cena. Então, ao prever, é necessário olhar para um quadro de referência de longo prazo da cena atual para a previsão. Por causa da mudança de cena, não faz sentido referir-se ao último quadro de referência de curto prazo para estimativa de movimento porque ele pertence à cena anterior. A mudança de cena aqui referida refere-se à mudança da cena 1 para a cena 2 e, em seguida, voltar para a cena 1. A maioria das cenas no vídeo é alternada para frente e para trás, e uma pequena parte está sempre mudando para novas cenas. o codificador detectará a cena após detectar a troca de cena. Se o cache atual tiver um quadro de referência de longo prazo que seja relativamente semelhante à cena atual, descubra e use-o como referência para estimativa de movimento. De acordo com os resultados do teste, se o quadro de referência de longo prazo não for usado e apenas a previsão intraquadro for usada em vez da estimativa de movimento após a troca de cena, a qualidade objetiva do vídeo diminuirá e a taxa de bits aumentará acentuadamente no momento da troca de cena. Ao usar quadros de referência de longo prazo como compensação de movimento, a qualidade objetiva é cerca de 0,5db maior.

Otimização de codificação para vetores de movimento h264:

Geralmente, após a estimativa de movimento, há duas partes dos dados que precisam ser codificadas, uma é o residual e a outra é o vetor de movimento. Tomando a divisão rápida de macro 4*4 como exemplo, uma macro rápida contém 16 pixels e há 16 vetores de movimento de pixel a serem salvos. O vetor de movimento contém duas variáveis, a saber, direção e distância (coordenadas horizontais e verticais também podem ser usadas ), então a taxa de codificação do vetor de movimento pode ser maior que o residual. Portanto, na codificação real, o vetor de movimento será estimado duas vezes, ou seja, os vetores de movimento de duas macros adjacentes também são correlacionados. Por exemplo, o vetor de movimento da Macro A é MVa, e o vetor de movimento da Macro B é MVb. O MV residual do vetor de movimento é obtido através de MVa-MVb, ou seja, apenas o vetor de movimento MV da Macro A e o correspondente o vetor de movimento da Macro B precisa ser codificado. O resíduo pode ser usado para restaurar MVb com MVa.

Regras para previsão do vetor de movimento h264:

Como o vetor de movimento também pode ser previsto, é necessário descobrir qual vetor de movimento macro é usado como referência para prever o vetor de movimento macro alvo. Na verdade, se você quiser prever o vetor de movimento macro atual, você pode usar o vetor de movimento macro atual Escolha entre as direções esquerda e direita com referência a Hongkuai. As regras de seleção específicas são as seguintes:

Se E não for 16*8 ou 8*16, o vetor de movimento de E considera a mediana (valor não médio) dos três vetores de movimento rápido de ABC como o valor previsto.

Se E for 16*8, a parte superior 8*8 é prevista pelo MV de B e a parte inferior é prevista pelo MV de A.

Se E for 8*16, a parte 8*8 à esquerda é prevista pelo MV de A e a parte à direita é prevista pelo MV de C.

Ao mesmo tempo, ele precisa ser ajustado de acordo com a determinação de usabilidade do ABCD.

Modo de codificação h264-SKIP:

O modo SKIP refere-se à codificação rápida de macro, algumas macros rápidas podem ser marcadas como SKIP. SKIP tem dois valores.

p_SKIP: Não há resíduo de vetor de movimento e nenhum resíduo de quantização. Ao decodificar, o valor previsto do ponto de pixel é restaurado diretamente com o valor previsto do vetor de movimento de referência.

b_SKIP: Não há resíduo de vetor de movimento e nenhum resíduo de quantização. Ao decodificar, calcule diretamente o MV para frente e para trás no modo direto para obter o valor de previsão de pixel.

Ordem de codificação de previsão de quadro IBP do h264:

Intercepte um pedaço de armazenamento de vídeo de acordo com a ordem de reprodução e armazene-o da esquerda para a direita, quanto mais próximo à direita, mais cedo a reprodução e quanto mais à esquerda, mais tarde a reprodução. A sequência de codificação real é invertida, ou seja, o quadro reproduzido posteriormente é selecionado como o quadro I para prever o quadro P reproduzido anteriormente e, em seguida, o quadro entre os IPs é codificado como B. O processo é executado continuamente, normalmente inserindo um novo I-frame a cada 12 a 15 PBs. Além disso, quando o conteúdo do vídeo não muda muito, o intervalo de quadros I será aumentado automaticamente. Como o quadro B trará atraso de codificação, geralmente o quadro B não será codificado em aplicações práticas.

detecção de brilho h264 e previsão ponderada:

A ideia da codificação com base na previsão entre quadros é detectar movimento macro-rápido e realizar a detecção de movimento com base no brilho, desde que o brilho não mude. Ou seja, é preciso assumir que o brilho do vídeo não muda. Em aplicações de vídeo, o brilho mudará definitivamente devido à abertura da lente como um todo ou fontes de luz locais. A solução é detectar primeiro a mudança de brilho. h264 seleciona dois histogramas de brilho de imagem (cálculo simples e baixa sensibilidade a mudanças de conteúdo de imagem) para detectar mudanças de brilho e calcula a diferença entre os histogramas das duas imagens em cada nível de cinza O valor absoluto soma é então limitada para determinar se ocorre um salto de brilho. Então, de acordo com as mudanças no brilho das duas imagens antes e depois, uma certa ponderação de brilho é realizada durante a previsão, e o brilho do macro pixel rápido a ser previsto é primeiro aumentado (compensado) para o mesmo nível que o brilho do pixel rápido da macro de referência usando ponderação e, em seguida, a estimativa de movimento é executada.

O método simples é calcular a proporção de brilho do quadro de referência e do quadro previsto e, em seguida, multiplicar a proporção pelo macrobloco do quadro a ser previsto para compensar, mas o efeito das alterações locais no macro é ignorado. Normalmente, na prática, o coeficiente de ponderação não é medido por uma taxa de brilho de quadro simples, mas um padrão é usado para calcular a taxa de brilho ideal. Além disso, a compensação de brilho também realiza a compensação de brilho para cada bloco macro de acordo com a situação (fade-in e fade-out geral) ou apenas realiza compensação de brilho para uma parte dos blocos macro (cada bloco macro precisa julgar se é necessária uma compensação e o valor do cálculo é grande. Na verdade, esse método não é usado. Way).

A fórmula 4*4 do inteiro DCT em h264:

Quantizador em h264:

É necessário quantizar uma série de números, como coeficientes residuais, vetores e escalares para facilitar a codificação de entropia subsequente. h264 tem alguns designs especiais no quantizador. Estudos mostraram que os valores dos coeficientes residuais obedecem ao Lapla- distribuição cai. Existem mais tipos de distribuição entre quadros do que distribuição intraquadro. A fórmula de quantização é , e a tabela de nível de quantização. Além disso, para oferecer suporte a vídeo de alta definição, o h264 também apresenta quantização não uniforme, o que significa que o coeficiente de variação e o tamanho do passo de quantização de diferentes posições são diferentes.

4*4 transformação DCT inteira e processo de quantização de h264:

Processo de transformação e quantização DCT de 8*8 inteiros de h264:

Codificação de comprimento de execução de h264:

Após a transformação e quantização do resultado, é necessária a codificação de comprimento de execução. Como o padrão suporta transformações como 4*4 e 8*8, e a transformação de Hadamard é realizada nos componentes DC de alguns métodos de previsão, há um total de 13 blocos tipos, com diferentes rápidos Os coeficientes de varredura do tipo de codificação de comprimento de execução são diferentes.

Codificação de entropia de h264:

Existem dois tipos de codificação de entropia para quantização residual. CAVLC, CABAC.

CAVLC: Codificação de comprimento variável adaptável ao contexto para codificação de dados residuais de chroma e luma.

CABAC: otimizado e atualizado com base no CAVLC.

filtro de desbloqueio h264:

O efeito de bloco ocorre porque a conexão de blocos é descontínua ao codificar em unidades de macroblocos. Por exemplo, não há efeito de bloco quando o DCT é executado em toda a imagem, mas o DCT para um único macrobloco remove informações de alta frequência dentro do macrobloco. Dependências entre blocos são ignoradas. Além disso, quando o macrobloco é quantizado após o DCT, os coeficientes do DCT são processados ​​com diferentes tamanhos de passo de quantização e depois arredondados, o que amplifica o efeito de placa. Os coeficientes DCT são quantizados para 0 em alta frequência, fazendo com que bordas fortes apareçam irregulares e ruído de rede em limites cruzados. Existem duas maneiras de reduzir esse efeito.

Pós-filtragem: processa os dados no buffer de exibição no final da decodificação, pois é uma operação antes da conclusão e exibição da decodificação e é opcional no padrão.

Filtragem de loop: A filtragem é realizada durante a decodificação e é necessário usar filtros correspondentes durante a codificação para que a decodificação possa reconstruir corretamente os gráficos.

A introdução dos quadros h264-SP e SI:

Na estrutura IBP GOP tradicional, apenas o quadro I pode ser usado como um ponto de comutação entre fluxos (para visualização rápida, posicionamento aleatório, anúncio de inserção de vídeo etc. que precisam alternar rapidamente para um segmento) e pode não haver Eu quadro para comutação aleatória. Para suportar os pontos de comutação de fluxo, os quadros SI e SP são introduzidos.

Quadro SP: É dividido em dois tipos: SP principal e SP auxiliar.É codificado com base na previsão de compensação de movimento entre quadros, e a mesma imagem é reconstruída usando diferentes quadros de referência.

Quadro SI: Novamente, o papel é fornecer um quadro alternativo ou ponto de comutação.

controle de taxa h264:

No controle de taxa de bits, sob uma determinada taxa de bits, é necessário otimizar várias informações de codificação (taxa de quadros, tamanho da imagem, parâmetros de quantização, quantidade de cálculo), etc., para que a distorção da qualidade da codificação de vídeo seja menor sob a condição de manter uma determinada taxa de bits. Existem várias maneiras de controlar a taxa de bits.

(1) Controle de taxa de código com base no status do cache: Dê um limite ao cache.Quando o cache excede o limite, o codificador reduz a taxa de código aumentando os parâmetros de quantização ou descartando quadros.

(2) Controle de taxa de código com entrada de feed-forward: Além de usar o limite de cache, a autoinformação dos dados codificados de entrada também é considerada, e o cálculo do bit de destino e o cálculo do parâmetro de quantização antes e depois da codificação são executados após inicialização e antes da codificação.

(3) Controle de taxa baseado em distorção de taxa: converta-o em um problema de modelo de otimização com restrições para obter os parâmetros de codificação ótimos. O clássico é o algoritmo TMN8 em h263+.

(4) Controle de taxa de bits da codificação multicamada: fluxos de código multinível são obtidos durante a codificação, incluindo um fluxo de código básico e alguns fluxos de código aprimorados. O primeiro é usado para garantir a reconstrução da imagem e o último é usado para otimizar a qualidade.

(5) Controle de taxa de código refinada e escalável: omitir.

Otimização de taxa de distorção:

Com base em uma ampla variedade de algoritmos, é fornecida uma variedade de ferramentas de codificação (codificação intra, codificação inter, tamanho de macrobloco, etc.). Combinar e multiplexar as ferramentas de codificação entre si resultará em resultados de codificação muito diferentes para o mesmo vídeo, com diferentes graus de distorção. A combinação de modos de estratégia de otimização é chamada de otimização de distorção de taxa. A escolha do modo de estratégia é a seguinte:

(1) Seleção da divisão do bloco macro, 16*16, 16*8, 8*16, 8*8, etc.

(2) Se o macrobloco usa intra-frame ou inter-frame

(3) Qual modo de previsão deve ser usado para codificação intraquadro e o macrobloco de brilho deve ser 16*16 ou 4*4

(4) Se a macro do quadro P adota rapidamente o salto e se a macro do quadro B adota rapidamente o modo de previsão direta

(5) Seleção do tamanho do passo de quantização

O efeito da combinação de estratégias será expresso como uma curva RD, que mostra a capacidade de compressão final da codificação.

Multiplicação lagrangiana e seleção de modos de codificação:

Para problemas de otimização matemática, a multiplicação de Lagrange é um método de encontrar extremos de uma função multivariada de variáveis ​​sujeitas a uma ou mais condições.

Acho que você gosta

Origin blog.csdn.net/qq_34448345/article/details/127865353
Recomendado
Clasificación