Princípio de codificação H264

Prefácio

H264 é uma nova geração de padrão de codificação. É conhecido por sua alta compressão e alta qualidade e suporte para transmissão de streaming media em várias redes. Em termos de codificação, entendo sua base teórica: referindo-se aos resultados estatísticos de imagens ao longo de um período de tempo, é mostrado que Em várias imagens, os pixels que geralmente são diferentes são apenas pontos dentro de 10%, a diferença de brilho não excede 2% e a diferença de cromaticidade muda apenas dentro de 1%. Portanto, para uma imagem com poucas alterações, podemos primeiro codificar um quadro de imagem completo A e, em seguida, não codificar todas as imagens nos quadros B subsequentes, mas apenas escrever a diferença do quadro A, de modo que o tamanho do quadro B seja apenas o quadro completo. 1/10 ou menos! Se o quadro C após o quadro B não mudar muito, podemos continuar a codificar o quadro C como nos referimos ao B e o ciclo continua. Esta imagem é chamada de sequência (sequência é um dado com as mesmas características). Quando uma imagem muda muito da imagem anterior e não pode ser gerada referindo-se ao quadro anterior, então encerramos a sequência anterior e iniciamos a próxima Seqüência, ou seja, um quadro completo A1 é gerado para esta imagem, e as imagens subsequentes são geradas com referência a A1, e apenas as diferenças de A1 são escritas.
   Três tipos de quadros são definidos no protocolo H264. Um quadro totalmente codificado é chamado de quadro I, um quadro que é gerado referindo-se ao quadro I anterior e contém apenas a parte de diferença da codificação é chamado de quadro P, e um quadro que se refere à codificação anterior e posterior ao quadro é chamado de quadro B.
   Os algoritmos centrais usados ​​pelo H264 são compressão intra-frame e compressão inter-frame.Compressão intra-frame é um algoritmo para gerar quadros I, e compressão inter-frame é um algoritmo para gerar frames B e P.

 

Descrição da sequência
    Em H264, as imagens são organizadas em unidades de sequências. Uma sequência é um fluxo de dados de uma parte da imagem codificada, começando com um quadro I e terminando com o próximo quadro I.
    A primeira imagem em uma sequência é chamada de imagem IDR (imagem de atualização imediata), e as imagens IDR são todas imagens I-frame. O H.264 apresenta a imagem IDR para a ressincronização de decodificação. Quando o decodificador decodifica a imagem IDR, ele limpa imediatamente a fila de quadros de referência, produz ou descarta todos os dados decodificados, procura o parâmetro definido novamente e inicia uma nova sequência. Dessa forma, se houver um erro grave na sequência anterior, você terá a chance de sincronizar novamente aqui. A imagem após a imagem IDR nunca será decodificada usando os dados da imagem anterior ao IDR.
       Uma sequência é um fluxo de dados gerado após a codificação de um segmento de imagens sem grandes diferenças de conteúdo. Quando as mudanças de movimento são relativamente pequenas, uma sequência pode ser muito longa, porque menos mudanças de movimento significa que o conteúdo da imagem tem pouca mudança, portanto, você pode editar um quadro I e, em seguida, manter os quadros P e B. Quando o movimento muda muito, uma sequência pode ser relativamente curta, por exemplo, ela contém um quadro I e 3 ou 4 quadros P.

 

Descrição dos três quadros

1. Quadro
I: quadro de codificação intra-quadro, quadro I representa o quadro-chave, você pode entendê-lo como a preservação completa deste quadro da imagem; apenas os dados deste quadro podem ser concluídos durante a decodificação (porque contém a imagem completa)
Características do quadro I:
1) É um quadro codificado por compressão full-frame. Ele executa a codificação de compressão JPEG e a transmissão de informações de imagem de quadro completo;
2) Somente dados de quadro I podem ser usados ​​para reconstruir a imagem completa durante a decodificação;
3) quadro I descreve os detalhes do fundo da imagem e assuntos em movimento;
4) quadro I não precisa Gerado com referência a outras imagens;
5) quadro I é o quadro de referência do quadro P e quadro B (sua qualidade afeta diretamente a qualidade dos quadros subsequentes no mesmo grupo);
6) quadro I é o quadro básico do grupo de quadros GOP (o primeiro quadro ), há apenas um quadro I em um grupo;
7) Os quadros I não precisam considerar o vetor de movimento;
8) Os quadros I ocupam uma quantidade relativamente grande de dados.

2. P frame 

Quadro P: quadro de codificação preditivo progressivo. O quadro P representa a diferença entre este quadro e o quadro-chave anterior (ou quadro P.) Na decodificação, é necessário sobrepor a diferença definida por este quadro com a imagem armazenada anteriormente para gerar a imagem final. (Ou seja, o quadro de diferença, o quadro P não possui dados de imagem completos, apenas os dados que são diferentes da imagem do quadro anterior)
Predição e reconstrução do quadro P: o quadro P é baseado no quadro I como quadro de referência e o quadro P é encontrado no quadro I O valor previsto e o vetor de movimento de "um certo ponto" são transmitidos juntamente com o valor de diferença previsto e o vetor de movimento. Na extremidade de recepção, de acordo com o vetor de movimento, o valor previsto de "um certo ponto" do quadro P é encontrado a partir do quadro I e adicionado com a diferença para obter o valor de amostra do "determinado ponto" do quadro P, obtendo assim um quadro P completo.
Características do quadro P:
1) O quadro P é um quadro codificado separado por 1 ~ 2 quadros após o quadro I;
2) O quadro P usa compensação de movimento para transmitir a diferença entre ele e o quadro I ou P anterior e o vetor de movimento (erro de predição);
3) Durante a decodificação, o valor predito no quadro I deve ser somado com o erro de predição para reconstruir a imagem do quadro P completa;
4) O quadro P pertence à codificação interquadro da predição direta. Refere-se apenas ao quadro I ou ao quadro P que está mais próximo a ele na frente;
5) O quadro P pode ser o quadro de referência do quadro P depois dele, ou o quadro de referência do quadro B antes e depois dele;
6) Uma vez que o quadro P é um quadro de referência, ele Pode causar a propagação de erros de decodificação;
7) Por se tratar de uma transmissão diferencial, a compressão dos quadros P é relativamente alta.

3. quadro B

Quadro B: quadro de codificação de interpolação preditiva bidirecional. O quadro B é um quadro de diferença bidirecional, ou seja, o quadro B registra a diferença entre o quadro atual e o quadro anterior e seguinte (os detalhes são mais complicados, são 4 casos, mas digo que é mais simples). Em outras palavras, para decodificar o quadro B, você não deve obter apenas o anterior A imagem armazenada em buffer e a imagem após a decodificação, a imagem final, são obtidas sobrepondo as imagens frontal e traseira com os dados do quadro atual. A taxa de compressão de quadros B é alta, mas a CPU ficará cansada durante a decodificação.
Predição e reconstrução de
quadros B Os quadros B usam o quadro I ou P anterior e o quadro P seguinte como quadros de referência para "descobrir" o valor previsto e dois vetores de movimento do "ponto" do quadro B e tomar a soma das diferenças de predição Transmissão do vetor de movimento. A extremidade receptora "encontra (calcula)" o valor previsto nos dois quadros de referência de acordo com o vetor de movimento e o soma com a diferença para obter o valor de amostra de "algum ponto" do quadro B, obtendo assim o quadro B completo.
Características do quadro B
1) O quadro B é previsto pelo quadro I ou P anterior e pelo quadro P seguinte;
2) quadro B é o erro de previsão entre ele e o quadro I ou P anterior e o quadro P seguinte E vetores de movimento;
3) O quadro B é um quadro de codificação preditiva bidirecional;
4) O quadro B tem a maior taxa de compressão, porque reflete apenas as mudanças do sujeito em movimento entre os quadros de referência C e a previsão é mais precisa;
5) O quadro B não é um quadro de referência, não Causa a disseminação de erros de decodificação.

Nota: os quadros I, B e P são definidos artificialmente de acordo com as necessidades do algoritmo de compressão e são todos quadros físicos reais. De modo geral, a taxa de compressão do quadro I é 7 (semelhante a JPG), o quadro P é 20 e o quadro B pode chegar a 50. Pode-se ver que o uso de quadros B pode economizar muito espaço, e o espaço economizado pode ser usado para salvar mais quadros I, de modo que uma melhor qualidade de imagem possa ser fornecida com a mesma taxa de bits.

 

Descrição do algoritmo de compressão O método de compressão de
h264:
1. Agrupamento: divide vários quadros de imagens em um grupo (GOP, ou seja, uma sequência). Para evitar mudanças de movimento, o número de quadros não deve ser muito grande.
2. Definindo quadros: Defina cada imagem de quadro em cada grupo como três tipos, ou seja, quadro I, quadro B e quadro P;
3. Quadro previsto: Use o quadro I como o quadro básico, preveja o quadro P com o quadro I e, em seguida, O quadro I e o quadro P prevêem o quadro B.
4. Transmissão de dados: Finalmente, a informação de diferença entre os dados do quadro I e a predição é armazenada e transmitida.
    A compressão intra-quadro também é chamada de compressão espacial. Ao comprimir um quadro de imagem, apenas os dados do quadro atual são considerados, sem considerar as informações redundantes entre os quadros adjacentes, que na verdade são semelhantes à compressão de imagens estáticas. O Intraframe geralmente usa algoritmo de compressão com perdas. Como a compressão intraframe codifica uma imagem completa, ela pode ser decodificada e exibida de forma independente. A compactação intra-frame geralmente não atinge alta compactação, que é semelhante à codificação jpeg.  
    O princípio da compressão interframe é que os dados de vários quadros adjacentes têm grande correlação, ou seja, as características de pouca alteração nas informações dos dois quadros antes e depois. Ou seja, o vídeo contínuo tem informações redundantes entre os quadros adjacentes. De acordo com esse recurso, compactar a redundância entre os quadros adjacentes pode aumentar ainda mais a quantidade de compactação e reduzir a taxa de compactação. A compactação entre quadros também é chamada de compactação temporal, que compacta os dados comparando os dados entre diferentes quadros no eixo do tempo. A compactação entre quadros é geralmente sem perdas. O algoritmo de diferenciação de quadros é um método típico de compressão de tempo. Ele compara a diferença entre o quadro atual e os quadros adjacentes e registra apenas a diferença entre o quadro atual e seus quadros adjacentes, o que pode reduzir muito a quantidade de dados.
      A propósito, compressão com perdas (perdas) e compressão sem perdas (menos perdas). A compactação sem perdas significa que os dados antes da compactação e após a descompressão são exatamente os mesmos. A maioria das compactações sem perdas usa o algoritmo de codificação de comprimento de execução RLE. A compressão com perdas significa que os dados após a descompressão são inconsistentes com os dados antes da compressão. No processo de compactação, algumas imagens ou informações de áudio que não são sensíveis aos olhos e ouvidos humanos serão perdidas e as informações perdidas não poderão ser recuperadas. Quase todos os algoritmos de alta compressão usam compressão com perdas, de modo a atingir o objetivo de baixa taxa de dados. A taxa de perda de dados está relacionada à taxa de compactação. Quanto menor a taxa de compactação, mais dados são perdidos e o efeito de descompressão geralmente é pior. Além disso, alguns algoritmos de compactação com perdas usam várias repetições de compactação, o que causa perda de dados adicional.

Acho que você gosta

Origin blog.csdn.net/u010868213/article/details/108771260
Recomendado
Clasificación