Démonstration en images

Pour illustrer ce qu'apportent les filtrages qui seront évoqués plus bas, voici tout d'abord une petite vidéo muette de mon fils à 15 mois, excité par l'orage...

Maintenant la version filtrée[1] :

Faites quelques arrêts sur image pour vous convaincre de l'intérêt de la manœuvre. Contrairement à ce que l'on peut habituellement craindre d'opérations de filtrage, on ne perd pas dans ce cas de détails significatifs et la réduction de bruit est indéniable. Bravo mencoder, bravo libavcodec !

La commande miracle

À l'aide d'un filtre de mencoder

La documentation de mencoder nous indique dans un de ses recoins (ligne n°4371 !!!) l'existence d'un filtre réducteur de bruit :

      denoise3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
             Ce  filtre est destiné à réduire le bruit de l’image pour que les
             plans fixes soient vraiment fixes (cela devrait améliorer la com‐
             pressibilité.).
                <luma_spatial>
                    force spatiale du luma (par défaut : 4)
                <chroma_spatial>
                    force spatiale du chroma (par défaut : 3)
                <luma_tmp>
                    force temporelle du luma (par défaut : 6)
                <chroma_tmp>
                    force  temporelle  du  chroma (par défaut : luma_tmp*chro‐
                    ma_spatial/luma_spatial)

      hqdn3d[=luma_spatial:chroma_spatial:luma_tmp:chroma_tmp]
             Version  haute  précision:qualité  du  filtre   denoise3d.    Les
             paramètres et le comportement sont les mêmes.

Bien sûr on a visiblement intérêt à utiliser le filtre hqdn3d sauf contrainte importante de temps de calcul. L'utilisation standard de cette fonctionnalité est donc la suivante, en ligne de commande :

$ mencoder -vf hqdn3d <input> -ovc lavc -o <output>

L'option -vf indique que l'on souhaite appliquer un filtre (hqdn3d en l'occurrence), -ovc spécifie l'encodeur à utiliser (obligatoire sinon erreur), <input> et <output> sont bien évidemment les fichiers d'entrée et de sortie. Par défaut mencoder vous fournira du format AVI en sortie.

Il est aussi possible de modifier les paramètres de filtrage afin de plus réduire le bruit que dans la configuration standard. Il faut alors ajouter 4 chiffres de cette manière :

$ mencoder -vf hqdn3d=18:18:16:16 <input> -ovc lavc -o <output>

Ici les valeurs 18:18:16:16 remplacent les valeurs par défaut 4:3:6:4.5 et augmentent donc notablement l'action du filtre. Comme le montre l'exemple plus haut, ceci peut tout à fait être justifié et reste un jeu de valeurs acceptable.

À l'aide d'une option de libavcodec

Encore plus dissimulé dans le manuel de mencoder (ligne n°6637[2]), on trouve dans le même registre une fonctionnalité cachée de l'encodeur libavcodec :

      nr=<0-100000>
             Réduction  du  bruit, 0 signifie désactivé.  Les valeurs typiques
             se situent dans l’intervalle 0-600 pour la  plupart  des  vidéos,
             mais vous pouvez essayer des valeurs un peu plus grandes pour des
             vidéos particulièrement bruitées (par défaut : 0).   Étant  donné
             son  faible impact sur la vitesse d’encodage, vous pouvez essayer
             cette option à la place des filtres de débruitage vidéo tels  que
             denoise3d ou hqdn3d.

On peut donc la mettre en œuvre de cette manière :

$ mencoder <input> -ovc lavc -lavcopts nr=10000 -o <output>

La valeur élevée de filtrage spécifiée ici donne un effet comparable au jeu de paramètres 18:18:16:16 de la méthode précédente. Vous ajusterez selon vos besoins cela va sans dire.

Une meilleure compression

Effet de bord non négligeable du filtrage : votre fichier vidéo prend moins de place. C'est d'ailleurs une des raisons pour lesquelles de tels filtres sont implémentés dans des logiciels d'encodage vidéo. Le fait de réduire le bruit ôte des détails - inutiles - dans les images, or plus il y a de détails à restituer, plus il faut un gros fichier. Dans mon cas le gain est non négligieable puisque la vidéo était au départ assez bruitée : un facteur 2 !

$ ls -l dscn0277.*.flv
-rw-r--r-- 1 jm jm 1024829 2007-05-18 22:09 dscn0277.filter.flv
-rw-r--r-- 1 jm jm 2084540 2007-05-18 22:08 dscn0277.orig.flv

Désormais il va donc être difficile de ne pas essayer cela pour votre album de famille en ligne !

Notes

[1] avec les paramètres 18:18:16:16 explicités plus loin

[2] je vous rassure tout de suite je n'ai pas tout lu !