oulà ! Vaste sujet !
Codec = Codeur/Décodeur.
C'est un paradigme classique du traitement informatique de l'information où celle-ci peut être transformée (via un codeur) en une forme, et restituée dans son état d'origine (ou sous une troisième forme) avec un décodeur.
S'agissant du traitement informatique du signal multimédia (audio/vidéo), hors de tout contexte, le mot désignerait un logiciel (éventuellement plusieurs composants) qui transforme un signal multimédia en une forme compressée et qui est aussi capable de la décompresser (la lire).
Préliminaire : signal analogique/numérique
Le signal analogique est un signal "naturel", continu, la quantité d'information qu'il contient est infinie (exemple : le signal électrique qu'on verrrait sur l'écran d'un oscilloscope si on le branchait sur le nerf sciatique d'une grenouille). Il prend la forme d'une courbe, et comme tout le monde le sait, une courbe, ça contient une infinité de points..
Mais voilà, nos ordinatuers, eux, sont fini. Il ne traitent qu'un nombre fini d'information à la seconde. Pour que le signal analogique (qui descend de ton antenne en rateau par exemple) puisse être traîté et même compris par ton ordinateur, il faut en trouver une représentation finie : c'est le signal numérique.
Le principe de la numérisation du signal analogique (son venant d'un microphone par exemple) est très simple : au lieu stocker l'infinité de points qui constituent la courbe représentative d'un tel signal, on en prélève seulement quelques uns. Par exemple, si on numérise une voix analogique en wav 42Khz, on prélève 42 milles points (dits échantillons) de la courbe toutes les secondes. Certes, on n'a pas l'infinité de points du signal d'origine, mais 42 milles échantillons (et même beaucoup moins), ton oreille n'y vois que du feu ! Pour l'audition humaine, c'est impossible de distinguer le signal original (analogique) d'un son numérique échantillonner à 42khz.
Ca c'est le principe, tu peux généraliser à la vidéo..
Concrètement, si on prend l'exemple des codecs MPEG1/2 (analogique -> numérique) et de XviD (numérique -> numérique):
MPEG1/2 (je ne parle ici que de la couche vidéo): prend en entrée un signal le plus souvent analogique et le transforme en un un signal numérique compressé : ça peut prendre la forme d'un fichier .mpg ou .mpeg. Ces fichiers peuvent être mis sur un CD ou un DVD d'une certaine façon pour produire un VCD (vidéo CD : MPEG1) ou un DVD ou un SVCD (Super Video CD) (MPEG2).
XviD (MPEG4) : malgré la compression opérée par MPEG1/2, le résultat reste assez lourd (un DVD contient plusieurs gigaoctets !). On pourrait configurer le codec MPEG pour produire des fichiers plus petits, mais alors la qualité devient inacceptable. MPEG4 est une autre façon de compresser le signal qui est plus efficace et qui, pour une perte en qualité tolérable, permet de compresser tout un DVD (qui est déjà numérique donc) en une autre forme numérique qui peut tenir dans un CD (700 Mégaoctets)
Plus concrètement encore : XviD sous windows XP :
Le codec XviD prend la forme de plusieurs fichiers (filtres) :
- xvidcore.dll et xvidvfw.dll qui sont les composants du codeur VfW (Video for Windows). Il permet de compresser la vidéo avec XviD.
VfW est la première tentative de Microsoft de simplifier la vie aux gens qui déveoppent des codecs multimédia pour Windows : ça leur offre une façon organisé et uniforme (satandard) d'accéder aux fonctions de base windows pour faire tourner leurs codecs.
- xvid.ax : le décodeur XviD. Cette fois il est sous forme de filtre DirectShow. DirectShow est le successeur de VfW, mais il semble que tout le monde rechigne à s'en servir pour développer des codeurs. Du coup, les développeurs (des gens dont la principale qualité est la paresse) écrivent toujours leurs codeurs pour VfW, mais utilisent la nouvelle mouture (DirectShow) pour écrire le décodeur !
Pour éviter toute confusion : DirectShow permet aussi de faire des codeurs, mais ce qui l'a imposé en tant que décodeur, c'est le fait qu'il soit très facile à utiliser pour gens qui développent des lecteurs (qui n'ont besoin que de décodeurs). Et vfw permet aussi de décoder !
Dernière chose : il ne faut pas confondre codec et contenur ! Un film, c'est vidéo+son. Pour stocker les deux flux ensemble et surtout pour pouvoir les lire de façon synchronisée (sans décalage entre son et vidéo), il faut un format spécifique. Le plus utilisé est sans conteste le premier qui ait été conçu (par Microsoft à l'époque, quand on se dit que ça remonte à peine au début des années 90, ..), c'est AVI (audio/video interleave) : c'est le conteneur le plus simple qui soit. Il n'offre pas beaucoup de possibilités (et surtout il n'est pas documenté), à tel point que les développeurs ont pondu une nouvelle version étendue (AVI version 2 ou OpenDML).
Voici une très courte liste des conteneurs et codecs les plus populaires. Les noms sont clicquables :
Microsoft (Windows Media): Conteneurs AVI, ASF et WMV (vidéo+audio), WMA (audio seulement)
Codec vidéo/audio : Windows Media Video/Audio 9.
Xiph.org : Conteneur Ogg
Codec video : Theora(en stade alpha de développement)
Codecs audio : Vorbis, Speex (compression de la voix), FLAC (compression sans perte)
Matroska : Conteneur seulement :
MKV : Audio + vidéo
MKA : Audio seulement
Et les codecs :
On2 : Codec video : VP6 et VP7
MPEG : 1 et 2 :
couche video : DVD, VCD, SVCD
couche audio : mp2 et mp3 (il existe une version améliorée mais non MPEG: mpc)
couche sytème : conteneur MPEG (fichiers .mpg/.mpeg/.m2v ..)
A noter un conteneur spécial pour stocker MPEG2 dans un DVD : le VOB (Video OBject)
MPEG4 :
Contenuer : MPEG4 (fichiers .mp4)
Video : ASP (Advanced Simple Profile): XviD, DivX, 3ivx, ..
AVC (Advanced video Coding) ou H264 : x264 (binaires), Nero, ..
Audio : AAC (Advanced Audio Coding) : flaac (binaires), Nero, ..
Les technologies MPEG son soumises à plusieurs brevets ! Si tu veux une expérience multimédia 100% libre, je te conseille la combinaison : Theora + Vorbis dans un conteneur Matroska.
Tu as le droit de poser des questions !