Affichage des articles dont le libellé est compression. Afficher tous les articles
Affichage des articles dont le libellé est compression. Afficher tous les articles

mardi 7 août 2007

Conversion de Pal en NTSC

Jacques m'interroge - dans un commentaire à mon billet précédent - sur la conversion de DVD Pal en NTSC. C'est un sujet qui intéresse beaucoup de vidéastes si on en juge par le nombre de forums de discussions, de faq et de tutorials qui traitent de cette question.

Sur l'un des principaux sites américains qui traitent de DVD, videohelp.com, si je fais une recherche avec les deux mots-clés Pal et Ntsc, il cite 12.700 pages sur ce seul site qui contiennent ces deux termes, et publie 11 guides relatifs à cette question. On y trouve pêle-même la méthode utilisant l'application Cinema Craft Encoder (si vous avez $2000 à mettre dans un encodeur mpeg2) et celle qui utilise TmpgEnc (encodeur dont on peut avoir une version d'essai pour quelques cacahuètes), une méthode dite du patch qui ne nécessite aucune reconversion si on arrive à tromper son lecteur, comme une méthode dite en 12 étapes, qui semble une vraie usine à gaz.

Pour sa part, DVdate est très utile pour convertir de l'avi DV Pal en avi DV NTSC, et permet donc de faire un DVD NTSC à partir d'un camescope DV Pal, comme je l'explique ici. Mais j'ai bien peur que cela ne réponde pas au problème de Jacques, car il veut convertir les fichiers Vob de son DVD Pal et non des vidéos au format avi DV Pal.

Il n'est toutefois pas impossible d'obtenir quelque chose, mais ce serait assez lourd et se ferait avec une notable perte de qualité.

Pour ceux qui veulent vraiment tenter l'affaire, la méthode serait la suivante:

  1. ripper le DVD en un avi divx de la meilleure qualité possible. Il existe plein de tutoriels un peu partout pour expliquer comment faire cela. Comme les divx peuvent être regardés sur l'ordinateur ou sur un nombre croissant de lecteurs DVD, on pourra d'ailleurs souvent s'arrêter là.
  2. si on veut absolument obtenir un DVD NTSC, utiliser DVdate pour convertir le divx en une vidéo DV type 2 . C'est une commande du menu convertir, qui certes dégradera la qualité, mais pas beaucoup plus que le passage du vob en divx. On prendra soin dans les préférences de DVdate, de demander que cette conversion soit faite au format NTSC, et éventuellement à la fréquence audio 48000 Hz.
  3. avec n'importe quel logiciel de montage vidéo capable de sortir un DVD (par exemple Studio de Pinnacle, ou Ulead, ou Nero), on charge alors le fichier avi DV NTSC fabriqué par DVdate et l'application produit en principe un DVD NTSC.
Cette méthode n'est évidemment pas très recommandable car elle a beaucoup d'inconvénients:
  • D'abord, on multiple les décompressions/ recompressions: on doit d'abord décomprimer le vob pour le comprimer en divx, pour décomprimer le divx pour le convertir en avi DV NTSC, puis décomprimer le DV pour le reconvertir en vob (mpeg2). Cela fait une perte de temps et de qualité d'image. Les meilleures méthodes décompriment le vob initial et le compriment tout de suite en vob final: 1 seule décompression/recompression au lieu de 3.
  • Ensuite on perd l'entrelacement: en principe le DVD initial était entrelacé pour une lecture fluide sur la TV. Il y a fort à parier que dans ces décompressions/recompressions l'entrelacement aura disparu. Or perdre l'entrelacement donne une image moins fluide sur la TV où le résultat final sera regardé. Paradoxalement, il faut d'ailleurs souhaiter qu'à l'une des étapes ci-dessus, et notamment la première, il y ait eu un désentrelacement propre des images, car sinon il y a fort à parier que le résultat final donnerait des stries d'entrelacement incontrôlées qui feraient un effet de peigne monstrueux sur l'image finale.
  • Ensuite - et c'est le point faible de toutes les méthodes, quel que soit le prix que vous y mettrez -, il n'existe pas de bonne méthode pour passer de 25 images à 29.97 par secondes (on peut même arrondir à 30 si vous préférez, cela ne change rien). Aucune méthode du commerce ne se risque vraiment à fabriquer de nouvelles images en interpolant entre plusieurs images de la vidéo d'origine. En fait, elles prennent en substance dans la vidéo d'origine 5 images puis répètent la 5ème une fois pour former la 6 ème image. C'est ainsi que les 25 images (soit 5 groupes de 5) d'une seconde passent à 30 images (soit 5 groupes de 6).
Pour illustrer l'effet de ce bidouillage d'images, supposons que nous filmions une voiture qui avance sur une ligne droite à 90km/h , soit 25 m par secondes. Notre film d'origine qui est à 25 images/secondes la photographiera donc à la position 1 m, 2m, 3m.... jusqu'à 25m pour les images de la première seconde. Quand on aura converti cela en NTSC on aura une vidéo qui la montre à 1m sur la 1ère image, alors que le temps écoulé n'est que de 1/30ème de seconde et que la voiture devrait être à 25/30 m=0.83m. Puis la 2ème image à 2m, alors que la voiture est réellement au bout de 2/30 de secondes à 1.66m et ainsi de suite jusqu'à la 5 ème image qui présentera la voiture à la position 5 m, alors que le temps passé sera de 5/30èmes de secondes et donc que la position réelle devrait être de 4.17 m. Puis tout à coup se répète la position 5m pendant la 6ème image. Cela donne au total une vidéo qui semble un peu accélérée pendant 5 images (les 4,17 premières secondes de chaque séquence) puis s'arrête pendant une image, avant de recommencer le cycle.

Considéré autrement, on devrait voir chaque position sur l'écran de la voiture 1m, 2m, 3 m... 5m pendant 40 millisecondes. Après conversion, on voit la voiture à 1m, 2m jusqu'à 4m pendant 33 millisecondes chacune, puis on la voit à 5m pendant 66 millisecondes.

Cet effet ne me paraît pas totalement rédhibitoire, grâce à la bonne volonté de l'oeil humain. D'ailleurs la vidéo d'origine fait aussi des approximations, puisqu'elle montre la voiture faisant des sauts de 1 m par 1m, alors qu'elle avance en réalité continuement. Mais le processus donne quand même une impression légèrement saccadée et peu naturelle lorsqu'on regarde le résultat.
  • Un dernier point faible, commun à toutes les méthodes: tout cela permet éventuellement de convertir un fichier vob issu du DVD, mais qu'en est-il des menus, sous-titres de langue, bandes audio additionnelles etc... C'est encore une autre paire de manches que de reproduire tout ce binz en gardant en outre toute la synchronisation nécessaire.
Plusieurs de ces inconvénients, sauf sans doute le premier, sont des points communs à la plupart des méthodes. C'est sans doute pourquoi aucune méthode n'a réussi à s'imposer. En fonction de ses besoins, et surtout de ses possibilités, notamment en disponibilité de logiciels, on pourra donc essayer diverses méthodes disponibles, quitte à savoir fermer les yeux sur leurs points faibles.

dimanche 25 mars 2007

Codecs ou filtres?

Il y a beaucoup de confusion dans les forums Internet sur les codecs et les filtres. Essayons de clarifier cela un peu.

Ce qui est commun aux deux concepts, c'est l'idée d'avoir un fichier spécialisé contenant un algorithme de compression ou de décompression, de façon à ce que toutes sortes d'application multimedia puissent l'utiliser. Ces applications lorsqu'elles ont besoin de faire le traitement dont il s'agit, chargent le fichier en mémoire et appellent certaines des fonctions qui y sont contenues. Par exemple comprimer une vidéo en XviD MPEG-4 Codec fait appel à un fichier xvidvfw.dll ou comprimer en DivX s'appuie chez moi sur un filtre DivX Encoder Filter contenu dans un fichier divxenc.ax.

Microsoft a défini deux "architectures" différentes pour créer des applications multimedia. La plus ancienne s'appelle Video for Windows (vfw), la plus récente s'appelle directshow. La manière de rechercher et d'appeler les fichiers de compression ou décompression est différente selon l'architecture, ce qui crée une différenciation entre les fichiers destinés à une application vfw ("les codecs") et les fichiers destinés à une application directshow ('les filtres").

Un exemple d'application video for windows est virtualdub. Un exemple d'application directshow est Windows Media Player, mais aussi mes applications CaptureFlux ou ImageGrab.

Heureusement, Microsoft a prévu une compatibilité ascendante: les codecs VFW existant sur le marché peuvent dans la plupart des cas être utilisés par une application directshow, grâce au Video Compression Manager. C'est un filtre directshow générique, contenu dans un fichier qcap.dll, qui au lieu d'effectuer lui-même un traitement, sait appeler un ancien codec VFW à qui il sous-traite le travail. C'est donc grâce à lui que les codecs peuvent être utilisés dans les applications directshow, sans devoir être réécrits spécialement.

Mais cette compatibilité ne marche que dans un sens. Dans l'autre sens, il y a beaucoup de filtres de compression ou de décompression qui ne peuvent être utilisés que par des applications directshow, et qui sont inexploitables par une application VFW. C'est notamment le cas des filtres Microsoft de compression ou décompression DV (qui s'appellent parfois improprement les codecs DV ou dvsd de Microsoft), qui n'existent que sous forme de filtre, ce qui fait que VirtualDub a du mal avec les fichiers DV, sauf si vous installez un codec DV comme celui de Mainconcept ou de Panasonic.

Pour reprendre l'exemple cité plus haut,
XviD MPEG-4 Codec est bien un codec VFW, qui grâce au compression manager peut aussi être utilisé dans une application directshow. CaptureFlux sait par exemple le mobiliser pour faire de la compression en Xvid en temps réel. A l'inverse, DivX Encoder Filter est un filtre directshow, qui n'a pas la capacité d'être exploité par une application VFW.

Ce qui est vrai pour la vidéo l'est aussi pour l'audio. Il faut distinguer entre les codecs audio et les filtres directshow traitant l'audio. Grâce à l' Audio Compression Manager, contenu dans le fichier quartz.dll, il y a la même compatibilité ascendante. Par exemple un codec de compression en mp3 est fourni en standard dans le fichier l3codeca.acm. Un filtre pur de compression en mp3 est contenu dans le fichier lame.ax qu'on peut télécharger sur le site Elecard.

Dans sa version 2.1, Filmerit ne traitait que des "purs filtres directshow", et n'indiquait rien sur les codecs. Dans sa version 3.3, Filmerit traitera aussi les filtres construits à partir des codecs video ou audio.