Resposta curta :
Blocos são unidades para comparação entre quadros;
A previsão é baseada na quantidade de blocos apresentados nas imagens anteriores e nas seguintes;
Resposta mais longa :
como entrada, um codificador de vídeo não recebe mais nada além de uma sequência de quadros .
Na maioria dos casos, os quadros adjacentes são muito semelhantes entre si, e o codificador tenta descobrir se esses quadros são realmente semelhantes.
Como você diz se duas imagens são semelhantes?
- Ambas as imagens são divididas em macroblocos (você não pode comparar imagens inteiras, elas certamente diferem!)
- O algoritmo tenta descobrir se existe um bloco da imagem anterior na imagem a seguir (dentro de uma certa proximidade da sua posição original)
- Se, até um certo limite, a maioria dos blocos presentes na imagem a seguir, a imagem a seguir for computada como uma diferença da anterior (
P-frame
);
- Obviamente, blocos diferentes são codificados como estão;
- Caso contrário, a imagem a seguir é considerada pertencente a outra cena e não há outra maneira além de mantê-la inteiramente (
I-frame
).
Para entender como a previsão funciona, dê uma olhada nesta imagem. Ele é criado por um deshaker
plug-in VirtualDub
e usado para uma finalidade diferente (detecção de trepidação da câmera), mas parece muito representativo:
As setas indicam como a imagem atual difere da imagem anterior;
O quadro inteiro é dividido em macroblocos (maiores que 16x16, no entanto);
A diferença para cada bloco, comparada à imagem anterior, é um vetor de movimento ;
Como você vê, a maioria dos macroblocos (setas brancas) segue o padrão comum e, portanto, eles podem ser codificados aplicando apenas uma matriz de transposição a um quadro anterior .
No entanto, existem alguns blocos (setas vermelhas) que não cumprem o padrão comum e, portanto , devem ser codificados como estão .
Obviamente, se tudo estiver vermelho, não há outra opção senão a codificação de todo o quadro como está.