Incrustation d'une image ou d'une video

Modérateur : Modérateurs

Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Incrustation d'une image ou d'une video

Message par leon1789 »

Version du 09-07-2012

Voici une fonction avisynth Incrustation qui permet d'incruster soit une image, soit une petite vidéo, dans une video originale.

function Incrustation (clip video, clip "video2", string "image", int "opacite", int "x", int "y", int "larg", int "haut", int "depart", int "fin", float "fade", float "fadeIn", float "fadeOut", bool "verbose")

video désigne la video originale ;
video2 / image désigne la vidéo / image à incruster ;
opacite (entier entre 0 et 100) désigne l'opacité de l'incrustation ;
x, y indiquent la position de l'incrustation (coin supérieur gauche de l'objet incrusté) ;
larg, haut indiquent la largeur et la hauteur de l'incrustation ;
depart indique le numéro de l'image de la video originale à partir de laquelle l'incrustation commence ;
fin indique le numéro de l'image de la video originale à laquelle l'incrustation se termine ;
fade indique le nombre de secondes pendant lesquelles il y a fondu de l'incrustation (ouvrant et fermant) ;
fadeIn indique le nombre de secondes pendant lesquelles il y a fondu ouvrant de l'incrustation ;
fadeOut indique le nombre de secondes pendant lesquelles il y a fondu fermant de l'incrustation ;
verbose permet l'affichage des constantes du script.

Par défaut,
opacite = 100 : incrustation "totale" ;
x=0 et y=0 : l'incrustation est positionnée en haut à gauche de la video originale ;
larg et haut sont les dimensions initiales de l'objet incrusté ;
depart = 0 : l'incrustation commence tout de suite ;
fin = depart + longueur de la vidéo incrustée , ou , numéro de l'image de la video originale pour une dernière image incrustée ;
fade=0 , fadeIn=0 , fadeOut=0 : pas de fondu ;
verbose = false : pas d'affichage des constantes du script.

Le script avisynth : fichier Incrustation.zip ici http://leon1789.perso.sfr.fr/avisynth/

Exemple d'une incrustation d'une vidéo qui s'incruste à partir de l'image 100 jusqu'à l'image 400, sur une hauteur de 200 points (la largeur étant calculée automatiquement pour garder le bon aspect de la vidéo incrustée), avec des fondus entrant et sortant de 3.75 secondes :

Code : Tout sélectionner

video = aviSource("01.avi")
video2 = aviSource("Extrait.avi")
video = video.Incrustation(video2=video2, haut=200, depart=100, fin=400, fade=3.75)
Exemple d'incrustation (en haut à gauche) d'une image logo (qu'on ne redimensionne pas) au départ d'une video et jusqu'à son terme :

Code : Tout sélectionner

video.Incrustation(image="logo")
Exemple d'incrustation (en haut à gauche) d'une video logo (qu'on ne redimensionne pas) au départ d'un video et jusqu'à son terme (quitte à faire boucler la vidéo logo) :

Code : Tout sélectionner

video.Incrustation(video2=logo.loop)     # Bien mettre le ".loop"
Modifié en dernier par leon1789 le lun. 09 juil., 2012 17:10, modifié 5 fois.
Avatar du membre
Underground78
Administrateur
Administrateur
Messages : 11272
Enregistré le : mar. 06 févr., 2007 21:54
Localisation : France
Contact :

Message par Underground78 »

Salut,

Je me suis permis de mettre le script sur pastebin, je trouve un peu complexe d'utiliser Megaupload pour un si petit fichier. ;)
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

oui, tu as bien fait ! :)
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

Si je ne m'abuse, c'est un peu la même chose que l'incrustation de logo dans m4ng? (sauf qu'on peut incruster une vidéo et pas seulement une image)
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

Effectivement :)
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

Tu peux donner un exemple de code pour incruster une image?
[EDIT]J'ai trouvé, c'est bon :D
Sinon, il faut une image avec une résolution paire sinon message d'erreur. Ce serait bien d'ajouter une "parité" automatique pour la résolution. Comment spécifie-t-on qu'on veut que le "logo" soit incrusté indéfiniment?
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

Exact, il faut une résolution paire (peut-être même multiple de 4 dans la largeur, je n'ai pas vérifié). Je vais voir ce que je peux faire.

Exemple d'incrustation (en haut à gauche) d'une image logo (qu'on ne redimensionne pas) au départ d'un film et jusqu'à sont terme :

Code : Tout sélectionner

film.Incrustation(image="logo")
Exemple d'incrustation (en haut à gauche) d'une video logo (qu'on ne redimensionne pas) au départ d'un film et jusqu'à sont terme (quitte à faire boucler la vidéo logo) :

Code : Tout sélectionner

film.Incrustation(video=logo.loop)     # Bien mettre le ".loop"
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

Pour image="logo", j'ai fini par trouver, sauf que c'est "chemin du logo" en fait.

"loop", je ne connaissais pas l'existence de cette instruction...
Merci.

Je suis en train de mettre au point une nouvelle fonctionnalité de m4ng et j'ai utilisé ton "incrustation" pour justement incruster un logo, ça ne te pose pas de souci?
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

"loop" est censé fonctionner avec une image aussi?
Je l'ai essayé et ça a carrément fait planter m4ng... Finalement si on ne met aucun départ ou fin, l'image reste indéfiniment, j'ai ma réponse ;)
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

pepsilite a écrit :Pour image="logo", j'ai fini par trouver, sauf que c'est "chemin du logo" en fait.

"loop", je ne connaissais pas l'existence de cette instruction...
Merci.

Je suis en train de mettre au point une nouvelle fonctionnalité de m4ng et j'ai utilisé ton "incrustation" pour justement incruster un logo, ça ne te pose pas de souci?
aucun souci.
Fais attention aux différents FPS entre le film et la vidéo incrustée. ;)
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

Ben pour l'instant, j'incruste une image, pas une vidéo ... mais ça fait quoi en fait? ça joue tout au FPS de la vidéo principale?
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

pepsilite a écrit :"loop" est censé fonctionner avec une image aussi?
Loop agit sur des vidéos qui ont moins de 10 000 000 d'images (sans rire :) )
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

leon1789 a écrit :Exact, il faut une résolution paire (peut-être même multiple de 4 dans la largeur, je n'ai pas vérifié). Je vais voir ce que je peux faire.

Ben c'est simple tu divises les résolutions par 4 et tu les remultiplies par 4... Ça fera pile poil ce qu'il faut
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

leon1789 a écrit :
pepsilite a écrit :"loop" est censé fonctionner avec une image aussi?
Loop agit sur des vidéos qui ont moins de 10 000 000 d'images (sans rire :) )
Et au dessus de 10.000.000 on fait comment? :kes:
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

pepsilite a écrit :mais ça fait quoi en fait? ça joue tout au FPS de la vidéo principale?
Oui, il faut que le script fasse une convertion (convertFPS ou changeFPS) pour que le FPS de la vidéo inscrustée vienne coller avec celui du film principal.

Pour incruster une image, pas de souci, car ImageReader fait le travail (on lui précise directement le FPS du film)
Modifié en dernier par leon1789 le sam. 15 oct., 2011 19:55, modifié 1 fois.
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

leon1789 a écrit :
pepsilite a écrit :mais ça fait quoi en fait? ça joue tout au FPS de la vidéo principale?
Oui, il faut que le script fasse une convertion (convertFPS ou changeFPS) pour que le FPS de la vidéo inscrustée vienne coller avec celle du film.
Pourquoi tu n'ajoutes pas une entrée FPS= à la fonction? ça se ferait tout seul ensuite ...
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

Baf, pas la peine que l'utilisateur s'embête à préciser le FPS puisque le script peut le connaître tout seul.
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

C'est aussi ce que je me disais, mais bon :D
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

pepsilite a écrit :
leon1789 a écrit :Exact, il faut une résolution paire (peut-être même multiple de 4 dans la largeur, je n'ai pas vérifié). Je vais voir ce que je peux faire.
Ben c'est simple tu divises les résolutions par 4 et tu les remultiplies par 4... Ça fera pile poil ce qu'il faut
En fait, je faisais déjà cette opération... mais bêtement trop tard dans le script !
Il suffit de déplacer les deux lignes

Code : Tout sélectionner

21.  film = film.ConvertToYV12
22.  video = video.ConvertToYV12.KillAudio
en les mettant en ligne 35, après

Code : Tout sélectionner

34.  video = video.LanczosResize(L,H)
Avatar du membre
pepsilite
The Grinch
The Grinch
Messages : 23287
Enregistré le : sam. 03 févr., 2007 19:13
Localisation : Chez moi le plus possible ...

Message par pepsilite »

C'est bon, ça marche avec une image à résolution impaire...
06/01/2020 m4ng v6 est disponible au téléchargement en version finale : m4ng v6
Avatar du membre
Subbat
Administrateur
Administrateur
Messages : 8836
Enregistré le : jeu. 11 déc., 2008 20:12
Localisation : Quelque part... dans le centre de la France...

Message par Subbat »

Histoire de ne pas polluer le sujet de oliver_s...
leon1789 a écrit :Effectivement, c'est pas cool que "video" ne désigne pas la même chose.
Comment appeler les deux premiers arguments de Incrustation : "video" pour la vidéo principale, et "video2" pour l'inscrustée ?
Bah en même temps ça semble fonctionner... mais sinon pourquoi ne pas simplement laisser "petite_video"... et du coup, tu ne serais peut-être plus obligé de mettre "video.incrustation(video=petite_video,...)" par "video.incrustation(petite_video,...)" non ?

Après à la place de petite_video, que ce soit video2 ou video_incrust ou que sais-je c'est pas grave... mais ce que je ne comprend pas c'est ce passage par video=petite_video...
Avatar du membre
Subbat
Administrateur
Administrateur
Messages : 8836
Enregistré le : jeu. 11 déc., 2008 20:12
Localisation : Quelque part... dans le centre de la France...

Message par Subbat »

Bon si j'avais pris le temps de regarder ton avsi, j'aurais compris... du coup, effectivement, remplacer film par video et video par video2 pourrait être bien je trouves... et du coup je pense que tu n'aurais plus à mettre le video=petite_video si je ne me trompes pas...

Bon le hic, c'est si je ne m'abuse tu utilises film dans tous tes scripts toi... Tu devrais peut-être te mettre à utiliser video à la place... d'autant que pour faire multilingue video c'est idem en français et en anglais... alors que film, c'est plutôt movie en anglais... :mrgreen:
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

Bon ben c'est changé (dans le script et les commentaires) : video, video2 à la place de film, video !
Avatar du membre
Subbat
Administrateur
Administrateur
Messages : 8836
Enregistré le : jeu. 11 déc., 2008 20:12
Localisation : Quelque part... dans le centre de la France...

Message par Subbat »

Trop fort leon... mais alors pourquoi faut-il laisser le "video2=video2, ..." sur la ligne "video = video.Incrustation(video2=video2, haut=200, depart=100, fin=400, fade=3.75)"
Avatar du membre
leon1789
Messages : 775
Enregistré le : dim. 26 août, 2007 14:09
Contact :

Message par leon1789 »

video.incrustation(video2=video2, ...).

Le "video2" du membre gauche de l'égalité désigne le nom de la variable utilisée à l'intérieure du script pour désigner la vidéo incrustée,
alors que le "video2" du membre de droite de l'égalité désigne le nom de la variable utilisée à l'extérieure du script pour désigner la vidéo incrustée.


A l'extérieur du script, l'utilisateur a tout le loisir de nommer comme il le souhaite la vidéo à incruster : par exemple, "ma_petite_video_a_inscruster".
En revanche, pour faire passer l'information au script d'incrustation, il faut se mettre sur la longueur d'onde du script en précisant obligatoirement l'argument "video2=..."
D'où "video2 = ma_petite_video_a_inscruster".


Mais si l'utilisateur a choisi lui-même de nommer à l'extérieur du script sa vidéo à incruster par "video2", alors l'instruction devient "video2 = video2" (ce qui peut surprendre, mais qui montre surtout une cohérence entre l'extérieur et l'intérieur du script).

Bon, beaucoup de blabla pour pas grand chose en fait :mrgreen:



Une dernière chose, le paramètre "video2=..." n'est obligatoire que lorsqu'on veut incruster une video, sinon on utilise "image=..." qui précise une image à incruster. Seul un des deux paramètres "video2 / image" doit être utilisé.
Répondre