DVD2AVI & MPEG2DEC

Une version récente du plugin de décodage MPEG-2 pour Avisynth a permis d'accélérer un peu le serveur d'image DVD2AVI en conservant les données vidéo dans le spectre de couleur YUV2 natif des DVDs (VFAPI opérant en RGB tout doit être converti, ce qui prend du temp bien sûr). En le combinant en outre avec une version optimisée MMX d'Avisynth, nous pouvons espérer un gain de performance non négligeable. Sur ma machine, j'obtiens 4 images par seconde de plus en utilisant cette combinaison pour encoder un DivX par rapport aux résultats obtenus en utilisant la méthode traditionnelle avec VFAPI. Mais si c'est plus rapide, le niveau de complexité se situe également encore un cran plus haut. Par conséquent, si vous ne connaissez pas bien la méthode VFAPI (expliquée dans chacun des guides qui a recours à DVD2AVI) je vous suggère de ne pas toucher à cette méthode-ci.

Puisque nous allons utiliser Avisynth dans ce guide, et pas seulement comme un simple mécanisme de serveur d'image mais aussi pour couper et redimentionner, je vous suggère fortement d'aller faire un tour sur la page d'accueil d'Avisynth et de consulter les pages Avisynth tutorial et Avisynth scripting reference. Bien que vous puissiez vous en sortir sans lire ces pages c'est comme pour n'importe quel programme avancé : vous ne pouvez le maîtriser correctement qu'en ayant une connaissance approfondie de son fonctionnement !

Pour suivre ce guide, vous aurez besoin des logiciels suivants :

Avisynth
DVD2AVI 1.76 ou supérieur
MPEG2DEC Avisynth plugin.

Maintenant, il est temps de commencer :

Etape 1 : Créer un projet DVD2AVI

Commencez par charger vos fichiers VOB. Si la numérotation des fichiers est continue, il vous suffit de sélectionner le premier VOB pour que les autres se chargent automatiquement.

L'étape suivante consiste à trouver à quel type de film nous avons affaire. Appuyer sur F5 pour lancer la prévisualisation. Laisser la tourner un petit peu et observez la fenêtre status window.

Voici deux informations que vous voudrez peut-être noter : d'une part l'Aspect Ratio (16/9 ou 4/3), d'autre part le type d'image.

Si vous voyez Frame Rate = 25.000 fps, votre source est en PAL et vous pouvez sauter l'étape suivante.

Si vous voyez Frame Rate = 29.970 fps, laissez la prévisualistion tourner 2 ou 3 minutes puis jetez un oeil sur le champ Video Type : s'il est indiqué FILM avec un pourcentage supérieur ou égal à 95% vous pouvez activer Forced FILM comme le montre la capture d'écran ci-dessous. Autrement, vous devrez effectuer un IVTC.

 

 

 

 

 

Le décodage audio est la prochaine étape. Selon votre décodeur audio favori vous pouvez laisser DVD2AVI décoder votre piste audio.

Comme je préfère laisser Graphedit prendre en charge cette tâche, je sélectionne toujours None ici. Sélectionnez juste la bonne piste si vous voulez que DVD2AVI décode l'audio. Si vous avez besoin de rééchantillonner vous pouvez activer downsampling dans le sous-menu 48 -> 44.1KHz. Si vous utilisez cette option, je vous suggère de sélectionner High quality.

Enfin, dans le sous-menu Dolby Digital activez decode.

Maintenant nous devons nous assurer que les données vidéo restent au format YUV. Vérifions donc que YUV est coché, sinon nous allons perdre en rapidité.

Il nous faut à présent déterminer les paramètres pour l'opération de recadrage (cropping) que nous exécuterons ultérieurement (notez que cette opération est inutile pour la crétion d'un VCD ou d'un SVCD). Déplacez le curseur de DVD2AVI jusqu'à une position où vous puissiez voir une image puis activez la fenêtre Clip & Resize depuis le sous-menu Video et cochez la case située en haut à droite de la fenêtre.

Notez que certaines options de cette fenêtre ne marchent pas pour le moment (peut-être marcheront-elles dans de futures versions).

Déplacez les curseurs Top et Bottom jusqu'à ce que les bandes noires en haut et en bas de l'image aient disparu. Malheureusement il est impossible à l'heure actuelle de couper pixel par pixel. Par conséquent, si vous pensez qu'une certaine valeur laisse une ligne noire et que la valeur supérieure rogne l'image, prennez simplement la valeur qui se situe entre les deux.

Les valeurs montrées dans la capture d'écran sont valables pour un film 16/9 2.35:1, mais tous les films ne sont pas transférés de la même façon. Vous feriez donc mieux de réaliser cette étape vous-même au lieu de vous contenter d'utiliser des valeurs trouvées quelque part sur Internet.

Une fois que vous avez trouvé les valeurs correctes, décochez la case.

Maintenant, il ne vous reste plus qu'à créer un fichier de projet DVD2AVI qui pourra être traité plus tard.

Etape 2 : Paramétrage d'Avisynth & création du script

Première chose à faire : l'installation. Après avoir désarchivé, vous devez copier AVISYNTH.dll dans le répertoire suivant :

Windows 9x/ME : C:\windows\system
Windows NT/2000 : C:\winnt\system
Windows XP : C:\windows\system32

Après cela, double-cliquez sur install.reg et, juste pour être sûr, redémarrez votre ordinateur.

A présent, vérifions qu'Avisynth est correctement installé en créant le script suivant :

AviSource("c:\temp\test.avi")

Taper cette ligne dans Notepad et Enregistrez sous c:\test.avs. Assurez-vous que le champ "Type :" dans la boite de dialogue indique "Tous les fichiers" et NON "Fichiers texte (.txt)". Maintenant, cliquez-droit sur c:\test.avs dans l'explorateur, sélectionnez "Ouvrir avec" et choisissez Media Player dans la liste. Si le fichier est lu c'est que tout va bien et que nous pouvons continuer.

Pour charger le plugin MPEG2Dec, vous devez utiliser la commande LoadPlugin et indiquer comme "argument" le chemin complet et le nom de fichier du plugin à charger. L'étape suivante consiste à charger votre fichier projet DVD2AVI en utilisant la commande mpeg2source. Notez que MPEG2Dec requiert cette fonction, donc si vous oubliez LoadPlugin ça ne marchera pas.
Ci-dessous un échantillon de script qui ouvre tout simplement le fichier *.d2v.

LoadPlugin("c:\temp\MPEG2DEC.DLL")
mpeg2source("D:\matrix\matrix.d2v")

Si vous chargez ce script dans n'importe quel programme d'encodage pouvant lire les fichier *.avs vous obtiendrez la sortie de DVD2AVI, c'est à dire les données MPEG-2 décodée sans qu'aucun redimensionnement ne soit appliqué (donc sans respect de l'Aspect Ratio).

Etape suivante : le recadrage (cropping). Si vous créez un SVCD, vous pouvez sauter cette partie.
Les valeurs que vous aviez notées lorsque vous travailliez avec DVD2AVI vont à présent s'avérer utiles. Le recadrage s'effectue par l'intermédiaire de la fonction de recadrage incluse dans Avisynth. Elle requiert 4 "arguments" : Gauche, Haut, taille de sortie horizontale et taille de sortie verticale (Left, Top, Horizontal output size and vertical output size). Voici un exemple de recadrage d'un flux NTSC 16/9 2.35:1 :

Crop(0,60,720,360)

Ceci coupera les 60 lignes supérieures de la vidéo ainsi que les 60 lignes inférieures (rappelez-vous que le flux vidéo faisait à l'origine 720x480; donc si vous coupez les 60 lignes supérieures et prennez les 360 lignes suivantes cela coupera également les 60 lignes inférieures : 60 (bande noire) + 360 (vidéo) + 60 (bande noire) = 480). Si vous ajoutez cette ligne au script précédent vous abtiendrez désormais un flux vidéo de 720x360 sans bandes noires (juste les données vidéo).

Redimentionnement pour DivX

Nous en venons maintenant à la dernière opération : le redimentionnement. Avisynth propose deux sortes de redimentionnement : bilinéaire (Bilinear) et bicubique (Bicubic). Bicubic est plus précis, donc plus lent, et devrait être utilisé pour une sortie de haute qualité (DivX sur 2 CDs et SVCD).
Les "arguments" sont les mêmes pour les deux méthodes de redimentionnement : vous spécifiez la taille horizontale et verticale de sortie. Par exemple, pour redimentionner votre flux vidéo à 640x272 avec le redimentionnement bilinéaire vous devez ajouter la ligne suivante à votre script :

BilinearResize(640,272)

Pour un redimentionnement bicubique, la ligne serait : BicubicResize(640,272).

Donc, un script complet qui chargerait le projet d2v, le recadrerait et le redimentionnerait à 640x272 aurait cette forme :

LoadPlugin("C:\temp\MPEG2DEC\MPEG2DEC.DLL")
mpeg2source("d:\matrix\matrix-unresized.d2v")
Crop(0,60,720,360)
BilinearResize(640,272)

Note : Il est également possible de recadrer et de redimentionner en utilisant les filtres habituels. Pour ce faire, placez simplement tous les paramètres de recadrage après ceux de redimentionnement.
Exemple :

BilinearResize(640,272,0,60,720,360)

Redimentionnement pour SVCD

Ainsi que nous l'avons déjà mentionné, le redimentionnement n'est pas nécessaire dans ce cas précis. Mais une fois n'est pas coutume, nous devons faire le "letterboxing" nous-mêmes. Comme le savent déjà les gens qui ont utilisé VirtualDub comme serveur d'image SVCD, nous devons redimentionner à 480x362 puis ajouter des bandes noires. Pour ajouter des bandes noires, nous utilisons AddBorders qui requiert les "arguments" suivants : gauche, haut, droite et bas (left, top, right and bottom). En langage Avisynth, cela deviendrait :

BicubicResize(480,360)
AddBorders(0,60,0,60)

Le script deviendrait donc :

LoadPlugin("C:\temp\MPEG2DEC\MPEG2DEC.DLL")
mpeg2source("d:\matrix\matrix-unresized.d2v")
BicubicResize(480,360)
AddBorders(0,60,0,60)

Veuillez noter que pour un film en PAL le script serait :

LoadPlugin("C:\temp\MPEG2DEC\MPEG2DEC.DLL")
mpeg2source("d:\matrix\matrix-unresized.d2v")
BicubicResize(480,432)
AddBorders(0,72,0,72)

Audio :

Si vous avez fait l'audio avec DVD2AVI, vous voudrez peut-être l'ajouter dans votre script Avisynth. Pour réaliser ceci, utilisez la fonction WavFile qui requiert le chemin et le nom du ficher WAV comme "argument".
Maintenant, plongeons-nous un peu plus dans la programmation. Je ne sais pas si ceci est vraiment exact, mais il m'a semblé que c'était comme si mpeg2source renvoyait le flux mpeg2 et que les opérations postérieures étaient appliquées à ce flux renvoyé. Par conséquent, si jamais vous ajoutiez wavsource("d:\matrix\audio.wav") après mpeg2source vous aboutiriez à des erreurs puisque Avisynth essaierait d'appliquer le recadrage à votre source WAV, ce qui bien sûr ne marcherait pas. Ce que vous devez donc faire à la place c'est définir des variables temporaires pour la vidéo et pour l'audio. En voici un exemple :

video=mpeg2source("d:\matrix\matrix-unresized.d2v")
audio=wavsource("d:\matrix\audio.wav")
audiodub(video,audio)

Où la dernière ligne met le flux vidéo et le flux audio dans un seul flux et le renvoie. Maintenant vous pouvez placer vos lignes de recadrage et de redimentionnement :

LoadPlugin("C:\temp\MPEG2DEC\MPEG2DEC.DLL")
video=mpeg2source("d:\matrix\matrix-unresized.d2v")
audio=wavsource("d:\matrix\audio.wav")
audiodub(video,audio)
Crop(0,60,720,360)
BilinearResize(640,272)

Vous avez ainsi le résultat final d'un script Avisynth de DivX.

Vous pouvez à présent charger votre fichier *.avs dans le programme d'encodage de votre choix.
Notez que pour éviter les confusions, je ne mettrai pas les liens vers tous les guides à partir desquels vous pourriez poursuivre maintenant; mais si vous êtes arrivés jusqu'ici je suis sûr que vous trouverez le bon endroi pour continuer.

Un dernier mot pour les amateurs de DivX : dans VirtualDub vous devez régler Video sur Fast Recompress pour bénéficier de l'accroissement de la vitesse de traitement. Ceci signifie que vous ne pourrez pas utiliser de filtres additionnels :/

>> RETOUR


Traduction le 18/10/02 par inoteb ;-]
Last update : 25/08/02
Dernière mise à jour : 3/11/02