La conversion et l'encodage Video/Audio avec FFMpeg

Publié le 15 novembre 2010 par Aymen |eon|

Dans ce billet vous trouverez deux parties , une théorique et une pratique . Pour la partie pratique nous allons travailler avec FFmpeg (en ligne de commande) sous GNU/Linux et le principe est pratiquement semblable pour les autres systèmes.
FFmpeg est une collection de logiciels libres dédiés au traitement de flux audio ou vidéo (enregistrement, lecture ou conversion d'un format à un autre).
Le projet est constitué de plusieurs composants, outils en ligne de commande ou bibliothèques logicielles.
Il y' a certainement des outils graphiques pour utiliser les différentes fonctionnalités de ces bibliothèques on notes par exemple : Hyper video converter,WinFF,Mobile Media Converter,Avidemux,Cinelerra,Kino .. d'autres outils sont disponibles pour GNU/Linux , Windows et Mac Os ..
J'ai utilisé dernièrement FFmpeg avec winFF (méthode graphique sous Ubuntu) , mais j'ai préféré ensuite utiliser la ligne de commande pour éviter quelques bugs en plus c'est plus puissant et plus flexible (automatisation,scripts ..etc)  . Avant de vous donner les commandes à utiliser , un peu de théorie ne fera de mal à personne .


Tout d'abord il faut comprendre quelques termes techniques utilisés dans l'encodage vidéo et audio.
*Fréquence d'échantillonnage:
La fréquence d'échantillonnage s'exprime en hertz et détermine le nombre d'échantillons utilisés par seconde.
Elle est une donnée essentielle pour la qualité du son numérique.
Avec la quantification des échantillons, elle détermine non seulement la qualité de l'enregistrement, mais encore la place que le fichier audio occupe en mémoire.
*le BitRate(Débit binaire)
C'est l'une des caractéristiques des flux audio et vidéo .
Le débit binaire est une mesure de la quantité de données numériques transmises par unité de temps. Il est généralement exprimé en bits par seconde (bit/s, b/s ou bps).
Le débit est parfois exprimé en byte par seconde (Byte/s, B/s ou Bps), ce qui équivaut généralement à 8 bits par seconde.
Pour avoir les idées plus claires voici quelques signaux audio et vidéo :
* code Morse: env. 40 bit/s (Vitesse de perception humaine maximale)
* Conversation téléphonique (Bande passante d'environ 3,1 kHz): 64 kbit/s
* Fichier audio comprimé: entre 24 kbit/s (Flux audio) et 9,8 Mbit/s
* CD Audio: 1411 kbit/s
* Image de télévision SD (compression MPEG-2): 3 Mbit/s
* Video-DVD (MPEG-2): 6 Mbit/s
* SD-Video (576p ): 400 Mbit/s
* HD-Video (720p ): 1 Gbit/s
* HD-Video (1080p): 2,4 Gbit/s
*Les canaux Audio:
C'est très simple et comme son nom l'indique , ce terme n'a pas vraiment besoin d'être défini . Nous on va utiliser dans nos exemple 2 canaux (standard) gauche et droite .
*Le framerate ou FPS(frame per second) :
L'image par seconde est une unité de mesure correspondant au nombre d'images affichées en une seconde par un dispositif. Plus le nombre d'images est élevé, plus l'animation semble fluide.
Sans entrer dans les détails des normes (Pal,sécam,NTSC..etc) , le FrameRate est le nombre d'images par seconde .
*Taille de la vidéo :
C'est la taille de la vidéo en pixel , il y'a des différents tailles standards comme :
384 x 576;450 x 576;323 x 486;352 x 288;720 x 576 successivement pour les sigles : SECAM;PAL ;NTSC;MPEG-1;MPEG-2 SD
Parfois on les trouve  sous le nom d'abréviations , voici la listes des noms abréviés :
`sqcif' 128x96 `qcif' 176x144 `cif' 352x288 `4cif' 704x576 `16cif' 1408x1152 `qqvga' 160x120 `qvga' 320x240 `vga' 640x480 `svga' 800x600 `xga' 1024x768 `uxga' 1600x1200 `qxga' 2048x1536 `sxga' 1280x1024 `qsxga' 2560x2048 `hsxga' 5120x4096 `wvga' 852x480 `wxga' 1366x768 `wsxga' 1600x1024 `wuxga' 1920x1200 `woxga' 2560x1600 `wqsxga' 3200x2048 `wquxga' 3840x2400 `whsxga' 6400x4096 `whuxga' 7680x4800 `cga' 320x200 `ega' 640x350 `hd480' 852x480 `hd720' 1280x720 `hd1080' 1920x1080

*KeyFrames (image clé):
C'est l'image clé ou l'image de référence , et c'est utilisé pour le codage/compression , dans une animations il y' a une succession d'images sauf les images de la référence sont comprises dans la vidéo , ainsi vous décidez vous même avec ce paramètre sur la fluidité de mouvement lorsque l'animation est dynamique , un mauvais choix donne une mouvement discontinue !
*Format conteneur:
Un format conteneur (wrapper ou container en anglais) est un format de fichier qui peut contenir divers types de données et celles-ci sont compressées à l'aide de codecs normalisés. Le fichier conteneur est utilisé pour pouvoir identifier et classer les différents types de données.
Dans la pratique avec FFmpeg , le conteneur est choisi automatiquement via l’extension du fichier. C'est à dire que si le fichier final se termine par .mkv le format sera automatiquement mis en matroska sans vous demander votre avis !


Voici un petit exemple avec FFmpeg :
ffmpeg -i video_initiale.mpeg -ab 192 -ar 44100 -b 200k -r 25 -s 320x200 -keyint_min 1 -f flv video_finale.flv
-  ffmpeg : c’est l’ensemble des bibliothèques utilisées
- -i video_initiale.mpeg : c’est le fichier initial qu'on va convertir .
- -ab 192 : vous permet de choisir le bitrate à utiliser (ici 192 kb/s).
- -ar 44100 : c’est la fréquence d’échantillonnage audio de sortie.
- -b 200k : c’est le bitrate , on peut aussi écrire 200000 .
- -r 25 : c’est le nombre d’images par seconde dans la vidéo finale .
- -s 320x200 : 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
-  video_fianle.flv : C’est le nom du fichier de sortie


Voici une liste de commandes utiles pour ne pas casser trop la tête à taper et chercher les paramètres de la commande ;)
Obtenir toutes les infos d’une vidéo
ffmpeg -i video.avi
Convertir x images en une petite vidéo. C’est images sont stockées dans le répertoire courant et s’appelles image1.jpg, image2.jpg et ainsi de suite…
ffmpeg -f image2 -i image%d.jpg video.mpg
Convertir une vidéo en x images… Cela générera des fichiers image1.jpg, image2.jpg…etc dans le répertoire courant. Les formats supportés sont PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF, SGI.
ffmpeg -i video.mpg image%d.jpg
Encoder une vidéo pour l’iPhone ou l’iPod Touch
ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X final_video.mp4
Explications :
  • Source : source_video.avi
  • Codec audio : aac
  • Bitrate audio : 128kb/s
  • Codec vidéo : mpeg4
  • Bitrate vidéo : 1200kb/s
  • Taille : 320px par 180px
  • vidéo générée : final_video.mp4
Même chose pour la PSP
ffmpeg -i source_video.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4
Explications :
  • Source : source_video.avi
  • Codec audio : aac
  • Bitrate audio : 32kb/s
  • Codec vidéo : xvid
  • Bitrate vidéo : 1200kb/s
  • Taille : 320px par 180px
  • vidéo générée : final_video.mp4
Extraire le son d’une vidéo et en faire un MP3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
Explications :
  • Source video : source_video.avi
  • Bitrate audio : 192kb/s
  • Format de sortie : mp3
  • Son généré : sound.mp3
Convertir un wav en mp3
ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3
Convertir un avi en mpeg
ffmpeg -i video_origine.avi video_finale.mpg
Convertir un mpeg en avi
ffmpeg -i video_origine.mpg video_finale.avi
Convertir un avi en gif animé non compressé
ffmpeg -i video_origine.avi gif_anime.gif
Mixer un son et une vidéo
ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
Convertir un avi en flv
ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320×240 -f flv video_finale.flv
Convertir un avi en dv
ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv
Ou encore :  ffmpeg -i video_origine.avi -target pal-dv video_finale.dv
Convertir un avi en mpeg pour les lecteurs DVD
ffmpeg -i source_video.avi -target pal-dvd -ps 2000000000 -aspect 16:9 finale_video.mpeg
Explications :
  • Format de sortie : target pal-dvd
  • Taille maximum du fichier généré : ps 2000000000
  • Format : aspect 16:9
Convertir un avi en divx
ffmpeg -i video_origine.avi -s 320×240 -vcodec msmpeg4v2 video_finale.avi
Convertir un ogm en mpeg pour DVD
ffmpeg -i film_sortie_cinelerra.ogm -s 720×576 -vcodec mpeg2video -acodec mp3 film_terminée.mpg
Convertir un avi en SVCD mpeg2 NTSC

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg
Convertir un avi en SVCD mpeg2 PAL

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg
Convertir un avi en VCD Mpeg 2 NTSC
ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg
Convertir un avi en VCD Mpeg 2 PAL
ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg
Encoding multipass
ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

Crédit image : osvideo.constantvzw.org
Liste de commande via Korben : FFMPEG pour les nuls
Si vous avez aimé ccet article vous pouvez s'inscrire au flux RSS
Inscrivez vous à mon flux RSS Ou bien partager cet article pour vos amis !