Respuesta corta : los
bloques son unidades para la comparación entre cuadros;
La predicción se basa en la cantidad de bloques que se presentan en imágenes anteriores y siguientes;
Respuesta más larga :
como entrada, un codificador de video no recibe nada más que una secuencia de cuadros .
En la mayoría de los casos, los cuadros adyacentes son muy similares entre sí, y el codificador intenta determinar si estos cuadros son realmente similares.
¿Cómo se dice si dos imágenes son similares?
- Ambas imágenes están divididas en macrobloques (no puedes comparar imágenes enteras, ¡ciertamente diferirán!)
- El algoritmo intenta encontrar si existe un bloque de la imagen anterior en la siguiente imagen (dentro de una cierta proximidad a su posición original)
- Si, hasta cierto umbral, la mayoría de los bloques están presentes en la siguiente imagen, la siguiente imagen se calcula como una diferencia con la anterior (
P-frame
);
- Por supuesto, los diferentes bloques se codifican tal cual;
- Si no, se considera que la siguiente imagen pertenece a otra escena, y no hay otra forma en lugar de mantenerla por completo (
I-frame
).
Para entender cómo funciona la predicción, eche un vistazo a esta imagen. Es creado por un deshaker
complemento para VirtualDub
y utilizado para un propósito diferente (detectar sacudidas de la cámara), pero parece muy representativo:
Las flechas indican cómo la imagen actual difiere de la anterior;
Todo el marco se divide en macrobloques (sin embargo, mayores de 16x16);
La diferencia para cada bloque, en comparación con la imagen anterior, es un vector de movimiento ;
Como puede ver, la mayoría de los macrobloques (flechas blancas) siguen el patrón común y, por lo tanto, pueden codificarse aplicando solo una matriz de transposición a un cuadro anterior .
Sin embargo, hay algunos bloques (flechas rojas) que no cumplen con el patrón común y, por lo tanto , deben codificarse tal cual .
Por supuesto, si todo es rojo, no hay otra opción que codificar el fotograma completo tal como está.