créer une mosaïque de vidéos avec avisynth
5/07/08 à 12:30 pratique
une mosaïque à 4 cases
Voila le script avisynth dans version la plus simple, les 4 vidéos sont assignées une par une, et les opérateurs StackHorizontal et StackVertical permettent de faire l'assemblage. On part du principe que ces vidéos sont muettes et ont les mêmes caractéristiques (dimensions, images par seconde). Les vidéos seront assemblées de gauche à droite et de haut en bas. Ce script est à coller dans un fichier texte avec l'extension ".avs"
clip1 = AviSource("video1.avi")
clip2 = AviSource("video2.avi")
clip3 = AviSource("video3.avi")
clip4 = AviSource("video4.avi")
clip5 = StackVertical(StackHorizontal(clip1,clip2),StackHorizontal(clip3,clip4))
return clip5
Image créée à partir du script avisynth avec la commande ffmpeg suivante :
ffmpeg -i mosaique4.avs -an -ss 00:00:00 -r 1 -vframes 1 -s 320×240 -f mjpeg -y mosaique4.jpg
une mosaïque à 9 cases
Sur le même principe on peut étendre le script avisynth pour réaliser une vidéo à 9 cases
# pour un copier coller, enlever les retours à la ligne de la ligne clip 10
clip1 = AviSource("video1.avi")
clip2 = AviSource("video2.avi")
clip3 = AviSource("video3.avi")
clip4 = AviSource("video4.avi")
clip5 = AviSource("video5.avi")
clip6 = AviSource("video6.avi")
clip7 = AviSource("video7.avi")
clip8 = AviSource("video8.avi")
clip9 = AviSource("video9.avi")
clip10 = StackVertical(StackHorizontal(clip1,clip2,clip3),
StackHorizontal(clip4,clip5,clip6),
StackHorizontal(clip7,clip8,clip9))
return clip10
une mosaïque avec des cases de différentes tailles
Un peu plus corsé cette fois, une mosaïque avec plusieurs cases, des cases noires, et une bande son rajoutée à la fin! Voila à quoi devrait ressembler notre vidéo finale :
# fixer les dimensions de base d'une case
largeur = 320
hauteur = 240
duree = 200
# créer les clips et égaliser leur propriétés
clip1 = AVISource("video1.avi").KillAudio.BicubicResize(largeur*2,hauteur*2)
.ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)
clip2 = AVISource("video2.avi").KillAudio.BicubicResize(largeur,hauteur)
.ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)
clip3 = DirectShowSource("video3.avi").KillAudio.BicubicResize(largeur*2,hauteur*2)
.ChangeFPS(25).ConvertToYUY2().Trim(100,duree-1)
clip4 = AVISource("video4.avi").KillAudio.BicubicResize(largeur*3,hauteur*3)
.ChangeFPS(25).ConvertToYUY2().Trim(0,duree-1)
# créer une séquence noire
vide = BlankClip(width=largeur,height=hauteur,fps=25,length=duree-1,
color=$000000).ConvertToYUY2()
# empiler!
clip5 = StackHorizontal(vide.BicubicResize(largeur,hauteur*2), clip1,
vide.BicubicResize(largeur,hauteur*2), StackVertical(vide,clip2))
clip6 = StackHorizontal(StackVertical(clip3,
vide.BicubicResize(largeur*2,hauteur)),clip4)
clip7 = StackVertical(clip5,clip6)
# redimensionner
clip8 = clip7.BicubicResize(largeur,hauteur)
# rajouter une bande son
audio = WAVSource("osc.wav")
# on ne peut pas utiliser Trim sur du son
# donc on crée une vidéo fantoche
clip9 = AudioDub(vide,audio).Trim(0,duree-1)
clip10 = AudioDub(clip8,clip9)
return clip10
Script avisynth à télécharger (changer l'extension par .avs) : mosaique avisynth
Le nouveau fichier vidéo est créé en utilisant ffmpeg, avec la commande suivante :
ffmpeg -i mosaique3.avs -b 360k -f flv video.flv
Et voila le résultat (par elle même, la vidéo n'a aucun intérêt! C'est juste un montage réalisé à partir de séquences qui trainent sur mon disque dur!)



Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire