Tutorial FFDShow - Filtres DirectShow
Vendredi 1er août 2008 à 17 h 03

L'installation et la gestion des codecs sur PC peuvent rapidement tourner au calvaire. Décompresseurs manquants, filtres DirectShow installés à l'insu de l'utilisateur ou encore splitters incompatibles sont à l'origine des principaux problèmes pouvant survenir dans le cadre d'une utilisation orientée multimédia.
La plupart des packs de codecs intègrent quantité de décodeurs et de filtres DirectShow redondants. Pourquoi installer DivX, XviD, 3ivX, QuickTime, MP3 Lame, CoreVorBis ou encore AC3 Filter alors que FFDShow décode parfaitement tous ces formats dans n'importe quel lecteur multimédia moderne et pour seulement 4 Mo ?
Avant de détailler la mise en place d'un "environnement FFDShow", voici quelques notions de base indispensables à la compréhension du sujet.

Un conteneur multimédia permet de stocker des flux audio, vidéo, des sous-titres ainsi que des métadonnées dans une structure spécifique. Un conteneur se présente simplement sous la forme d'un fichier portant l'extension AVI, MP4, OGM ou MKV.
L'un des conteneurs les plus répandus est AVI, Audio Video Interleave. Introduit au début des années 90 par Microsoft, ce conteneur a connu un essor important grâce au succès de Windows 95 et 98 dans le secteur grand public et grâce à l'adoption de l'AVI comme standard dans le domaine des caméras DV. Aujourd'hui, il apparaît toutefois comme dépassé, puisque les formats multimédias modernes tels que l'AAC et l'AVC ne sont pas totalement supportés et que la mise en place de sous-titres et de chapitrages reste très contraignante.
Le successeur le plus probable de l'AVI est le MP4, qui permet de combler les principaux manquements du premier et qui semble se placer comme le conteneur multiplateforme universel de ses prochaines années. Malgré ses indéniables qualités, le conteneur open source Matroska ne provoque pas de véritable engouement au sein des grandes marques du secteur multimédia et par conséquent, le faible nombre d'appareils compatibles limite fortement le succès du MKV.

Le splitter permet d'extraire les différents composants d'un conteneur. Attention, cela n'a rien à voir avec les codecs. Sans splitter, un fichier multimédia ne peut être lu, que vous ayez ou non le codec correspondant.
Par défaut, Windows est fourni avec d'antiques splitters DirectShow, tels qu'AVI Splitter et MPEG-1 Stream Splitter, inclus dans la bibliothèque quartz.dll. Ainsi, Windows prend nativement en charge le splitting de fichiers AVI, MPEG2 ou encore MP3.
Le faible succès des conteneurs alternatifs peut être certainement expliqué par cette intégration native. De plus, cela participe à la mauvaise compréhension par les novices des différentes étapes de décodage d'un fichier multimédia, car ils l'ignorent l'importance de cet élément indispensable.
Pour lire les conteneurs Matroska, MP4 ou encore OGM, il faut un splitter dédié, tels que Haali Media Splitter ou les différents splitters Gabest, sans quoi la lecture de tels fichiers sera impossible, à moins que votre lecteur multimédia en intègre par défaut. Le support du MKV est réduit au strict minimum avec le splitter Gabest MKV, ainsi l'installation du Haali Media Splitter est fortement conseillée pour ce format.

Lors de l'ouverture d'un fichier multimédia, son type est analysé afin de connaître le type de conteneur en présence. Si un splitter correspondant est installé, celui-ci extrait les différents flux audio et vidéo, les démultiplexe si nécessaire et les redirige ensuite vers les filtres DirectShow (codecs) associés aux flux.
Une fois le décodage des frames effectué par les filtres, les signaux audio et vidéo sont finalement transmis aux pilotes son et graphique. Suivant le matériel et les drivers utilisés, d'autres traitements peuvent encore intervenir dans le pipeline de décompression et de traitement, tels que la réduction du bruit numérique de l'image par la carte graphique ou l'émulation d'un environnement sonore en 3D par le biais du pilote de la carte son.
Un bon moyen de savoir quel splitter et quelques filtres sont actifs lors du décodage d'un fichier est d'utiliser GraphEdit. Cliquer-déposer un fichier multimédia à l'intérieure de la fenêtre affiche le graphe de décodage du fichier. En cas d'activation d'un splitter ou d'un filtre DirectShow imprévu, DirectShow Filter Manager permet de désactiver rapidement le fauteur de trouble. Si un message d'erreur est retourné lors de l'ouverture du fichier par GraphEdit, alors le splitter correspondant au conteneur n'est pas installé.

Le premier projet FFDShow a été abandonné en 2004. Quelques mois plus tard, il fut repris par une petite équipe de développeurs sous le nom de FFDShow Tryout. Les dernières versions prennent en charge les CPU multicores, ainsi que de nombreux codecs. La plupart sont intégrés grâce à la bibliothèque libavcodec, laquelle offre une compatibilité avec la majorité des fichiers multimédias en circulation. En effet, les codecs les plus courants tels que DivX, x264, MOV, Fraps, Flash et MP3, AAC, AC3, OGG Vorbis, Flac, Real Audio et bien d'autres, sont pris en charge.

Une fois FFDShow installé, désactivez les filtres intégrés à votre lecteur multimédia. De cette façon, vous n'aurez pas perdu votre temps à installer une dizaine de splitters pour voir votre lecteur les ignorer et choisir ses propres filtres. L'intérêt d'installer des splitters au niveau global est justement de ne pas avoir à contrôler si oui ou non votre lecteur multimédia est compatible avec un conteneur donné. Cela permet également de lire un fichier multimédia avec le même rendu sur n'importe quel player DirectShow. Suivant le lecteur utilisé, la tâche est plus ou moins ardue. Avec Media Player Classic, la désactivation des filtres est très rapide. Avec d'autres player, comme GOM Player, la désactivation des filtres internes peut être particulièrement pénible.

En passant quelques minutes sur les nombreux réglages de FFDShow, il est possible de significativement améliorer la qualité des DVD et des vidéos.
Deblocking
L'un des paramètres les plus importants lors de la lecture de vidéos à bas et moyen bitrate est le deblocking. La plupart des codecs modernes sont basés sur la compression par blocs. L'algorithme de compression découpe l'image en blocs et identifie ceux devant être mise à jour en fonction du "déplacement des pixels" au cours d'une courte séquence vidéo. Si le bitrate de la vidéo est faible, un grand nombre de blocs sera visible.
Le SPP est de loin le meilleur algorithme de déblocage. Sélectionnez cette méthode de declocking dans le menu "Postprocessing". Toutefois, elle est extrêmement lourd et nécessite donc un processeur puissant si l'on veut au moins activer le deblocking horizontal et vertical. L'activation du contrôle automatique de la qualité permet dans tous les cas de réduire l'impact sur les performances et d'obtenir une lecture fluide. Le SPP fonctionne particulièrement bien sur les flux à bas et moyen bitrate, tels que les vidéos Flash ou les animés, mais il aura tendance à lisser l'image de façon trop prononcer lorsqu'activé sur un DivX de bonne qualité.


Dans ces cas-là, il suffit d'ajouter un peu de bruit grâce au menu "Noise" ou d'utiliser le deblocker "mplayer" qui offre de bons résultats tout en étant beaucoup moins lourd. Il existe une version lite du SPP, appelée "Fast SPP Deblocking". Elle est clairement à éviter puisqu'elle floute énormément l'image, mais son coût CPU est nettement plus faible que le SPP standard.
Désentrelacement
Par défaut, FFDShow n'effectue pas de désentrelacement sur la source vidéo, ce qui peut être dérangeant, notamment lors de la lecture de DVD. Plusieurs algorithmes sont disponibles, le meilleur étant clairement "5-tap lowpass", à la fois efficace et peu coûteux en ressource.


Upscaling
Une technique améliorant la qualité des vidéos de moyennes résolutions (DVD) est celle bien connue de l'upscaling. L'image est étirée à une haute résolution en utilisant un algorithme d'interpolation peu destructeur tel que le Spline ou le Lanczos. Cette méthode est particulièrement adaptée au visionnement de DVD sur une télévision HD et offre des résultats similaires aux puces d'upscaling installées dans un nombre croissant de platines de salon. Pour ce faire, il suffit d'appliquer la résolution native de l'écran sur lequel la vidéo sera affichée.


Espace de couleur - bandes noires
Certains players sont configurés comme en l'an 40. C'est le cas par exemple de GOM Player, qui utilise par défaut un espace de couleur Y'UV 16-235. Qu'est-ce que cela signifie? Le YUV est un espace colorimétrique restreint qui a été créé lors du passage du noir blanc à la couleur. Dans la pratique, si la vidéo que vous regardez possède des bandes noires, elles seront alors affichées non pas en noir (RBG 0,0,0) mais en gris foncé (RGB 16,16,16). Sur un écran de mauvaise qualité avec un faible taux de contraste, il se peut que la différence de profondeur du noir passe inaperçue. Cependant, sur la plupart des écrans LCD récents, ce défaut peut être particulièrement choquant. Afin de bénéficier d'un noir véritable, il faudra configurer le lecteur de façon à ce qu'il utilise l'espace de couleur RGB 24 ou 32 bits. Si la spécification de l'espace de couleur doit se faire sur le fichier source, FFDShow permet d'overrider facilement l'espace colorimétrique.

Son
Le principal intérêt de la fenêtre de configuration du décodeur audio réside dans la normalisation du volume, ce qui permet d'obtenir le même niveau de son quelque soit la source audio. La longueur du tampon permet de modifier la réactivité de la normalisation. En pratique, il est conseillé d'utiliser la plus grande valeur possible afin de réduire la fréquence des réajustements de volume.


Résumé
Il existe bien d'autres fonctionnalités qui n'ont pas été détaillées, comme la possibilité de créer des profils FFDShow et de les appliquer en fonction de conditions prédéfinies (codec, framerate, taille vidéo), d'ajouter un filtre afin d'améliorer la netteté de l'image (Sharpen) ou de réduire le bruit numérique (Noise Reduction). Tant de paramètres qui dépendent avant tout de vos préférences et du type de vidéos visionnées.
Je n'étais pas au courant de l'existence de la version home cinema de Media Player Classic, c'est très performant et les codecs sont assez performant dans l'ensemble. Mais avec de tels lecteurs videos (tout comme KMPlayer que j'utilise depuis qu'il est sorti), est-il vraiment utile d'utiliser ffdshow (pour ce qui est de la lecture video, après je veux bien pour le tweaking) ?
Dernière chose, est-ce que ffdshow supporte le DXVA (decodage des flux H.264 et VC-1 par la cg uniquement) ou ca n'a rien à voir ? KMPlayer ne pouvait pas le fait pour une obscure raison, j'ai été content d'apprendre que MPC HC le pouvait lui.
EDIT : un site très clair parlant du desentrelacement - http://www.100fps.com/
Sinon le début est intéressant
"Bon après les dvd et divx ne sont plus trop d'actualité"
Kab, l'homme du futur.
Ho le snob!
Sinon article intéressant.
Pour le deinterlacing très discutable ce que tu dis, la plupart des choix proposé par défaut par FFDSHOW sont assez mauvais et le 5 tap lowpass est tout sauf exemplaire. Quitte à en utiliser un, il vaut mieux choisir l'un des filtre bob. Avec MPC un choix intéressant est d'utiliser un shader, aucune charge sur le CPU et résultat presque parfait. Autrement l'idéal est d'utiliser les filtres dscaler (greedy 2 frame ou bob).
Pour les espaces couleurs le décalage des noir au gris est du au pilote des cartes graphiques qui interprètent mal un output en VMR. Utiliser une conversion en RVB n'y change rien (et une conversion dégrade toujours la source, l'idéal c'est d'avoir un output dans le même espace couleur que la source, le plus souvent YV12). Un output en mode overlay n'est pas toujours touché par le problème mais ce mode est complètement dépassé sur de nombreux points. La seule réelle solution pour avoir un espace de couleur correct et un output en VMR c'est de mettre à niveau l'espace couleur.