Information International, Inc. ou Triple-I est une compagnie qui réalisait des films en image de synthèse au début des années 80. Ils produisirent le film suivant pour démontrer à Disney qu'il était possible de réaliser « Tron ». C'est un collage d'extraits de leurs réalisations, on retrouve parmi d'autres « Adam Powers, the Juggler », une animation créée à partir de capture de mouvements rudimentaire, un exploit pour l'époque!
Après « Tron », Triple-I participera à des films comme « Star Wars », « le Trou Noir », « Westworld », « Rencontres du 3e type », etc.
Voici un tutoriel pour assembler plusieurs vidéos sous la forme d'une mosaïque et enregistrer le résultat sous forme de vidéo. Pour ça, nous utiliserons avisynth pour réaliser le script de montage et ffmpeg pour créer la vidéo finale (deux logiciels libres). Pour l'installation de ces deux logiciels, voir les 2 billets : installation de ffmpeg et utiliser ffmpeg avec avisynth).
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"
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!)