Aide - Recherche - Membres - Calendrier
Version complète : CropResizeBorder 3.6 - Script vidéo AviSynth
Forum Ripp-it After Me > Les ressources > Filtres avisynth....
leon1789
Voici un petit script avs permettant de réaliser une fonction CropResizeBorder qui, comme son nom l'indique, permet de rogner, de redimentionner et d'ajouter des bords (noirs).

CropResizeBorder(Source, "Larg", "Haut", "Bloc", "Format", "Bords", "Zoom", "HD", "Full", "Verbose", ... )

Tous les paramètres sont optionnels sauf Source qui désigne la vidéo à traiter.

Pour de multiples exemples, voir http://forum.ripp-it.com/index.php?showtop...mp;#entry263376 ou les messages ci-dessous.

#
# CropResizeBorder(Source, "Larg", "Haut", "Bloc", "Format", "Bords", "Zoom",
#                  "Cadre", "Image", "HD", "Full", "Verbose", "View", "Pixels",
#                          "leftCut", "rightCut", "topCut", "bottomCut")
# version 3.6
# (merci à M. W. I. Prod.)
#
# Le premier paramètre Source est évidemment obligatoire car il désigne...
# ...la vidéo à traiter ! :-)
#
# Les paramètres suivants sont tous optionnels.
#
# -- Larg et Haut (entiers) désignent les dimensions auxquelles on veut
# redimensionner la vidéo.
# Par défaut, ces entiers sont plus ou moins les largeur et hauteur de
# Source rognée de ses bandes noires (compte tenu également des
# paramètres Format et Cadre).
#
# -- Bloc (entiers) est nombre dont les dimensions de la résolution
# seront multiples.
# Par défaut, Bloc=16 (en fonction d'autres arguments).
#
# RQ : Larg et Haut sont arrondis automatiquement à de proches
# multiples de Bloc.
#
# -- Format (flottant) indique la format de Source.
# Par défaut, une heuristique essaie (sans aucune garantie !) de
# déterminer le format de la source.
#
# -- Full (true/false) indique qu'on ne veut ni rognage ni bandes
# noires sur les bords de l'image. En compensation, on accepte une très
# légère déformation de l'image.
# Par défaut, Full=false.
#
# -- Bords (true/false) indique si on accepte qu'il y ait des bords
# noirs sur l'image.
# Par défaut, Bords=true (en fonction d'autres arguments).
#
# -- Cadre (4/3., 16/9., 1.85, 2.35, etc.) indique un ratio Largeur/Hauteur
# impératif pour la résolution finale.
# Par défaut, Cadre=0 (ie. désactivé).
#
# -- Image (flottant) indique un ratio image reélle dans la vidéo finale.
# Par défaut, Image=0 (ie. désactivé) (en fonction d'autres arguments).
#
# RQ : - si Image est spécifié alors le paramètre Format est inutile.
#      - si Cadre est spécifié et Full activé alors les paramètres
#        Image et Format sont inutiles.
#
# -- Zoom (flottant) indique un grossissement. En général, on prend
# Zoom entre 0. et 1., mais sa valeur peut être supérieure à 1.
# Une valeur inférieure à 0. "éloigne" l'image.
# Par défaut, Zoom=0
#
# RQ : Zoom est utilisable lorsque
#       * les valeurs Larg et Haut sont spécifiées toutes les deux;
#       * une valeur Larg est spécifiée et HD=true;
#       * une valeur Haut est spécifiée et HD=false;
#       * une valeur Cadre est spécifiée.
#
# -- HD (true/false) indique si on accepte une résolution dont les
# dimensions sont supérieures au standard DVD Pal  :
# 720 pour la largeur et 576 pour la hauteur.
# Par défaut, HD=false (en fonction d'autres arguments).
#
# RQ : HD est inutilisé si les valeurs Larg et Haut sont toutes les
# deux spécifiées.
#
# -- Pixels ("pc" ou "tv") indique un encodage pixels carrés (pour PC)
# ou rectangulaires (pour TV).
# Par défaut, Pixels="pc".
#
# -- Verbose (true/false) permet de connaître les valeurs de quelques
# variables du script.
# Par défaut, Verbose=false
#
# -- View (true/false) permet de voir les informations d'AutoCrop.
#
# -- leftCut, rightCut, topCut, bottomCut permettent d'ajuster l'AutoCrop
# en indiquant les nombres de colonnes (à gauche ou à droite) et les
# nombre de lignes (en haut ou en bas) qu'il faut absolument rogner.
# Par défaut, ces quatre constantes valent 0.
#


Le script en question :
leon1789
Quelques images :
(ri4m est configuré en pixel PC, et resize bilinear/bicubic, ce qui correspond à ce que je fais dans CropResizeBorder)

Pour des explications sur le fonctionnement de ri4m, voir http://forum.ripp-it.com/index.php?showtop...mp;#entry263719

--images n°1--
ri4m format 16/9, snap 16x16 activé, autocrop :

Source.CropResizeBorder(Format=16/9.0, Bloc=16, Bords=false) :

==>> L'image est plus grande avec CropResizeBorder ! De plus, l'image de ri4m contient une ligne noire en haut et une ligne noire en bas... (malgré l'autocrop)


--images n°2--
ri4m format 16/9, snap 16x16 décoché, autocrop :

Source.CropResizeBorder(Format=16/9.0, Bloc=4, Bords=false) :

==>> L'image est plus grande avec CropResizeBorder


--images n°3--
ri4m format 16/9, snap 16x16 décoché, plein écran forcé :

Source.CropResizeBorder(Format=16/9.0, Bloc=4, Haut=508, Bords=false) :

==>> l'image de ri4m contient une ligne noire en haut et une ligne noire en bas.
Par ailleurs, on observe une dilatation entre les deux images...

L'originale (dont j'ai enlevé manuellement les bandes noires) montre que ri4m a déformé l'image !

--images n°4--
ri4m format 16/9, snap 16x16 activé, plein écran forcé :

Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=512, Bords=false) :

==>> l'image de ri4m contient plusieurs lignes noires en haut et en bas ! Par ailleurs, on observe une dilatation entre les deux images...

L'originale (dont j'ai enlevé manuellement les bandes noires) montre que ri4m a déformé l'image beaucoup plus que CropResizeBorder !

--images n°5--
ri4m format 16/9, snap 16x16 activé, plein écran compensé 4/3 :


Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=540, Bords=true) :

==>> L'image est plus grande avec CropResizeBorder, et la hauteur de l'image de ri4m n'est pas multiple de 16 ! (malgré snap 16x16 activé)
leon1789
Ah j'oublais l'option HD ! ...enfin, sur cet exemple, c'est de la petite HD...

Source.CropResizeBorder(Format=16/9.0, Bloc=4, HD=true) :
Ici, on a agrandit la largeur de l'image d'origine (DVD) de telle sorte à garder la hauteur de l'image d'origine (576). On obtient alors la résolution 1024x576. Puis, les bandes noires ont été rognées : la résolution tombe alors à 1024x552.

Source.CropResizeBorder(Format=16/9.0, Bords=true, Bloc=16, HD=true) :

YannBresil
intéressant ça Leon. Comment tu implémentes pour un encodage? tu rajoutes simplement ce script dans le script d'encodage? à quel endroit?
sykes2477
Ca n'engage que moi, mais je trouve que
1- L'image en Source.CropResizeBorder(Format=16/9.0, Bloc=16) pour le 16/9
2- Celle en Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=540, Bords=true) pour le compensé 4/3
sont celles qui restituent le plus fidèlement l'image.
Je me trompe?

P.S: Je n'ai pas vérifié pour la HD.
leon1789
(YannBresil @ jeudi 01 novembre 2007 à 00:51) *
intéressant ça Leon. Comment tu implémentes pour un encodage? tu rajoutes simplement ce script dans le script d'encodage? à quel endroit?

pardon de répondre seulement maintenant, mais vous comprennez...

En fait, c'est pas compliqué : il suffit de
--1-- de copier le script ci-dessus dans un fichier avsi, et le placer dans le répertoire c:\program files\avisynth 2.5\plugins\ ;
--2-- modifier un poil le script d'encodage (ou de réencodage) de ri4m ! cling1.gif
Bon, voici le script Ripp-it.avs typique
(...)
Video=MPEGSource(Source)
Video=Undot(Video)

Video=BilinearResize(Video, Largeur, Hauteur)
Video=Crop(Video, crop_g, crop_h, crop_d, crop_b)

Return(Video)

On peut l'éditer et remplacer comme cela par exemple :
(...)
Video=MPEGSource(Source)
Video=Undot(Video)

#Video=BilinearResize(Video, Largeur, Hauteur)
#Video=Crop(Video, crop_g, crop_h, crop_d, crop_b)

Video = Video.CropResizeBorder(Format=16/9.0)

Return(Video)

Le chargement de CropResizeBorder est automatique (car le fichier avsi est placé là où il faut), et ri4m l'exécute...
leon1789
(sykes2477 @ jeudi 01 novembre 2007 à 11:52) *
Ca n'engage que moi, mais je trouve que
1- L'image en Source.CropResizeBorder(Format=16/9.0, Bloc=16) pour le 16/9
2- Celle en Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=540, Bords=true) pour le compensé 4/3
sont celles qui restituent le plus fidèlement l'image.
Je me trompe?

Ben en général, il se peut que Bloc=16 (conseillé pour l'encodage divx) déforme un peu l'image : c'est ici le cas avec le cas n°4...
C'est assez logique car, à moins de couper l'image brutalement, il faut faire un "effort" pour que les dimensions de la résolution soient multiples de 16...
Comme Bloc=4 est moins contraignant, il permet (en général) un meilleur respect de l'image.

En ce qui concerne l'ajout de bords noirs (déconseillé pour un encodage divx), c'est vrai que cela permet de mieux respecter l'image (même en cas de Bloc=16 en théorie (*)), car il permet de combler avec du noir au lieu de déformer...


(sykes2477 @ jeudi 01 novembre 2007 à 11:52) *
P.S: Je n'ai pas vérifié pour la HD.

Pas la peine, l'option HD est là pour faire joli aga.gif

------------------------------------
(*), tiens ça me donne une idée pour modifier le script !
... c'est fait aga.gif
leon1789
J'ai ajouté un petit "gadjet" (qui peut être utile des fois) : un paramètre Zoom, optionnel bien sûr.
micjul
Pas mal çà ...
Le zoom est de bonne qualité, tu as quoi là comme bitrate ??
leon1789
Ah, pour le coup, il y a malentendu : ces images sont copiées de la prévisualisation de VirtualDub (donc, il n'y a pas de bitrate).

Mais elles sont encodables quasi telles quelles avec un bitrate classique (enfin, si bitrate classique il existe cling1.gif )
micjul
Oui, je me disais bien aussi aga.gif ....
YannBresil
J'ai testé ce script sur un film, et s'il sauve une partie de l'image, par défaut néanmoins il la déforme.

Vidéo originale:



Vidéo encodée avec l'autocrop de ri4m:




Vidéo encodée avec le script sans aucune option activée:




leon1789
aaaa.gif aaaa.gif

... mais tu n'as pas utilisé la ligne que je t'ai proposée !
leon1789
(YannBresil @ mardi 06 novembre 2007 à 03:18) *

Vidéo encodée avec le script sans aucune option activée:





Ok , c'est normal, si on ne met pas d'option, le script conserve la structure anamorphique de l'image du DVD !

Pour avoir une image "pixels carrés", il faut indiquer le format de la vidéo source aga.gif
Ici, c'est très probablement du 16/9 (DVD), donc il faut absolument lancer cette commande minimale :

Video = Video.CropResizeBorder(Format=16/9.0)

ou si on préfère

Video = Video.CropResizeBorder(Format=1.777778)


De plus, comme tu fais visiblement de la HD, il faut l'indiquer au script (car par défaut, il se met en mode standard 720x576 maximal...). Je te propose donc la commande suivante :

Video = Video.CropResizeBorder(Format=16/9.0, Larg=1280, Haut=1024)



Edit : et aussi, au besoin, prends la dernière version (2.1) du script car je l'ai mis à jour dimanche dernier.
leon1789
ah je viens de penser que tu n'es pas en France, donc le format du DVD est peut-être différent de 1.777777 ! à toi de voir...
YannBresil
j'ai pris le script de dimanche, utilisée la ligne que tu m'as passé.
Je vais essayé en forçant le format de l'image, mais la beauté de ce script serait s'il était tout auto, non, yahoo.gif
leon1789
(YannBresil @ mercredi 07 novembre 2007 à 03:13) *
j'ai pris le script de dimanche, utilisée la ligne que tu m'as passé.
Je vais essayé en forçant le format de l'image,

ok. Pour le format de la vidéo source, qu'indique Riam ?

(YannBresil @ mercredi 07 novembre 2007 à 03:13) *
mais la beauté de ce script serait s'il était tout auto, non, yahoo.gif

oui , mais comment connaître le format de la source ? Cette information ne se voit pas dans l'image elle-même...

Exemple :
-- ri4m se met en mode "source pixels carrés" dès qu'il s'agit de ré-encodage, même si la source est anamorphique. Du coup, la plupart du temps c'est bon, mais des fois ça pose problème.
-- Pour encoder un DVD, il suffit de voir le nom d'un des fichiers rippés : il y en a un qui indique le format du DVD (4/3 ou 16/9), donc là, on peut s'entirer...
-- Mais en général ???
YannBresil
voilà le résultat avec
Video = Video.CropResizeBorder(Format=16/9.0)




bien, non?
Sinon, je n'ai pas dit que c'était facile pour détecter le format de l'image. Tu ne peux te baser sur le ratio larg/haut trouvées par l'autocrop?
leon1789
(YannBresil @ jeudi 08 novembre 2007 à 01:46) *
voilà le résultat avec
Video = Video.CropResizeBorder(Format=16/9.0)

bien, non?

Ah ok aga.gif oui, c'est très proche de l'image originale (contrairement à l'image de ri4m).

(YannBresil @ jeudi 08 novembre 2007 à 01:46) *

Tu ne peux te baser sur le ratio larg/haut trouvées par l'autocrop?

Non, je ne pense pas. Je m'explique.

L'autocrop ne peut pas aider à déterminer le "format anamorphique" de la vidéo source. En revanche, l'autocrop sert à déterminer le "format réel" de l'image lorsque la vidéo "désanamorphée".

Par exemple (j'en prends que je connais)
-- le Star Wars II zone 2 est un DVD format 16/9, mais l'image réelle est en 2.35 (bandes noires en haut et en bas de l'image source).
-- le Capitaine Flam est un DVD format 4/3 (comme bcp de dessins animés), et l'image réelle est 1.3 (moins de 4/3) (bandes noires sur les cotés principalement)

Bon, en fait, la vraie image source sur le DVD ressemble à celle-ci :

Oui, l'image sur le DVD est "déformée" (quand on la regarde avec "des pixels carrés") : on dit qu'elle est anamorphique. La première chose à faire est de "redresser" l'image par une dilatation horizontale ou une compression verticale (le plus souvent dans les logiciels comme ri4m) afin de la mettre en "pixels carrés". Ensuite, et seulement maintenant, vient l'analyse des bandes noires (via autocrop par exemple), ce qui permet de déterminer le format réel de l'image : 1.78, 1.85 , 2.35, 1.33, etc.. Ce format réel est très varié en réalité car ce n'est pas rare d'avoir un film ayant des bandes noires plus ou moins importantes sur les 4 cotés !

En résumé, il y a deux actions à mener pour passer d'une image source DVD à une image regardable sur écran PC avec un logiciel de lecture quelconque (*) :
-- n°1 le passage en pixel carré,
-- n°2 puis le rognagne/recadrage.
Seul le second point est traitable avec autocrop (et un peu de calculs mathématiques qu'il faut bien ajuster).

Le premier point est lié à l'anamorphisme de l'image source. Cet anamorphisme peut être quelconque... en théorie ! En fait, je n'ai jamais vu (mais je n'ai pas fait de recherche sur ça) d'autre format source que le 16/9 et le 4/3 pour le DVD, et 1 pour les vidéos déjà encodées.

Le problème reste de savoir quel nombre prendre entre 16/9 (bcp de DVD, et caméras persos), 4/3 (certains DVD, et caméras persos), et 1 (les vidéos style divx)...........
Cela dit, on peut avoir une astuce heuristique (qui ne fonctionne pas à tous les coups, mais assez souvent quand même) qui devinerait le format de la source lorsque celui-ci n'est pas préciser par l'utilisateur... Mouais, je vais y réfléchir. aga.gif

EDIT : bon ok, j'ai un petit truc à tenter (ce soir) !



----------------
(*) pour moi, un logiciel quelconque est un logiciel qui ne gère pas l'anamorphisme. Il y a cependant de plus en plus de logiciels qui le prennent en charge (comme VLC par exemple, ...encore que cela demande une action à l'utilisateur... donc rien d'automatique en fait).
Si on regarde l'encodage avec un logiciel de lecture qui prend en charge le "désanamorphing" de la vidéo, alors on peut se passer du point n°1 !
leon1789
Bon voilà, j'ai modifié le script (version 2.2 maintenant) :

J'y ai placé une fonction heuristique qui essaie de déterminer le format de la source, mais ceci est sans aucune garantie ! ...à tester...

De plus, j'ai modifié la fonction de zoom : en supposant qu'on accepte des bandes noires (c'est le cas par défaut dans le script),
zoom = 0 fait voir toute l'image, avec des grandes bandes noires si besoin.
zoom = 0.50 zoome juste ce qu'il faut pour réduire de 50 % les bandes noires (et rogne un peu de l'image),
zoom = 0.75 zoome juste ce qu'il faut pour réduire de 75 % les bandes noires (et rogne un peu de l'image),
etc.
Exemple
Source.CropResizeBorder(Haut=544, Zoom=0) :

Source.CropResizeBorder(Haut=544, Zoom=0.50) :
on a bien supprimé 50 % des bandes noires.
leon1789
YannBresil,
il y a un truc qui me gratouille : normalement, le script ne crée pas d'image HD, i.e. plus grande que 720x576, sauf si on lui demande (en fixant les hauteur et largeur, ou en mettant HD=true). Comment se fait-il que tu obtiennes cette image 1280x1024 ?
YannBresil
Je suis magique!

yahoo.gif

je prend une capture mpc plein écran sur mon écran yahoo.gif
Apparemment ce n'est pas trop utile...
je vais voir pour mettre capture taille réelle
leon1789
ok, magique en effet aga.gif
leon1789
je viens de mettre à jour le script (version 2.3) : une amélioration (function LargeurOptimale) dans le cas d'un traitement sans bandes noires, et où ni la hauteur, ni la largeur de l'image à encoder ne sont précisées.
YannBresil
en utilisant ce script, j'ai eu un truc bizarre hier.
c'est un film sans bande noire, l'autocrop reste a zéro.
En mettant le script, l'image est déformée et il se passe des trucs bizarres avec les carré bleus dans les coins de la prévisualisation, et il y ajout de bandes noires.
Malheureusement, mes captures n'ont pas l'image, mais on peut voir les carrés.

Autocrop:

CropResizeBorder:
leon1789
(YannBresil @ dimanche 25 novembre 2007 à 21:05) *
en utilisant ce script, j'ai eu un truc bizarre hier.
c'est un film sans bande noire, l'autocrop reste a zéro.
En mettant le script, l'image est déformée et il se passe des trucs bizarres avec les carré bleus dans les coins de la prévisualisation, et il y ajout de bandes noires.

Ok, il s'agit d'une vidéo DVD sans bande noire.
Dans ces circonstances, la fonction heuristique essaie de deviner le format de la source et choisit le 4/3 ... l'autre choix possible étant le 16/9, et c'est celle-ci justement la bonne réponse (vu ce que donne ri4m) !
Bref, encore un coup de format non deviné ... Comme tu le sais, il faut alors aider le script :
--> CropResizeBorder(Format=16/9.0)

Si c'est bien là la raison du problème, je modifierai ma fonction heuristique.
leon1789
mise à jour 2.4 en ce dernier jour de l'année

Rol,
je ne peux pas mettre de fichier attaché dans ce sujet... bof.gif
leon1789
Mise à jour 2.5 avec deux nouvelles options :

-- "Full = true/false" pour ceux qui ne veulent pas rogner (un peu) l'image, ni avoir des petites bandes noires, mais qui préfèrent avoir 100% de l'image quitte à subir une très légère déformation.

-- "Verbose =true/false" pour voir les constantes du script. C'est parfois bien utile...



Rol,
je ne peux pas mettre de fichier attaché dans ce sujet...
leon1789
Des petits exemples avc l'option Verbose activée pour "mieux" voir mrgreen2.gif

-0- Voici l'image source :
Source.BilinearResize(720,406) :


-1- On veut conserver l'intégralité de l'image, sans déformation, en gardant des bandes noires les plus petites possibles :
Source.CropResizeBorder(Bords=true,Verbose=true) :

-2- On ne veut plus de bandes noires, mais on désire quand même garder le ratio initial de la source, quitte à rogner un peu l'image :
Source.CropResizeBorder(Bords=false,Full=false,Verbose=true) :

-3- On veut garder l'intégralité de l'image, mais sans bandes noires, avec une déformation minimale :
Source.CropResizeBorder(Bords=false,Full=true,Verbose=true) :
micjul
Le résultat est pas mal dans chaque configuration, après c'est a chacun d'appliquer la méthode qui lui semble la mieux ...
Merci de ces explications cling.gif
leon1789
(micjul @ vendredi 04 janvier 2008 à 15:44) *
Le résultat est pas mal dans chaque configuration, après c'est a chacun d'appliquer la méthode qui lui semble la mieux ...

Il n'y a pas une énorme différence entre ces trois configurations possibles, c'est peut-être plus psychologique qu'autre chose...
Enfin, pas si sûr que ça, car encoder avec des petites bandes a un petit coût (perte de 1 ou 2% du bitrate).

Et puis, je ne voudrais pas que quelqu'un me dise que mon recadrage est mauvais, qu'il déforme, qu'il n'y a pas assez de possibilité, etc... Alors j'essaie de faire au mieux en fonction de diverses contraintes, mais en laissant le choix à utilisateur quand c'est possible. Du coup, ça multiplie les paramètres, et tout ça se combine dans la soupe du script.
leon1789
Ahh oki !!! Merci Rol, je peux attachéer des fichiers maintenant ! yahoo1.gif

Mise à jour CropResizeBorder 2.6
leon1789
Mise à jour 2.9 après une petite discussion sur Unité-Vidéo
http://www.unite-video.com/phpbb/viewtopic.php?t=8535
http://www.unite-video.com/phpbb/viewtopic.php?p=86392#86392
micjul
Bien la discussion ...
Pas facile de trouver le compromis idéal ...
Perso j'essaie toujours de privilégier la "non perte " d'image ...quitte à ce que le ratio comporte un petit % de perte ...
leon1789
(micjul @ dimanche 24 février 2008 à 19:18) *

Perso j'essaie toujours de privilégier la "non perte " d'image ...quitte à ce que le ratio comporte un petit % de perte ...

idem pour moi en général : pas de petites bandes noires (Bords=false) et pas de perte d'image (Full= true)


leon1789
Voici quelques images pour illustrer encore une fois le paramètre Zoom de CropResizeBorder.

Imaginons vouloir encoder un film au format 2.35 (provenant d'un DVD zone 2) pour le visionner sur un écran PC 4/3. C'est une situation que l'on rencontre souvent sur le forum.

Source = "C:\tmp\vts_01.d2v".MPEG2Source


image 1 : image obtenue avec les paramètres par défaut de CropResizeBorder
return Source.CropResizeBorder()


image 2 : image obtenue en forçant une résolution 4/3 (avec de grosses bandes noires remplissant 43% de l'image).
return Source.CropResizeBorder(720,544)


image 3 : image forcée 4/3 mais sans bandes noires (provoquant 43% de perte de l'image d'origine)
return Source.CropResizeBorder(720,544,Bords=false)


image 4 : une solution (si problème il y a ! gniark.gif ) intermédiaire en utilisant l'argument Zoom (25% de bandes noires, 25% d'image perdue)
return Source.CropResizeBorder(720,544,Zoom=0.25)
leon1789
mise à jour 3.1 :
plusieurs améliorations dont surtout une meilleure heuristique de reconnaissance de format source et de ratio image !

(YannBresil @ mercredi 07 novembre 2007 à 03:13) *

Je vais essayé en forçant le format de l'image, mais la beauté de ce script serait s'il était tout auto, non, yahoo.gif

Et qu'en penses-tu maintenant ? essaie Source.CropResizeBorder() tout court sur un peu n'importe quel genre de vidéo cling1.gif

(YannBresil @ jeudi 08 novembre 2007 à 01:46) *

Sinon, je n'ai pas dit que c'était facile pour détecter le format de l'image. Tu ne peux te baser sur le ratio larg/haut trouvées par l'autocrop?

Voilà, maintenant, j'ai une heuristique de détection fiable à au moins 80% aga.gif (suite à quelques jours de discussions sur unité-video)
leon1789
mise à jour 3.2
leon1789
Encore une petite mise à jour, introduisant une nouvelle option force.
leon1789
Mise à jour 3.4 introduisant deux options : image (anciennement "force") et cadre :
-- image permet de viser un certain ratio d'image "réelle"
-- cadre permet de fixer impérativement une résolution de sortie

J'avoue que le nombre de paramètres et d'options augmentant, pour envisager tous les cas de configurations possibles, ça commence à chauffer dans l'algorithme ! mrgreen2.gif

Explication par l'exemple.

Source anamorphique :

-----------
Voyons une première analyse automatique (verbose=true) de la vidéo. L'option full=true n'est pas obligatoire, mais c'est plus joli ainsi. cling1.gif

Source.CropResizeBorder(full=true,Verbose=true) :

-----------
Si on veut, on voit que l'on peut parier sur une image réelle de ratio 1.85. On peut viser ce ratio avec le paramètre image :
Source.CropResizeBorder(image=1.85) :

-----------
Avec le paramètre cadre, on peut imposer un ratio de résolution de sortie (c'est une option très contraignante en général). Pourquoi pas du 4/3 par exemple ?
Source.CropResizeBorder(cadre=4/3.) :

-----------
En pour finir, on peut mixer les deux options cling1.gif Remarquer une légère différence avec le cas précédent...
Source.CropResizeBorder(cadre=4/3., image=1.85) :

-----------
..ou encore un exemple, résolution multiple de 8, avec un cadre 16/10
Source.CropResizeBorder(bloc=8, cadre=16/10., image=1.85) :
leon1789
mise à jour 3.5 : correction d'un bug sur le zoom (bug apparu lors de la création des paramètres "image" et "cadre")
leon1789
Mise à jour 3.6 dans laquelle il y a maintenant l'option Pixels="pc" ou Pixels="tv" (ça va plaire à micjul !)

Exemples simples :
Source.CropResizeBorder(full=true,pixels="pc") donne ceci

Source.CropResizeBorder(full=true,pixels="tv") donne ceci
leon1789
Dans la prochaine version, il y aura aussi Pixels="dvd" (pour encoder en mpeg)
Voir la discussion (avec Jack...) sur http://forum.surdvd.com/viewtopic.php?p=14...84c29827ac6d5c4
si vous n'avez pas mal à la tête... aga.gif
micjul
Mince j'y fais une apparition aga.gif .. tu déterres aga.gif
leon1789
<<Moi aussi j'ai fini mon tube...>> dit la souris casquée !
yahoo1.gif
une discussion déterrée (par google !) mais qui finalement permet à Jack... de conclure clairement (à la fin !) quant aux pixels pc, tv,dvd. Je lui dis merci !
leon1789
Il est assez facile de comprendre pourquoi ri4m déforme l'image lors d'un encodage DVD :
imaginons un DVD 16/9 pal 720x576. La première chose que ri4m execute sur la vidéo est un redimentionnement en 720x400. Or le format 16/9 est dans l'absolu 720x405.
Donc ri4m déforme l'image DVD 16/9 de 1.23 % (car 400 = 405 - 1.23% )

Regardons maintenant pourquoi ri4m perd une partie de l'image lors du crop. Après le resize, ri4m fait un rognage des bandes noires de telle sorte à tomber sur une résolution finale multiple de 16.
Or les nombres de lignes et de colonnes noires d'une image sont rarement multiples de 16, donc ri4m va emputer l'image...
Si vous avez 4 lignes noires, ri4m gratte 16-4 = 12 lignes de l'images en plus ! (et la résolution finale est 720x384, car 400-16 = 384).
Après quelques mesures sur une douzaine de DVD, on arrive à cette conclusion :
Après crop, ri4m perd en moyenne 2.3 % de l'image.
Sur les douze vidéos testées, seulement deux fois ri4m n'a pas rogné l'image.


Pour comparaison, sur les mêmes DVD :

(avec bandes noires)
simple resize de Riam en 720x400 -> perte d'image 0%, et déformation de 1.23 %
CropResizeBorder(720,400) -> perte d'image 0%, et déformation de 0.1 % en moyenne

(sans bandes noires)
resize+crop de Riam -> perte d'image 2.3% en moyenne, et déformation de 1.23 %
CropResizeBorder(bords=false) -> en moyennes, perte d'image 3.8 %, déformation 0.1%,
CropResizeBorder(full=true) -> perte d'image 0%, et déformation de 0.8 % en moyenne
C'est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez CropResizeBorder 3.6 - Script vidéo AviSynth.
Invision Power Board © 2001-2008 Invision Power Services, Inc.