## HybridFuPP version 0.92b

INTRODUCTION

Ce script Avisynth permet de re-dimensionner l’image (en utilisant l’algorithme de son choix) et d’appliquer différents filtrages aux multiples zones qui la composent (contours, zones statiques, zones en mouvement, zones sombres ou claires) : HybridFuPP permet donc d'opérer un filtrage «adaptif» et d'obtenir par ce biais une image plus propre et davantage compressible.

L’idée maîtresse est en fait de filtrer au maximum les éléments pas ou peu visibles, et à l’inverse de filtrer le moins possible les zones les plus visibles. Pour cela, HybridFuPP a le plus souvent recours à des masques correspondant aux différentes zones à traiter.

Les traitements proposés en standard sont : le redimensionnement (5 possibilités) le débruitage des zones statiques, le débruitage des zones en mouvement, le débuitage des zones très sombres ou très claires, le débruitage des canaux chromatiques (U et V), l'accentuation ou la désaccentuation des contours (influences horizontale et verticale distinctes), la modification de la luminosité des contours, le deringing (suppression des artefacts autour des contours) et le deblocking (suppression des effets de blocs générés par la compression mpeg).

Bien qu'HybridFuPP soit au départ destiné à des sources relativement «propres», le filtrage spatio-temporel utilisé est suffisamment souple et puissant pour en permettre l’utilisation avec des sources présentant certaines formes de bruit, pour peu que l’on augmente les réglages associés.

HybridFuPP est fourni avec un certain nombre de présélections (presets) permettant aux débutants de l'utiliser facilement, et aux utilisateurs plus avertis de s'en servir comme bases pour leurs explorations. HybridFuPP permet par ailleurs, comme on le verra plus loin, de définir ses propres chaînes de traitement, ce qui en fait un outil puissant, flexible et modulaire.

# PRE-REQUIS

HybridFuPP a été développé en utilisant avisynth 2.55 ; il est donc conseillé d’utiliser cette version au minimum, et de préférence la dernière version connue 2.56 beta 1 du 06/01/05.

Copiez HybridFuPP.avsi et les .dll (filtres) dans votre répertoire plug-in d’avisynth (par défaut, C:\Program Files\AviSynth 2.5\plugins).

NB : Vous devez préalablement extraire les dll de leurs packages respectifs.

Assurez-vous d’avoir chargé les filtres UnFilter.dll (v1.5), msharpen.dll (v1.10b2), Deen.dll (v1.0 beta 1), MVTools.dll (0.9.9.1) et Masktools.dll (v1.5.6) dans votre script principal.

# SYNTAXE

HybridFuPP( clip, int width, int height, bool Fast, bool Dering, bool Deblock, int MP_Mode, int EM_Mode, int DB_Q, int DB_Off_a, int DB_Off_b, int M_Thr, int M_SCD, int E_Thr, int D_Thr, int B_Thr, int Resizer , int S_Str, int T_Str, int S_Radius, int S_Dist, int C_Str, int M_Str, int E_Str_X, int E_Str_Y, int E_Str_B, int LP_Str, int DR_Str, int DR_Radius, string show, int N1, int N2, int M, int E1, int E2, int LP, int DR, string Preset )

PARAMETRES DISPONIBLES (tous les paramètres sont optionnels)

Paramètres généraux :

# Paramètres

# Valeurs possibles

# Commentaires

Resizer

0..5

Type de re-dimensionnement

0 : bilinéaire ( netteté - - - / compressibilité + + + )

1 : bicubique ( netteté - - / compressibilité + + )

2 : bicubique ( netteté - / compressibilité + )

3 : bicubique ( netteté +, compressibilité - )

4 : bicubique ( netteté + +, compressibilité - - )

5 : lanczos ( netteté + + +, compressibilité - - - )

Width |  | Largeur après re-dimensionnement. Les dimensions doivent être au minimum des multiples de 4 ( 8 si vous voulez utiliser le filtrage du mouvement ). Il est cependant conseillé d'utiliser des dimensions finale divisibles par 16 pour des raisons de rapidité.
Height |  | Hauteur après re-dimensionnement. Les dimensions doivent être au minimum des multiples de 4 ( 8 si vous voulez utiliser le filtrage du mouvement ). Il est cependant conseillé d'utiliser des dimensions finale divisibles par 16 pour des raisons de rapidité.
Fast | True / false | Si True, le calcul des masques des zones sombres, des zones claires et des zones en mouvement (avec MP_Mode = 2 uniquement) se fait à partir d'une image dont les zones statiques ont déjà été débruitées (cela permet à HybridFuPP d'économiser en temps de traitement). Avec la valeur False, ces masques sont calculés à partir de l'image d'origine simplement re-dimensionnée

Preset

Very low

Low

Medium

High

Very High

Anime1

Anime2

Les presets ne sont que des pré-réglages. Il permettent d'utiliser HybridFuPP facilement, tout en autorisant leur modification partielle ou totale par l'utilisateur.

Les notions de «Very Low» et «Very High» (et leurs valeurs intermédiaires) se rapportent à la qualité du rendu final. Very low délivrera une qualité relativement faible, Very High une excellente qualité. Bien entendu, lorsque la qualité finale est faible, cela signifie que davantage de bruit a été éliminé (et l'image dans son ensemble davantage lissée) ; la video devient donc plus compressible.

Les presets Anime1 et Anime2 sont dédiés aux films d'animation. Anime 2 est très efficace sur les sources très «bruitées», mais peut avoir parfois tendance à éliminer certains détails de l'image.

Show

E, M, D, B, R, P

Permet l'affichage des masques et/ou des valeurs utilisées afin de faciliter le réglage des seuils si nécessaire (nb : l’image affichée est celle après filtrage)

E : masque des contours (Edges)

M : masque des zones en mouvement (Motion)

D : masque des zones sombres (Dark areas)

B : masque des zones claires (Bright areas)

R : Affiche le masque pour le deringing

P : Affiche les valeurs des différents paramètres. La mention « mod » apparaît derrière le nom du preset lorsque certaines valeurs ont été forcées.

Ex : HybridFuPP(448, 320, Show="MDL") affiche les masques des zones en mouvement, des zones sombres et des zones claires.

Débruitage des zones statiques

### S_Str

### 0..100

### Intensité du filtrage spatial

### S_Radius

### 0..3

### Rayon utilisé pour le filtrage spatial

### S_Dist

### 0.0 .. 1.0

### Distance influant sur le seuil du filtrage spatial. Plus cette valeur est faible, plus le filtrage spatial respecte les contours

### T_Str

### 0..100

### Intensité du filtrage temporel

C_Str | 0..100 | Intensité du filtrage des canaux chromatiques (UV)

Débruitage des zones en mouvement

MP_Mode | 0..2 | Traitement des zones en mouvement. 0 : permet de désactiver le filtrage des zones en mouvement 1 : correspond à un traitement par compensation de mouvement 2 : correspond à un flou appliqué à ces zones ; c'est la valeur par défaut.

###### M_Thr

###### 0..255

###### Seuil de détection du mouvement

M_SCD | 0..999 | Seuil de détection de changement de scène (utilisé pour la détection de mouvement)
M_Str | 0..300 | Intensité du filtrage spatial du mouvement (uniquement avec MP_Mode = 2)

Traitement des contours (accentuation et deringing)

EM_Mode | 1..2 | Type de masque pour la détection des contours. Deux types de masques sont disponibles : 1 est plutôt adapté aux films, 2 plutôt aux animes

### E_Thr

### 0..255

### Seuil de détection des contours

E_Str_X | -50..50 | Intensité de l’accentuation horizontale des contours
E_Str_Y | -50..50 | Intensité de l’accentuation verticale des contours
E_Str_B | -200..200 | Réglage de la luminosité des contours
Dering | True / false | Permet de filtrer la source lorsque les contours présentent des artefacts. Ce réglage est par défaut désactivé dans l'ensemble des presets. Il est à noter qu'il ralentit de manière notable le fonctionnement d'HybridFuPP
DR_Radius | 0..10 | Rayon d'action du traitement de deringing
DR_Str | 0..100 | Intensité du traitement de deringing

Traitement des zones sombres et des zones claires

D_Thr | 0..255 | Seuil de détection des zones sombres
B_Thr | 0..255 | Seuil de détection des zones claires. Attention, dans tous les presets, cette valeur est à 0. Pour utiliser le traitement des zones claires ou afficher le masque correspondant, il faut préciser la valeur de ce paramètre. Une valeur entre 160 et 180 est généralement pertinente
LP_Str | 0..30 | Intensité du filtrage des zones sombres et des zones claires

Deblocking

Deblock | True / false | Activation du deblocking : attention, si vous devez faire un crop sur votre source, celui-ci doit utiliser des valeurs divibles par 4
DB_Q | 0..51 | Intensité du déblocking (quant)
DB_Off_a | 0..51 | Sensibilité aux contours
DB_Off_b | 0..51 | Affecte à la fois la détection et le traitement des blocs

NB : les paramètres N1, N2, E1, E2, M, LP et DR sont définis dans la section ‘PARAMETRES AVANCES’.

PRESELECTIONS (attention, les paramètres associés à chaque preset sont susceptibles d’être modifiés, le script étant encore en version beta)

Les noms des presets sont associés à la qualité du rendu final

ex : HybridFuPP(preset = "very high", E_Thr = 12, dering = true)

presets parameters | Very Low | Low | Medium | High (défaut) | Very High | HybridQ | Anime1 | Anime2
Resizer | 0 | 2 | 3 | 4 | 5 | 0 | 1 | 1
Fast | True | True | True | True | True | True | True | True
S_Str | 12 | 12 | 10 | 5 | 7 | 5 | 20 | 20
S_Radius | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2
S_Dist | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1
T_Str | 5 | 5 | 3 | 3 | 2 | 3 | 15 | 15
C_Str | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20
MP_Mode | 2 | 2 | 2 | 2 | 2 | 2 | 0 | 0
M_Thr | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10
M_SCD | 260 | 260 | 260 | 260 | 260 | 260 | 260 | 260
M_Str | 120 | 120 | 120 | 120 | 80 | 120 | 0 | 0
EM_Mode | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2
E_thr | 14 | 14 | 14 | 12 | 12 | 10 | 7 | 7
E_Str_X | 0 | 0 | 0 | 0 | 0 | 36 | 30 | 40
E_Str_Y | 0 | 0 | 0 | 0 | 0 | 36 | 30 | 40
E_Str_B | 0 | 0 | 0 | 0 | 0 | 0 | -3 | -3
dering | False | False | False | False | False | False | False | False
DR_Radius | 2 | 2 | 2 | 2 | 2 | 2 | 4 | 4
DR_Str | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30
D_Thr | 39 | 37 | 35 | 32 | 31 | 32 | 30 | 30
B_Thr | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
LP_Str | 30 | 30 | 30 | 30 | 30 | 30 | 40 | 40
Deblock | false | False | False | False | False | False | False | False
DB_Q | 25 | 25 | 25 | 25 | 25 | 25 | 25 | 25
DB_Off_a | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
DB_Off_b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

PARAMETRES AVANCES

HybridFuPP permet de définir ses propres chaînes de filtrage.

Pour le traitement des parties en mouvement, des zones claires ou sombres et pour le deringing, seule la chaîne de filtrage après re-dimensionnement peut être définie.

Pour les zones neutres et les contours, il est possible de définir le filtrage avant ou après le re-dimensionnement.

Le re-dimensionnement reste quant à lui géré à part entière par le script (mais l’algorithme utilisé peut être défini par le paramètre Resizer).

N1 | chaîne de filtrage des zones neutres, avant re-dimensionnement
N2 | chaîne de filtrage des zones neutres, après re-dimensionnement
E1 | chaîne de filtrage des contours, avant re-dimensionnement
E2 | chaîne de filtrage des contours, après re-dimensionnement
M | chaîne de filtrage des zones en mouvement, après re-dimensionnement
LP | chaîne de filtrage des zones sombres ou lumineuses, après re-dimensionnement
DR | chaîne de filtrage pour le deringing, après re-dimensionnement

##

## NB : les chaînes de filtrage doivent être définies entre quotes

Ex : HybridFuPP(640, 480, preset = "medium", N2 = "deen()"

Si la chaîne contient elle même des quotes, il faut alors l’encadrer par des triples-quotes

ex : DR = """BlindPP(quant= 2, cpu2 = "xxxxxx", moderate_h = 40, moderate_v = 80)"""

Lorsque l’un ou plusieurs des paramètres avancés sont omis, ils sont alors remplacés par les valeurs par défaut (voir ci-dessous).

Il est donc possible de définir partiellement les chaînes de filtrages (ex : ne définir que N1, N2 et LP ; les autres paramètres M, E1, E2 et DR utiliseront les chaînes par défaut d’HybridFuPP).

Pour annuler une chaîne de filtrage native d’HybridFuPP, sans pour autant en définir une autre, indiquer XX = "", où XX est le nom du paramètre (ex : E2 = "" ).

NB : On ne peut pas ajouter un filtre à une chaîne par défaut d’HybridFuPP, il faut la redéfinir intégralement.

Chaînes de traitement par défaut de HybridFuPP :

N1 | ""
N2 | """Deen("a3d", S_Radius, S_Str, 3*C_Str, T_Str, C_Str, S_Dist, 9)"""
E1 | "UnFilter(E_Str_X, E_Str_Y)"
E2 | “ColorYUV(off_Y = E_Str_L)”
M | """Deen("a2d", 1, M_Str, 0, 0, 0, 0, 0)"""
LP | """Deen("a2d", 2, LP_Str, 0, 0, 0, 0, 0)"""
DR | """Deen("a2d", 2, DR_Str, 0, 0, 0, 0, 0)"""

NB : la chaîne M n'est utilisée que si le paramètre MP_Mode est égal à 2

EXEMPLES

HybridFuPP( 448, 320 ) | Re-dimensionne à 448x320, utilise les valeurs par défaut. Equivaut donc à HybridFuPP(448, 320, preset = "high")
HybridFuPP( 448, 320, preset="low" ) | Re-dimensionne à 448x320, utilise la pré-selection “low”
HybridFuPP( 448, 320, preset="medium", E_Str_X= 40, E_Str_Y = 10 ) | Re-dimensionne à 448x320, preset medium, Les contours sont accentués, avec une valeur plus forte sur l’axe horizontal que sur l’axe vertical (meilleur aspect pour les SVCDs)
HybridFuPP(preset = "very high", S_Str = 8, T_Str = 5, C_Str = 0, D_Str = 0 ) | Pas de re-dimensionnement, preset "very high", sauf pour S_Str (filtrage spatial) et T_Str (filtrage temporel) qui prennent respectivement les valeurs 8 et 5. Les canaux chromatiques et les zones sombres ne seront pas traités
HybridFuPP( 448, 320, M_Str = 160, dering = true ) | Re-dimensionne à 448x320, utilise les valeurs par défaut (voir preset "high"), à l’exception des paramètres M_Str (intensité du filtrage du mouvement) et du deringing ici activé.
HybridFuPP( 448, 320, M_Str = 160, dering = true, show = "M" ) | Identique à l’exemple précédent, mais affiche le masque de détection du mouvement
HybridFuPP( 448, 320, preset = "very high", LP = "" ) | Re-dimensionne à 448x320, utilise la préselection “very high”. Le traitement des zones sombres et lumineuses est cependant désactivé.
HybridFuPP( 448, 320, show = "MDL", B_Thr = 165 ) | Re-dimensionne à 448x320 et affiche les masques de détection de mouvement (M), le masque des zones sombres (D) et le masque des zones claires (L), en utilisant les valeurs par défaut, à l'exception du seuil pour les zones lumineuses,la valeur par défaut (0) ne permettant pas d'afficher le masque
HybridFuPP( 448, 320, N2 = "temporalsoften(2,3,3,6,2)", deblock = true) | Re-dimensionne à 448x320. La chaîne de traitement N2 (débruitage des zones statiques) d'HybridFuPP est remplacée au profit d'un traitement par le filtre TemporalSoften. Le deblocking est par ailleurs activé

Exemples de scripts :

script classique :

Mpeg2Source("c:\test\test.d2v", idct = 6)

Crop(24, 80, 672, 416, align = true)

HybridFuPP(448, 320, preset = "very high")

AddBorders(16,128,16,128)

Pour ceux qui utiliseraient GripFit(), vous pouvez utiliser les variables publiques GripFit_resize_width and GripFit_resize_height variables pour définir la taille finale de l’image. Ces variables sont initialisées par GripCrop() :

Mpeg2Source("c:\test\test.d2v",idct=6)

GripCrop(480, 576, overscan = 2, source_anamorphic=true, dest_anamorphic=true)

HybridFuPP(preset = "very high", width = GripFit_resize_width, height = GripFit_resize_height)

GripBorders()

# REMERCIEMENTS

Manao (beaucoup)

Neuron2, MarcFD and trbarry (pour leurs filtres)

Beiji, CAS, ThomN2H, Cyberyeye, Didée, Bond, Jorel, Audioslave and Scharfis_brain (pour leurs astuces, tests, idées et remontées d’informations)

A tous ceux qui ont essayé ou utilisent HybridFuPP...

- FuPP -

# HISTORIQUE

0.92b | Introduction de deux modes pour la gestion des mouvements : traitement par débruitage temporel après compensation de mouvement, ou bien par application d'un filtrage spatial sur les zones en mouvement. Le second (mode par défaut) est plus rapide, mais délivre une qualité moindre
| suppression du paramètre MM_Type (choix du type de masque de mouvement)
| Deux types de masques pour les contours sont dorénavant disponibles (sélection avec le paramètre EM_Mode) : 1 est plutôt adapté aux films, 2 plutôt aux animes)
| Nouveau deringing entièrement contrôlable, sans aucune limitation par rapport à la taille de l'image
| Implémentation du déblocking issu des MVTools (nouveaux paramètres Deblock, DB_Q, DB_Off_a et DB_Off_b)
| Gestion des zones sombres revue (moins agressive)
| Désactivation par défaut de la gestion des zones claires dans les presets
| Les paramètres S_Str et T_Str gèrent dorénavant distinctement et respectivement l'intensité du filtrages spatial et celle du filtrage temporel (remplacent le paramètre ST_Str)
| Afin d'améliorer la précision et l'efficacité du débruitage des zones statiques, deux nouveaux paramètres sont introduits : S_Radius et S_Dist. Le premier influe sur le rayon du filtrage, le second influe sur le seuil du filtrage spatial (plus cette valeur est faible, plus le filtrage spatial respecte les contours environnants)
| Nouveau paramètre E_Str_B : correction de la luminosité sur les contours
| Introduction de la commande Fast (true / false). Si True, le calcul des masques des zones sombres, des zones claires et des zones en mouvement (avec MP_Mode = 2 uniquement) se fait à partir d'une image déjà débruitée (cela permet à HybridFuPP d'économiser en temps de traitement). Avec la valeur False, ces masques sont calculés à partir de l'image d'origine simplement re-dimensionnée
| Introduction de deux presets anime1 et anime2
| Introduction d'un preset HybridQ qui permet d'obtenir des contours nets tout en maintenant un bon taux de compressibilité
| Le paramètre L_Thr a été renommé en B_Thr
| Nouvelles possibilités d'affichage avec 'Show' : “R” qui affiche les zones qui vont faire l'objet d'un éventuel traitement de deringing, et “P” qui affiche les valeurs de l'ensemble des paramètres
| Attention : les plages de valeurs possibles de certains paramètres ont été ré-étalonnées ; se reporter à la documentation ci-dessus.
0.9a à 0.912a | Versions alphas non officielles
0.89a à 0.897a | Versions alphas non officielles
0.882b | correction d'un bug lorsque la largeur ou la hauteur de l'image redimensionnée est inférieure à 256.
0.881b | correction d'un bug concernant le mode dering et impactant le preset 'anime'
0.88b | Abandon des re-dimensionnements multiples (il subsiste donc un seul paramètre Resizer)
| Modifications des chaînes de filtrage livrées en standard
| Gestion des zones claires (à l’instar de la détection et du traitement des zones sombres)
| Amélioration du filtrage des couleurs
| Utilisation par défaut d’un nouveau masque de détection de mouvement, beaucoup plus efficace. Il est cependant possible de sélectionner d’autres masques, légèrement plus rapides pour certains, grâce au paramètre MM_Type)
| Création de nouveaux presets: «very low», «low», «medium», «high» (défaut), «very high» et «anime »
| Le mode Debug s’appelle dorénavant «Show». Comme auparavant, il permet d’afficher les masques utilisés afin d‘affiner les réglages si nécessaire. Son mode de fonctionnement a également été simplifié.
| Création de nouveaux paramètres (C_Str = intensité du filtrage des couleurs, L_Thr = seuil de détection des zones claires, LP_Str = intensité du filtrage des zones claires et sombres) et abandon d’autres (chroma, dark, D_Str, Eresizer, Nresizer, CH…)
| Le mode dering ne renvoit dorénavant plus de message d’erreur si les dimensions cibles ne sont pas des multiples de 16. Il se désactive simplement le cas échéant.
0.85a à 0.87a | Versions alpha non officielles
0.84b | Possibilité de créer ses propres chaînes de filtrage
| Mode debug amélioré (affichage en couleurs, possibilité de combiner les modes)
| Ajout d’un paramètre gérant l’intensité du filtrage des zones sombres
| Vitesse sensiblement améliorée
| Plus de limitations concernant la taille finale (mod 16) pour les modes chroma et dark (anciennement ‘special’)
| Le deringing (optionnel) n’est plus effectué avant, mais après le re-dimensionnement. La limitation à une taille dont les composantes sont divisibles par 16 ne concernent donc dorénavant que la taille finale de l’image, et non plus la source.
| Attention : certains paramètres ont été renommés (ex : special devient dark)
| L’ordre des paramètres a également été modifié ! Soyez donc très vigilants si vous utilisiez des paramètres non nommés avec les versions précédentes. Ex : HybridFuPP(448,320,12,7,10,30,9,32,17,1,5,true,true,true,30,0)
0.80a à 0.83a | Versions alpha non officielles
0.71b: | Ajout d’un seuil pour le mode special (càd la détection des zones sombres)
0.7b | Introduction d’un re-dimensionnement et d’un filtrage particulier pour les zones sombres de l’image (optionnel) : 12% de compressibilité en plus !
| Possibilité de choisir le type de re-dimensionnement pour les contours
| Réintroduction du filtrage spatial (à la demande de Beiji !)
| Petite dégradation de la vitesse si l’on utilise le traitement spécial des zones sombres, un peu plus rapide qu’avant sinon.
0.6b | Possibilité de choisir le type de re-dimensionnement pour les parties de l’image qui ne sont ni des contours, ni en mouvement
| Utilise dorénavant le masque de détection des contours de msharpen
| Modification des valeurs par défaut
| Modification des présélections
| Possibilité de changer partiellement les réglages lorsque l’on utilise les présélections
| Suppression du filtrage spatial pour les mouvements (gain de compressibilité quasi inexistant)
| Amélioration générale de la qualité de l’image
| Amélioration de la vitesse
0.5b | Ajout des pré-selections
| Modification des valeurs par défaut pour une meilleure qualité de l’image
| Modification de l’emplacement du filtrage spatio-temporel dans la chaîne de traitement
0.4b | Ajout des paramètres pour le filtrages spatio-temporel et pour le filtrage spatial (nb : ce dernier a été retiré à partir de la version 0.6b)
| Modification de la valeur par défaut pour le seuil de détection de contours de 15 à 10
| Le filtrage chromatique est dorénavant effectué après le re-dimensionnement. Le dering est lui toujours fait avant.
0.3b | Les erreurs concernant les sources dont les dimensions ne sont pas des multiples de 16 sont mieux gérées
0.2b | Première version téléchargeable