ffmpegX et le bitrate variable...

par Alynpier, Christophe et Gilou- 21/01/03


Ceci n'est certainement que la première tentative pour décrire ce qu'est ffmpegX, tant il est difficile d'en suivre l'auteur dans ses pérégrinations. Presque chaque jour voit apparaître une nouvelle version, et... on n'a tout simplement pas le temps.
Bon, puisqu'il faut quand même se lancer (vos nombreux courriers à ce sujet nous y poussent), on va commencer par tenter d'expliquer ce qu'est le bitrate variable et vous donner le résultat de nos premières expériences concernant l'encodage en MPEG2/DVD.
Il s'agit ci-dessous de la version 0.0.6b, disponible à la date de cet article.

Avant de commencer, il est donc impératif de se procurer, à tout moment, la dernière version proposée sur la page de l'auteur :

http://homepage.mac.com/major4

Mac OSX à jour, bien sûr... via Mise à Jour Logiciels, et surtout, avoir installé les ressources nécessaires !

ffmpegX, c'est quoi ?

ffmpegX est une interface graphique utilisateur (un GUI, pour les initiés...). A partir de la version 0.0.6, elle dispose également d'un installeur pour les ressources nécessaires, à savoir mpeg2enc, mplayer et mencode, utilisés dans les divers encodages.
Bonne nouvelle pour ceux que le Terminal rebute et qui ont essayé à plusieurs reprises d'installer ces ressources... j'en connais plus d'un !

Il suffit d'en suivre les indications simples pour y arriver.

ffmpegX permet d'encoder un bon nombre de sources différentes, video : VOB, MOV, M2V, DivX et/ou audio : MP2, MP3, WAV, AC3... et d'obtenir grâce aux encodeurs installés une grande variété de formats en sortie, video : VideoCD, SVCD, DivX, DVD et/ou audio : MP2, MP3, etc...
Et surtout, il permet d'accéder à un véritable Bitrate Variable !

C'est donc à mon avis l'outil rêvé de "l'encodeur" (là je parle de nous, pas de mpeg2enc...)
Premier exemple.

ENCODAGE VIDEO À BITRATE VARIABLE

Risquons une comparaison triviale : le bitrate en compression MPEG, c'est comme le JPEG pour la photo. Plus on comprime, plus le fichier est petit, mais plus la qualité se dégrade. Il faut donc savoir faire un bon rapport poids/qualité ou adopter le bitrate variable, c'est à dire utiliser un faible taux quand ça ne nuit pas, et donc garder de la place sur notre support pour les scènes à haute teneur en informations...

Je vous passerai tous les détails de nos diverses expériences, d'où il ressort que deux paramètres principaux sont à prendre en compte :

1/ la valeur de bitrate,
2/ la valeur du "quantizer minimum", dit QMin...

La valeur de bitrate est une valeur maxi à utiliser en cas de besoin, c'est à dire sur une scène très mouvementée (mouvements de caméras rapides, pluie, etc...); dans ce cas, on a besoin de beaucoup d'informations. Par contre sur une scène plus statique, le besoin se fait moins ressentir et il faut donc permettre au bitrate de baisser, pour "économiser" de la place... C'est là qu'intervient la valeur de QMin qui abaisse cette valeur.
QMin est compris entre 1 et 31.
A 1, on obtient pratiquement un bitrate constant, donc un fichier plus lourd; à partir de 2, le poids du fichier baisse sensiblement, sans réellement altérer la qualité finale obtenue.

Le jeu consiste donc à jongler entre Bitrate, QMin, et Poids de fichier, et à comparer les qualités obtenues.
Evidemment, on ne pourra trouver ni règle, ni formule, mais on pourra toujours éventuellement faire un essai sur un chapitre extrait pour avoir une idée.

C'est ce qu'on a fait ci-dessous...

PROCEDURE UTILISÉE

Mon fichier de départ est un chapitre de DVD, extrait en M2V, d'une durée d'environ 4,5 minutes; il s'agit d'une scène assez mouvementée.

J'ai donc utilisé successivement :

1/ l'encodeur MPEG2 d'Apple Quicktime/DVD SP,
2/ ffmpegX 0.0.6

Encodeur
Quicktime
ffmpegx
QMin = 4
ffmpegx
QMin = 5
ffmpegx
QMin = 6
7000
211,7 Mo
8000
233,2 Mo
201,9 Mo
9000
252,7 Mo
186,5 Mo
162,5 Mo
9800
162,6 Mo

On constate (également en incluant les résultats des autres expériences) :

1/ que l'encodeur MPEG2 d'Apple (celui installé par DVD SP) fournit un bitrate si peu variable qu'il en est presque constant ! Ceci conduit à une perte d'espace assez conséquente, puisqu'on utilise un bitrate élevé pour encoder des scènes peu mouvementées (celles qu'on voit apparaître dans les autres diagrammes - en creux), et ceci sans que la qualité de l'ensemble soit meilleure...

2/ que quelque soit le bitrate demandé, on obtient à partir de QMin = 5 un fichier quasi-identique.

Si on compare le fichier QT à 8000 et celui de ffmpegx à 9000/6, on constate en premier lieu la différence de poids, plus de 30 % dans ce cas ! Avec un bitrate maxi plus élevé (8.93 contre 8.32) qui offre donc un meilleur codage du mouvement, sans descendre à des valeurs trop faibles qui détérioreraient la qualité des scènes plus statiques.
Je vous conseille de faire vos propres expériences, vous ne serez pas déçus !

En ce qui me concerne, j'ai établi ma valeur de référence de BR autour de 9000 (!) et je module mon encodage en jouant sur la valeur de QMin.

DEUXIÈME EXEMPLE

Il s'agit ici d'un film, "La métamorphose des cloportes", capturé sur TPS via mon boitier Miglia Take 2, directement dans iMovie. Puis exporté en .mov avec la commande "pour iDVD" ce qui en assure la qualité maxi en export.
J'ai traité séparément la video (avec ffmpegX) et l'audio. A partir du .mov, j'ai exporté le son en AIFF, puis encodé celui-ci en AC3 avec APack. ffmpegX est également censé le faire, mais je ne l'ai pas encore testé...

Et voici les réglages utilisés, dans ffmpegX :

Video : VOB, MOV, DivX, MPEG ainsi que directement depuis le DVD (la combo list permet de sélectionner le lecteur de DVD à ripper)
Audio : MP2, MP3, AC3 (Dolby Digital 5.1), WAV
VIDEO

Video Bitrate indique le bitrate choisi, dans le cas de VBR, il s'agit du Bitrate maximum

Choisir le codec video (MPEG2), rentrer la valeur du BR (donc ici 9000), choisir l'Autosize (ici DVD PAL),
et indiquer le Framerate (PAL 25)

Bitrate Calculator permet de calculer le bitrate en fonction de la durée du film pour du bitrate constant. Entrez le nbre de minutes, le type et le nbre de supports. C'est la valeur calculée OU celle rentrée à la main qui est prise en compte par la suite.


AUDIO

Simplement décocher la case d'encodage audio, puisque la piste AC3 a été récupérée par ailleurs.

Sinon, l'AC3 est l'un des choix possibles


OPTIONS

En ce qui concerne les réglages de mpeg2enc, on a rassemblé quelques explications ci-dessous...

Profile : Generic MPEG-2
ou DVD
(ne surtout pas oublier !)

Thread dispose d'une fonction Dual (si vous avez un bi-pro)

et QMin à renseigner (ici 3)


TOOLS

Cocher "Keep Elementary streams" sinon il il ajoute la commande UNIX rm dans le Terminal qui efface les fichiers encodés...

ainsi que "Echo command line", indispensable, sinon on ne sait pas ce qui se passe, et même ça génère parfois une erreur...

Les MPEG Tools fonctionnent indépendament du reste des outils. On peut faire pas mal de choses avec ça...



Quelques explications supplémentaires :

Video Size : permet de choisir la taille du fichier final, soit en utilisant la liste Autosize ou en les entrant manuellement. Largeur x Hauteur

DVD Title : Est utilisé si on rippe directement le DVD depuis ffmpegX, on peut choisir la piste video désirée. Si on entre des valeurs dans Chap, on peut choisir d'extraire uniquement une suite de chapitres; la première case contiendra le n° du premier chapitre à extraire, la seconde, le dernier.

Crop WHXY : Permet de supprimer les bords de l'image. > Le probleme avec le crop, c'est que DVD SP ne veut pas du fichier...

Encode hi freq (encodage des hautes fréquences) : Permet d'encoder comme son nom l'indique les hautes fréquences, c'est en général utilisé lorsque la source originale est encodé à un bitrate élevé et qu'on désire le réencoder avec un bit rate faible. Enfin c'est ce qui est expliqué !

GOP Headers (en-têtes des groupes d'images) : Un fichier MPEG-2 possède des groupes d'images nommés GOP (Group of Pictures), le nombre d'image dans un groupe est fixe, mais pour économiser de la place il est possible de pouvoir ne pas mettre d'entête pour chaque groupe d'image. Mais le problème est que DVD SP (enfin je pense) utilise ces entêtes pour se repérer lors de l'insertion de markers. Il est obligatoire de cocher cette option afin de pouvoir mettre les chapitres correctement avec DVD SP.

No SCVD Scan : (???) prévu à la base pour le SVCD, évitons les paramètres propres au SVCD cochons cette options. Ce n'est peut-être pas obligatoire.

Bicubic Scaling (mise a l'échelle par interpolation bicubique) : Lorsque la taille du fichier réencodé désiré ne sera pas à la même taille que le fichier source, l'encodeur doit redimensionner chaque image. Il utilise un algorithme rapide mais de faible qualité, pour éviter cette perte de qualité il est possible d'utiliser l'algorithme Bicubic qui donne une meilleure qualité mais qui prend évidemment plus de temps. Etant donné que notre source est en 720x576 et que la destination aussi, il n'est pas nécessaire de cocher cette option.

VOB Letterbox : Cette option est prise en compte uniquement avec un fichier source VOB et permet d'ajouter les bandes noires à un fichier source 16/9 qui ne les possède pas. Il faut faire attention de ne pas cocher cette option, si la source possède déjà les bandes noires.

mplayer decode : Cette option utilise le décodeur mpeg-2 mplayer. Il permet d'éviter certains problèmes de synchronisation du son avec des sources NTSC. Il permet aussi de décoder directement depuis le DVD... On peut aussi directement encoder les sous-titre dans notre fichier MPEG-2 de destination.

Set 3:2 / Undo 3:2 : concerne le NTSC seulement. Explication :
Les films sont tournés en 24 images/s. En PAL pour passer à 25 i/s on accélère le film (il dure moins longtemps qu'au cinéma...), mais en NTSC, pour faire du 30 i/s on ne peut pas se permettre la même chose, ça se verrait... La ruse consiste à faire 5 images avec 4, donc avec 2 images on récupère 1 trame paire et avec les deux autres une trame impaire. C'est donc pour créer un 30 i/s ou au contraire revenir à l'original qu'il y a ces fonctions.

Deinterlace : Cette option désentrelace le fichier video, il n'est pas nécessaire si le film est destiné à être gravé sur DVD et regardé sur une télévision. Si le fichier est destiné à être visionné sur un écran d'ordinateur il est conseille de désentrelacer la source pour une meilleure qualité d'affichage.

Altivec : Utilise l'unité de calcul Altivec du G4 et accélère le traitement.

QT Decode : Utilise Quicktime pour décoder le fichier source. Il évite aussi les problèmes de synchronisation du son avec des sources NTSC comme mplayer decode mais ne permet pas directement de ripper le DVD.


Denoise : Améliore la qualité de l'image en supprimant le bruit, c'est utilisé surtout avec des sources de mauvaises qualité. Si la source provient d'une caméra DV ou d'un DVD, il n'est pas nécessaire de cocher cette option.
Luminance, chrominance et sharpness sont actifs seulement quand Denoise est coché.

Luminance (luminosité) : augmente les noirs quand le chiffre augmente, et les "grisaille" quand il diminue.

Sharpness (netteté) : augmente l'impression de piqué des images pas nettes...

Saturation : passe l'image en noir et blanc si elle est a zéro, avec toutes les nuances de saturation. Peut récupérer les images fades en couleur en augmentant cette valeur.

Remarque importante à propos des type de décodage : Le plus rapide est de ne pas cocher "mplayer decode" et de ne pas cocher "QT Decode" mais fonctionne bien uniquement avec des sources à bitrate constant !!!!!
La deuxième option aussi très rapide est "QT Decode" et permet de décoder correctement des sources à bit rate Variable.
La troisième très lente est "mplayer decode", elle permet d'encoder directement depuis le DVD avec les
sous-titre inclus.

RÉSULTAT

Pour faire court, voilà les résultats obtenus sur "La métamorpose des cloportes"; film d'environ 1h40, capturé TPS, exporté en .MOV depuis iMovie. Traitement du son à part, avec export en AIFF, puis passage en AC3 via APack.
Traitement video via ffmpegx 0.0.6b; les écrans correspondant aux réglages des onglets sont ceux qui figurent ci-dessus

Bitrate demandé : 9000
QMin = 3
Moyenne BR constatée en fin de codage : 4,57
Plus haut atteint : 9,63 !!!

Sur la courbe (il y a tout le film), on voit nettement que le bitrate varie, et atteint des sommets quand il en a vraiment besoin (scènes d'action rapide). >

Je vous ai gardé le meilleur pour la fin; avec sa piste en AC3, le DVD final pèse 3,12 Go...

Mes conclusions :

Attention : un essai sur un film d'action avec un Br Max de 9800 / Qmin 5, tient sur 3.49 Go; malheureusement lors du multiplexage dans DVD SP, on a eu le message suivant : Bitrate too high (Bitrate trop élevé)
Nous avons vu que la valeur de bitrate maxi atteint est nettement supérieure à celle fixée au départ. Il semble alors évident que lors de l'essai à 9800, celui-ci a dépassé cette valeur et s'est donc retrouvée en dehors des limites acceptées par DVD Studio Pro. Donc, évitez de mettre 9800 comme bitrate, soyez raisonnable et laissez 9000 au maximum...

Je suis de plus en plus persuadé qu'on peut indiquer une valeur de 9000 dans pratiquement tous les cas, et moduler (en fonction du mouvement et de la durée) avec la valeur de QMin.
Au pif, bien sûr...

Pour reprendre l'exemple ci-dessus, un premier essai à 9000/5 m'avait donné une piste de 1,75 Go; puis à 9000/4, j'étais à 2,02 Go et enfin à 9000/3 => 2,75 Go

Il n'y a pas de règles, pas de formules. Deux films encodés avec les mêmes paramètres ont donné des résultats qui semblent surprenants, puisque le plus long des deux a généré un fichier video moins lourd que l'autre... Mais là, on l'aura bien compris, c'est le "mouvement" qui fait toute la différence...

Mon conseil :

Dans un premier temps, il peut être intéressant de choisir un ou plusieurs chapitres, disons en gros une dizaine de minutes.
Appliquer les paramètres 9000/4, voir le résultat, faire une règle de trois pour voir si ça rentre sur un DVD-R.
On n'a pas oublié de traiter séparément la piste audio en AC3, et de tenir compte de son poids dans le résultat final !
Suivant le résultat, baisser ou augmenter la valeur de QMin, recommencer... ou tout encoder.