Le M-JPEG |
La première idé qui vient à l'esprit après s'être interessé à la compression d'images est d'appliquer l'algorithme de compression JPEG à une séquence vidéo (qui n'est finalement qu'une suite d'images). C'est notamment le cas du M-JPEG (qui n'est pas vraiment ce que l'on appelle le MPEG) qui autorise un débit de 8 à 10 Mbps, ce qui le rend utilisable dans les studios de montage numérique, d'autant plus que chaque image étant codée séparément, on peut y accéder aléatoirement.
Le MPEG-1 |
Dans de nombreuses séquences vidéos, de nombreuses scènes sont fixes, comme dans les feuilletons de l'Inspecteur Derrick (Oups! ça m'a échappé), cela se nomme la redondance temporelle.
Lorsque seules les lèvres de l'acteur bougent, presque seuls les pixels de la bouche vont être modifiés d'une image à l'autre, il suffit donc de ne décrire seulement le changement d'une image à l'autre. C'est là la différence majeure entre le MPEG et le M-JPEG.
Cependant cette méthode aura beaucoup moins d'impact sur une scène d'action (pas de craintes à avoir du côté de Derrick, vous pouvez encoder tranquillement votre épisode préféré de cette magnifique série! :)
Il existe donc 4 façons d'encoder une image avec le MPEG-1:
Les frames I |
Ces images sont codées uniquement en utilisant le codage JPEG, sans se soucier des images qui l'entourent. De telles images sont nécessaires dans une vidéo MPEG car ce sont elles qui assurent la cohésion de l'image (puisque les autres sont décrites par rapport aux images qui les entourent), elles sont utiles notamment pour les flux vidéo qui peuvent être pris en cours de route (télévision), et sont indispensables en cas d'erreur dans la réception. Il y en a donc une ou deux par seconde dans une vidéo MPEG.
Les frames P |
Ces images sont défini par différence par rapport à l'image précédente. L'encodeur recherche les différences de l'image par rapport à la précédente et définit des blocs, appelés macroblocs (16x16 pixels) qui se superposeront à l'image précédente.
L'algorithme compare les deux images bloc par bloc et à partir d'un certain seuil de différence, il considère le bloc de l'image précédente différent de celui de l'image en cours et lui applique une compression JPEG.
C'est la recherche des macroblocs qui déterminera la vitesse de l'encodage, car plus
l'algorithme cherche des "bons" blocs, plus il perd de temps...
Par rapport aux frames-I (compressant directement), les frames-P demandent d'avoir toujours en
mémoire l'image précédente.
Les frames B |
De la même façon que les frames P, les frames B sont travaillée par différence par rapport à une image de référence, sauf que dans le cas des frames B cette différence peut s'effectuer soit sur la précédente (comme dans les cas des frames P) soit sur la suivante, ce qui donne une meilleure compression, mais induit un retard (puisqu'il faut connaître l'image suivante) et oblige à garder en mémoire trois images (la précédente, l'actuelle et la suivante).
Les frames D |
Ces images donnent une résolution de très basse qualité mais permettent une décompression très rapide, cela sert notamment lors de la visualisation en avance rapide car le décodage "normal" demanderait trop de ressources processeur.
Dans la pratique... |
Les séquences d'images sont dans la pratique codées suivant une suite
d'images I B et P (D étant comme on l'a dit réservé à l'avance
rapide) qui a été déterminée expérimentlement. Cette
séquence est la suivante:
IBBPBBPBBPBBI
Une image I est donc insérée toutes les 12 frames.
Cela permet d'obtenir des débits de l'ordre de 1.2 Mbps (exploitable sur un lecteur deCD-ROM)
La résolution est de: