Video compression

Compressão de vídeo

As tecnologias de compressão de vídeo servem para reduzir e eliminar dados redundantes de vídeo para que um arquivo de vídeo digital possa ser enviado de maneira eficaz através de uma rede e armazenado em discos de computador. Com técnicas eficientes de compressão, é possível conseguir uma redução considerável no tamanho dos arquivos, com pouco ou nenhum efeito negativo sobre a qualidade visual. A qualidade de vídeo, entretanto, pode ser afetada se o tamanho do arquivo for reduzido ainda mais através do aumento do nível de compressão de uma determinada técnica.

Diferentes tecnologias de compressão, tanto reservadas como padrão de mercado, estão à disposição. Hoje em dia, a maioria dos fornecedores de vídeo em rede utiliza técnicas padronizadas de compressão. Os padrões são importantes para garantir a compatibilidade e a interoperabilidade. Eles são especialmente relevantes para a compressão de vídeo, pois o vídeo pode ser usado para finalidades diferentes e, em algumas aplicações de vigilância por vídeo, precisa poder ser visto muitos anos depois da data de gravação. Implementando padrões, os usuários finais podem selecionar entre diferentes fornecedores, em vez de ficarem presos a um único fornecedor ao projetar um sistema de vigilância por vídeo.

A Axis utiliza três padrões diferentes de compressão de vídeo. São eles Motion JPEG, MPEG-4 Part 2 (ou simplesmente MPEG-4) e H.264. O H.264 é o padrão mais recente e mais eficiente de compressão de vídeo. Este capítulo aborda os fundamentos da compressão e descreve cada um dos três padrões já mencionados.

Codec de vídeo

O processo de compressão envolver a aplicação de um algoritmo ao vídeo de origem para criar um arquivo compactado pronto para transmissão ou armazenamento. Para reproduzir o arquivo compactado, um algoritmo inverso é aplicado para produzir um vídeo que apresenta praticamente o mesmo conteúdo do vídeo original. O tempo necessário para compactar, enviar, descompactar e exibir um arquivo é denominado latência. Quanto mais avançado o algoritmo de compressão, maior será a latência.

O par de algoritmos que funcionam juntos é chamado codec (codificador/decodificador) de vídeo. Codecs de vídeo de diferentes padrões normalmente não são compatíveis entre si, ou seja, o conteúdo de vídeo compactado em um padrão não pode ser descompactado em um padrão diferente. Por exemplo, um decodificador MPEG-4 não funciona com um codificador H.264. Isso ocorre simplesmente porque um algoritmo não pode decodificar corretamente a saída gerada por outro algoritmo, mas é possível imple¬mentar muitos algoritmos diferentes no mesmo software ou hardware, permitindo a coexistência de vários formatos.

Compressão de imagem x compressão de vídeo

Padrões de compressão utiliza a tecnologia de codificação intra-quadro. Os dados são reduzidos dentro de um quadro de imagem pela simples retirada de informações desnecessárias que não são perceptíveis ao olho humano. O Motion JPEG é um exemplo desse padrão de compressão. As imagens em uma seqüência Motion JPEG são codificadas ou compactadas como imagens JPEG individuais.

Com o formato Motion JPEG, as três imagens na seqüência acima são codificadas e enviadas como imagens separadas (quadros I) independentes entre si.

Algoritmos de compressão de vídeo como o MPEG-4 e o H.264 usam a previsão entre quadros (interframe prediction) para reduzir os dados de vídeo entre uma série de quadros. Isso envolve técnicas tais como codificação de diferenças, onde um quadro é comparado com um quadro de referência, e apenas os pixels que se modificaram em relação ao quadro de referência são codificados. Dessa forma, reduz-se o número codificado e enviado de valores de pixels. Quando essa seqüência codificada é exibida, as imagens aparecem exatamente como na seqüência de vídeo original.

Com a codificação de diferenças, apenas a primeira imagem (quadro I) é integralmente codificada. Nas duas imagens seguintes (quadros P), são feitas referências aos elementos estáticos da à primeira imagem, ou seja, a casa. Apenas as partes móveis, ou seja, o homem correndo, são codificadas através de vetores de movimento, reduzindo, assim, a quantidade de informação enviada e armazenada.

Outras técnicas tais como compensação de movimento por blocos podem ser aplicadas para reduzir ainda mais os dados. A compensação de movimento por blocos leva em conta que grande parte do que compõe um novo quadro de uma seqüência de vídeo pode ser encontrada em um quadro anterior, mas talvez em um lugar diferente. Essa técnica divide um quadro em uma série de macroblocos (blocos de pixels). Bloco a bloco, um novo quadro pode ser composto ou “previsto” procurando-se um bloco idêntico em um quadro de referência. Se for encontrada uma coincidência, o codificador codifica a posição onde o bloco idêntico deve ser encontrado no quadro de referência. Codificar o vetor de movimento, como ele é chamado, consome menos bits do que se o conteúdo real de um bloco fosse codificado.

Ilustração da compensação de movimento por blocos.

Um quadro I, ou intraquadro, é um quadro autônomo que pode ser codificado de maneira independente, sem nenhuma referência a outras imagens. A primeira imagem de uma seqüência de vídeo sempre é um quadro I. Os quadros I são necessários como pontos de início para novos visualizadores ou como pontos de ressincronização, caso o fluxo de bits transmitido seja danificado. Os quadros I podem ser usados para implementar funções de avanço rápido, retrocesso e outras funções de acesso aleatório. Um codificador insere automaticamente Quadros I a intervalos regulares ou sob demanda caso seja esperado que novos clientes entrem na visualização de um fluxo. A desvantagem dos Quadros I é que eles consomem muito mais bits, mas, por outro lado, não geram muitos artefatos, que são causados por dados ausentes.

Um quadro P, que significa “interquadro preditivo” (predictive inter frame), faz referência a partes de quadros I e/ou P anteriores para codificar o quadro. Os Quadros P normalmente requerem menos bits que os Quadros I, mas uma das desvantagens é que eles são muito sensíveis a erros de transmissão devido à complexa dependência de quadros P e/ou I anteriores.

Um quadro B, ou interquadro bipreditivo (bi-predictive inter frame), é um quadro que faz referências a um quadro de referência anterior e a um quadro futuro. O uso de quadros B aumenta a latência.

Uma seqüência típica com quadros I, B e P. Um P-frame pode fazer referência apenas aos quadros I ou P precedentes, ao passo que um B-frame pode fazer referência a quadros I ou P precedentes e posteriores.

Quando um decodificador de vídeo restaura um vídeo decodificando o fluxo de bits quadro a quadro, a decodificação deve sempre começar com um I-frame. Os Quadros P e B, se forem usados, devem ser decodificados junto com o(s) quadro(s) de referência.

Os produtos de vídeo em rede da Axis permitem que os usuários definam o comprimento do GOV (grupo de vídeo), que deter¬mina quantos quadros P devem ser enviados antes que outro quadro I seja enviado. Reduzindo-se a freqüência dos quadros I (GOV mais longo), a velocidade de transmissão de bits pode ser reduzida. Para reduzir a latência, não são usados quadros B.

Além da codificação de diferenças e da compensação de movimento, outros métodos avançados podem ser utilizados para reduzir ainda mais os dados e melhorar a qualidade do vídeo. Por exemplo, o H.264 permite o uso de técnicas avançadas, entre elas esquemas de previsão para codificar quadros I, maior compensação de movimento com precisão de frações de pixel, e filtro de desbloqueio no circuito para suavizar as bordas dos blocos (artefatos).

Próximo tema: Formatos de compactação

Formatos de compactação