Le 27 juillet 2009

FFmpeg - la vidéo expliquée

C’est pourtant simple !

Introduction :

- Une vidéo est habituellement un conteneur comportant plusieurs "flux".
- Un flux peut être de type audio ou vidéo (voire sous-titre).
- Un flux est caractérisé par son type de compression, par exemple cinepak ou divx ou mpeg4 pour la vidéo, et mp3, ogg, aiff pour le son.
- Un flux est aussi caractérisé par sa qualité qui est fonction de plusieurs facteurs.

A - L’AUDIO

Pour un flux audio, la qualité est fonction de 3 paramètres : la fréquence d’échantillonage (en Hz ou kHz), le bitrate, la polyphonie. Tu vas me dire que le bitrate est fonction de l’échantillonage. C’est vrai sans l’être. Tout dépend de la compression utilisée.

A1 - La fréquence d’échantillonnage

La fréquence d’échantillonnage c’est en gros la même chose que le nombre de pixels dans une image. On aura plus de détail dans une image avec beaucoup de pixels que dans une image avec peu de pixels. Donc la fréquence d’échantillonnage c’est le nombre de nuance sonore que l’on restitue par seconde. Sur un CD, c’est 44100 nuances par seconde.

A2 - Le bitrate

Le bitrate, c’est un peu plus complexe, mais pas tant que ça. Il s’agit de la taille en octets d’une seconde de son. Cette taille va être fonction de la fréquence d’échantillonnage évidemment, mais aussi de la compression utilisée. Sans compression, sur un CD par exemple, on a 44100 nuances par seconde. Chaque nuance est codée sur 2 caractères (soit 2 octets) et en stéréo, soit 2 caractères x 2 pistes (droite et gauche) x 44100 = 176 400 octets par seconde = 176 ko/s. Cool, soit 1 minute de musique sur CD pèse 10584000 octets soit 10 Mo. Bref sur un CD, le bitrate est de 176ko/s, non compressé.
Le bitrate associé àde la compression (destructive la plupart du temps) permet de régler la taille du fichier de sortie. Par exemple en compression mp3, 1 minute de musique pèse environ 1,4 Mo (environ 10 fois moins). Par contre, le bitrate mp3 pour obtenir une telle taille est de 128 ko/s. Mince, pourtant 128 ko/s x 60 secondes, ça fait plus de 1,4 Mo... Mais le bitrate, c’est la quantité de son en sortie des haut-parleurs. _ Donc le mp3 considère une quantité de son en sortie des haut-parleurs (par exemple 128ko/s) et compresse dans son fichier la quantité de son nécessaire àl’obtention de cette qualité. Ouf !

A3 - La polyphonie

Enfin, la polyphonie, c’est mono, stéréo, joint stéréo, 3.1, 4.1, 5.1, 6.1, 7.1. Mono, c’est un son en mono, normalement sur une seule enceinte (sauf que les ordinateurs font sortir le même sur les 2 enceintes). Stéréo, c’est un son qui est potentiellement différent entre l’enceinte de gauche et celle de droite. Joint stéréo, c’est le son mono répété sur les 2 pistes. 3.1 C’est 3+1=4 pistes une droite, une gauche, une centrale et une piste pour les basses. etc.

B - LA VIDEO

Ben pour la vidéo, c’est àpeu près la même chose que pour l’audio, sauf que l’on ajoute un peu de sel et de poivre parce qu’un flux d’images, c’est un chouias plus gros et complexe.

B1 - Le framerate

Ici la fréquence d’échantillonnage n’existe pas, c’est non pas le nombre d’échantillon de son par seconde, mais le nombre d’images par seconde (en anglais FrameRate). Habituellement dans nos contrées, on est à25 images par seconde. Pourquoi 25 ? C’est le seuil de ce que l’on appelle la persistence rétinienne. A cette vitesse, le cerveau àl’impression d’un mouvement fluide. Si on diminue ce frametrate, on a l’impression d’une image saccadée, mais la taille de la vidéo s’en ressent.

B2 - L’entrelacement

Mais la persistence rétinienne à25 img/s, c’est une moyenne. Il semble que certaines personnes aient l’impression d’un battement dans l’image. donc les gens par cheux nous on mis en place un procédé pour limiter cet effet de battement. C’est l’entrelacement.
Etant donné qu’il n’était pas possible d’envoyer plus d’informations que 25 images par seconde, il a été décidé d’entrelacer les images, c’est-à-dire d’envoyer en premier lieu les lignes paires, puis les lignes impaires. La "demi-image" est formée soit par les lignes paires, soit par les lignes impaires. L’ensemble constitué par deux images (ou champs) est appelé trame entrelacé. Lorsqu’il n’y a pas d’entrelacement le terme de trame progressive est utilisé.Grâce àce procédé appelé "entrelacement", le téléviseur PAL/SECAM affiche 50 champs par seconde (àune fréquence de 50 Hz), soit 2x25 images en deux secondes. Cool !

B3 - La taille de la vidéo

Une vidéo c’est en gros une succession d’images. Une image a une taille en pixel. Donc une vidéo a une taille en pixels. Plus la taille en pixel d’une image est grande, plus le fichier sera gros. Les tailles habituelles sont 720x576 chez nous. Pour le web, 320x256 c’est bien.

B4 - Le bitrate

C’est la qualité de l’image de sortie souhaitée en fonction du mode de compression utilisé. C’est vraiment pareil que pour l’audio.

B5 - Les images clés (keyframes)

Ca c’est nouveau ! Les modes de compression utilisés se basent sur la différence entre des images de référence successives. Les images de référence son comprises dans la vidéo. Plus il y a d’images de référence, plus la vidéo grossit. Entre 2 images de référence, le module de compression/decompression (d’où le nom de CoDec) va simplement travailler sur les différences entre les images. Ce qui donne par exemple, si on éloigne trop les images de référence dans le temps des fichiers vidéo dans lesquels il est difficile de se déplacer. T’as pas compris grand chose ? Tout ce qu’il faut se rappeler c’est que plus il y a d’images de référence, plus le fichier est lourd, mais plus il est pratique et les transitions entre les images fluides.

Conclusion :

Alors maintenant que tu as tout compris, un exemple avec ffmpeg :

ffmpeg -i test.avi -ar 22050 -r 25 -s 320x256 -keyint_min 1 -b 500000 test.flv

- ffmpeg : c’est l’outil
- -i test.avi : c’est le fichier initial.
- -ar 22050 : c’est la fréquence d’échantillonnage audio de sortie.
- -r 25 : c’est le nombre d’images de sortie par seconde, àsavoir 25.
- -s 320x256 : c’est la taille de la vidéo de sortie, soit 320 pixels par 256 pixels.
- -keyint_min 1 : c’est le nombre d’images clés : 1 image clé toutes les 1 images clés
- -b 500000 : c’est le bitrate vidéo (si l’on veut spécifier un bitrate audio, on ajoute -ab XXX avec XXX pour le bitrate en octets), soit 500 ko/s
- test.flv : C’est le nom du fichier de sortie.

Voilà !


- Automatiser FFMpeg
- FFMpeg : dis-moi tout !
- FFmpeg - la vidéo expliquée
- FFMpeg par l’exemple