Page 1 sur 3

CropResizeBorder 3.8 - Script vidéo AviSynth

Posté : mer. 31 oct., 2007 10:53
par leon1789
Mise à jour du 28-10-1012

La petite histoire de << resize , autocrop , "snap 16x16" de m4ng >> ( cf. http://www.forum.m4ng.fr/resize-autocro ... vt934.html ) m'a donné l'idée de réaliser 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).

Dernière modification le 03-10-2009

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.

Code : Tout sélectionner

#
	  # CropResizeBorder(Source, "Larg", "Haut", "Bloc", "Format", "Bords", "Zoom",
	  #				  "Cadre", "Image", "HD", "Full", "Verbose", "View", "Pixels",
	  #						  "leftCut", "rightCut", "topCut", "bottomCut")
	  # version 3.7
	  # (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 CropResizeBorder-3.8.zip ici http://leon1789.perso.sfr.fr/avisynth/


Je donnerai des exemples d'ici peu. :)

Posté : mer. 31 oct., 2007 12:04
par leon1789
L'expérience la plus simple :
(m4ng est configuré en pixel PC et resize bilinear/bicubic, ce qui correspond à ce que je fais dans CropResizeBorder)

m4ng : format 16/9, snap 16x16 activé, autocrop : [lightbox]http://img267.imageshack.us/img267/4739/m4ng1kc0.th.jpg[/lightbox]
Source.CropResizeBorder(Format=16/9.0, Bloc=16, Bords=false) : [lightbox]http://img150.imageshack.us/img150/7185 ... fl9.th.jpg[/lightbox]

Posté : mer. 31 oct., 2007 12:15
par leon1789
Une autre expérience :

m4ng : format 16/9, snap 16x16 décoché, autocrop : [lightbox]http://img232.imageshack.us/img232/329/m4ng2rh5.th.jpg[/lightbox]
Source.CropResizeBorder(Format=16/9.0, Bloc=4, Bords=false) : [lightbox]http://img232.imageshack.us/img232/826/ ... kj2.th.jpg[/lightbox]

Posté : mer. 31 oct., 2007 12:22
par leon1789
Une autre expérience :

m4ng : format 16/9, snap 16x16 décoché, plein écran forcé : [lightbox]http://img232.imageshack.us/img232/3331/m4ng3uy2.th.jpg[/lightbox]
Source.CropResizeBorder(Format=16/9.0, Bloc=4, Haut=428, Bords=false) : [lightbox]http://img100.imageshack.us/img100/6059 ... ra8.th.jpg[/lightbox]

Posté : mer. 31 oct., 2007 12:28
par leon1789
Une autre expérience :

m4ng : format 16/9, snap 16x16 activé, plein écran forcé : [lightbox]http://img151.imageshack.us/img151/5369/m4ng4zs3.th.jpg[/lightbox]
Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=416, Bords=false) : [lightbox]http://img155.imageshack.us/img155/6870 ... bp8.th.jpg[/lightbox]

Posté : mer. 31 oct., 2007 12:39
par leon1789
Une autre expérience :

m4ng : format 16/9, snap 16x16 activé, plein écran compensé 4/3 : [lightbox]http://img256.imageshack.us/img256/3348/m4ng5ve0.th.jpg[/lightbox]
Source.CropResizeBorder(Format=16/9.0, Bloc=16, Haut=540, Bords=true) : [lightbox]http://img525.imageshack.us/img525/9034 ... eh1.th.jpg[/lightbox]

Posté : mer. 31 oct., 2007 15:01
par pepsilite
Hébé, on ne l'arrête plus le Leon ... pour l'instant, je suis sur autre chose, je n'ai pas trop le temps de regarder tout ça ...

Posté : mer. 31 oct., 2007 15:07
par leon1789
pepsilite a écrit :Hébé, on ne l'arrête plus le Leon ... pour l'instant, je suis sur autre chose, je n'ai pas trop le temps de regarder tout ça ...
Ben en fait, je suis en vacances, alors j'en profite un peu. :) Mine de rien, il m'a fallu trois jours (je m'y prenais comme un manche) pour arriver à ça : j'ai cru que je n'arriverai pas à résoudre ce problème (faire un avs simulant certaines fonctions vidéos de m4ng)

Posté : sam. 03 nov., 2007 18:24
par leon1789
J'ai ajouté un petit "gadjet" (qui peut être utile des fois) : un paramètre Zoom (entier compris entre 0 et 255), optionnel bien sûr.

Posté : dim. 04 nov., 2007 1:48
par lauden
Sympa ça Leon :yeap:

Posté : lun. 05 nov., 2007 8:13
par Underground78
Joli boulot ! :)

Posté : lun. 05 nov., 2007 9:29
par leon1789
Merci :)

Posté : jeu. 08 nov., 2007 19:23
par 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) : [lightbox]http://img214.imageshack.us/img214/6593/zoom0nl6.th.jpg[/lightbox]

Source.CropResizeBorder(Haut=544, Zoom=0.50) : [lightbox]http://img214.imageshack.us/img214/9158 ... tk1.th.jpg[/lightbox]
on a bien supprimé 50 % des bandes noires.

Posté : ven. 09 nov., 2007 8:04
par Underground78
Hum, pour la partie heuristique, ça marche comment par curiosité ?

Posté : ven. 09 nov., 2007 9:20
par leon1789
Underground78 a écrit :Hum, pour la partie heuristique, ça marche comment par curiosité ?
* Le but :
Je pars du principe qu'il n'y a que trois type de format source : 16/9 (la plupart des DVD, et certaines caméras persos) , 4/3 (certains DVD, et les caméras persos), ou Largeur/Hauteur pour des vidéos déjà encodées. Il s'agit donc de deviner (sans aucune garantie...) le format source : 16/9 ou 4/3 ou Largeur/Hauteur.

** Les moyens :
Les seules données utilisables sont les dimensions de l'image source (Source.Width et Source.Height) et celles de l'image après un simple autocrop (Source.AutoCrop.Width et Source.AutoCrop.Height) .

*** Ce que j'ai mis dans le script :
A partir de là, toutes les petites astuces sont bonnes à prendre : j'ai retenu celles-ci (mais si vous avez des idées, faut pas vous retenir ! :) ), c'est assez basique en fait et cela ne demande qu'à être améliorer...

Je regarde la source avant autocrop :
- si largeur > 1.3 x hauteur alors je me doute que c'est une image "pixels carrés" (déjà encodée) : la fonction renvoie le format largeur/hauteur.

- si largeur < 1.3 x hauteur alors :
-- on regarde s'il y a des bandes noires en haut et/ou en bas de l'image (à l'aide de l'autocrop) : s'il n'y a pas la moindre bande noire, alors je crois que c'est le format 4/3 (caméra perso), sinon le format 16/9 (DVD).

Bon, c'est vrai que c'est grossier :) mais je n'ai pas voulu faire compliqué pour un premier jet...
Le reste du script est totalement "mathématique", aucune devinette après. Et évidemment, si le format deviné n'est pas le bon, on peut le préciser au script par l'argument Format=....

Posté : ven. 09 nov., 2007 17:04
par Underground78
Oki ...

Posté : lun. 12 nov., 2007 14:24
par leon1789
Underground78 a écrit :Hum, pour la partie heuristique, ça marche comment par curiosité ?
Underground78 a écrit :Oki ...
tu aurais d'autre(s) idée(s) ?

Posté : lun. 12 nov., 2007 18:49
par Underground78
Euh, non, pas réellement, c'était juste de la curiosité ... ;)

Posté : lun. 12 nov., 2007 18:51
par Dirk-Pitt
... et c'est un v ... :mdr

Posté : ven. 04 janv., 2008 13:43
par 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...

Posté : ven. 04 janv., 2008 15:41
par leon1789
Des petits exemples avc l'option Verbose activée pour "mieux" voir :mrgreen:

-0- Voici l'image source :
Source.BilinearResize(720,406) : [lightbox]http://img91.imageshack.us/img91/3131/o ... nm4.th.jpg[/lightbox]


-1- On veut conserver l'intégralité de l'image, sans déformation, en gardant des bandes noires les plus petites possibles :
Source.CropResizeBorder() : [lightbox]http://img88.imageshack.us/img88/7118/b ... ah4.th.jpg[/lightbox]

-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) : [lightbox]http://img91.imageshack.us/img91/3228/b ... zh8.th.jpg[/lightbox]

-3- On veut garder l'intégralité de l'image, mais sans bandes noires, avec une déformation minimale :
Source.CropResizeBorder(Full=true) : [lightbox]http://img91.imageshack.us/img91/8755/b ... ak5.th.jpg[/lightbox]

Posté : sam. 05 janv., 2008 12:34
par Underground78
Bien ça ! :)

Posté : dim. 24 févr., 2008 19:18
par leon1789
mise à jour 2.9 (le temps passe...) après petite discussion sur unité-vidéo : voir
http://www.unite-video.com/phpbb/viewtopic.php?t=8535
http://www.unite-video.com/phpbb/viewto ... 6392#86392
http://www.unite-video.com/phpbb/viewtopic.php?t=8534 (où on parle de m4ng)

Posté : jeu. 28 févr., 2008 21:38
par leon1789
Underground78 a écrit :Hum, pour la partie heuristique, ça marche comment par curiosité ?
Je viens justement de la changer (version 3.1). C'est un peu plus subtile qu'avant, même si ça reste assez bourrin :
-- pour le format vidéo source, le script passe en revue les formats : pixels carrés, 16/9, 160/117, 4/3, 11/9
-- pour le ratio d'image, il passe en revue les ratios : 2.39, 2.35, 2.25, 2, 1.85, 16/9, 5/3, 4/3
Ensuite, il décide quel couple << format & ratio >> est le plus réaliste, i.e. celui qui donne une erreur minimale par rapport aux dimensions d'images avant et après autocrop.

Voilà, c'est un peu mieux qu'avant :) mais faut pas rêver, ça ne fonctionne pas à tous les coups...

Posté : ven. 29 févr., 2008 5:00
par M. W. I. Prod.
Bon j'ai laissé le soin à Léon de poster puisque c'est de son bébé qu'il est question.
Pour mon article (à compléter) il montre que m4ng déforme les sources TV.

Je sais que y'a d'autres choses sur le feu mais c'est vrai qu'intégrer la fonction à m4ng serait plus qu'intéressant. Elle pourrait être choisie par le bouton redimensionnement.

Maintenant le must serait que la sélection de la fonction :
1. ne fige pas le script
2. désactive le bouton Autocrop
3. affiche une case à cocher pour (dés)activer l'option bavardage
4. le meilleur pour la fin, le bouton crop pourrait changer les valeurs de leftCut, bottomCut, ...
5. fasse le café
6. pas d'addition puisque m4ng est gratuit. :hop: