Exporter une vidéo avec Processing, Video export et ffmpeg

L’exportation d’une vidéo requiert l’installtion d’une librairie et de ffmpeg, une librairie open source puissante et utile (au moins pour ce script)

1/8 | Suivant

Installer ffmpeg

Pour des raisons de facilité, nous utiliserons homebrew, un utilitaire en ligne de commande, pour installer.
1) se rendre sur le site de Homebrew et copier la ligne de commande se trouvant dans le haut de la page
2) la coller dans le terminal et appuyer "return". Homebrew s’installe sur votre ordinateur.
3) Une fois Homebrew installé, tapez la commande "brew install ffmpeg" dans le terminal. Cette fois ffmpeg s’installe.

Se référer à la documentation de ffmpeg pour plus d’infos

Une fois cette opération réalisée, on peut commencer à écrire notre script.

Installer la librairie pour Processing "Vidéo export"

Allez dans sketch/importer une librairie/Ajouter une librairie, tapez "video" dans le moteur de recherche et sélectionnez "Video export" dans la liste.

Un script d’essai

Pour tester la chose, un script de base :

import com.hamoid.*;
VideoExport videoExport;
int FPS = 30;
int duree=60; // durée en frame


void setup() {
 size(768, 576);
 noStroke();
 frameRate(FPS);
 videoExport = new VideoExport(this, "monexport.mp4");
 videoExport.setFrameRate(FPS);
 videoExport.startMovie();
}
void draw() {
 background(255);
 fill(random(255), 0, 0);

 textSize(30);
 text("WAOW", width/2, height/2 );  

 videoExport.saveFrame();

 // stopper après le bon nombre de frames
 if (frameCount > duree) {
   videoExport.endMovie();
   exit();
 }
}

Ce qui donne ceci :

Un test avec l’ajout d’un son (et son analyse)

Voici un second test avec la librairie sound pour le chargement d’un son et son analyse en temps réel :

import processing.sound.*;
import com.hamoid.*;
VideoExport videoExport;
int FPS = 30;

SoundFile sample;
Amplitude rms;

float x,y;

void setup() {
 size(768, 576);
 x=random(width);
 y=random(height);
 
 // copier/coller depuis l'exemple "PeakAMplitude" de la librairie "Sound"
 sample = new SoundFile(this, "14 Prelude No. 14.mp3");
 sample.play();
 rms = new Amplitude(this);
 rms.input(sample);
 
 frameRate(FPS);
 videoExport = new VideoExport(this, "monexport.mp4");
 videoExport.setFrameRate(FPS);
 // associer le son
 videoExport.setAudioFileName("14 Prelude No. 14.mp3");
 videoExport.startMovie();
 textAlign(CENTER, CENTER);
 background(255);
}
void draw() {
 // rms.analyze() renvoie un chiffre entre 0 et 1
 // l'utiliser pour l'angle, la vitesse, la couleur
 float vitesse=rms.analyze()*100;
 stroke(map(rms.analyze(),0,0.6,255,0));
 // noise plutôt que random
 float angle=map(rms.analyze(),0,0.8,0,TWO_PI);
 float next_x=x+(sin(angle)*vitesse);
 float next_y=y+(cos(angle)*vitesse);
 line(x,y,next_x,next_y);
 x=next_x;
 y=next_y;
 if(x > width){ x-=width; }
 if(x < 0){x+=width; }
 if(y > height){ y-=height; }
 if(y < 0){ y+=height; }

 videoExport.saveFrame();

 // arreter à la fin du morceau
 if (!sample.isPlaying()) {
   videoExport.endMovie();
   exit();
 }
}

Ce qui donne ceci :