Veejay, un synthétiseur vidéo

Veejay est un synthétiseur vidéo aux multiples fonctions développé pour GNU/Linux en grande partie par Niels Elburg. Veejay se démarque des autres logiciels conçus pour le live de par sa conception client/serveur.

1 - Installation et configuration du serveur

La partie serveur de veejay, graphiquement parlant, c’est la fenêtre de sortie vidéo. Le serveur peut être piloté par la ligne de commande, entrée du clavier, midi, osc, vims.
Pour illustrer ce propos, on verra plus tard que pour démarrer veejay, on démarre le serveur et ensuite un client.

Ce qui suit a été testé sous ubuntu 14.04.1 LTS et devrait également fonctionner pour de plus anciennes versions.
Attention sous debian à mjpegtools à l’instant où cet article est écrit... Ceci fera l’objet du prochain affinage de cet article lors de la sortie de ’jessie’.

Mise à jour préalable :

sudo apt-get update && sudo apt-get dist-upgrade -y && sudo reboot

Remarque : il faut omettre l’option "-y" si on souhaite savoir ce qui va être mis à jour et éventuellement refuser la mise à jour globale, noyau compris.

Installation des dépendances de veejay et de quoi compiler :

sudo apt-get install aconnectgui gcc make pkg-config build-essential automake libtool git yasm libgtk2.0-dev libx11-dev libxml2-dev libxinerama-dev libsdl1.2-dev libjack-dev libglib2.0-dev libquicktime-dev libmjpegtools-dev  libfreetype6-dev libdv4-dev libdirectfb-dev liblo-dev libglade2-dev libtheora-dev libvorbis-dev libxv-dev libavutil-dev libswscale-dev libavcodec-dev libavformat-dev libghc-sdl-ttf-dev effectv

Oui, oui, tout ça... Mais comme disait Monsieur Pelizzotti, "qui peut le plu peut le moinsse".
Par exemple, la présence de libquicktime-dev va configurer veejay pour prendre en charge les fichiers .mov, tandis que liblo-dev est dédié au protocole OSC, etc...

Autre remarque : si jackd n’est pas installé sur le poste, ou que vous ne n’avez jamais démarré jackd, il est temps d’aller vous documenter à ce sujet. Ne pas connaître jackd n’est pas bloquant pour la suite.
Si vous souhaitez utiliser la partie audio/jackd, il est possible que ayez besoin de l’installation de libsamplerate0-dev.

On va installer frei0r depuis les sources, le paquet proposé par Debian ou Ubuntu étant archaïque. Ça en vaut vraiment la peine.
Allez hop !

cd
git clone git://code.dyne.org/frei0r.git
cd frei0r
./autogen.sh

Cela doit produire la sortie suivante :

Now you can run ./configure

Faites le, soyez culotté !

./configure

Cela doit également produire une sortie encourageante :

Now you can run make.

Si ce n’était pas le cas, une lecture du message d’erreur peut vite vous tirer de la tourbe.

make
sudo make install

Ça y est, on a compilé et installé frei0r !

Téléchargement des sources de veejay :

git clone git://code.dyne.org/veejay.git veejay-git

Installation :

cd veejay-git/veejay-current/veejay-server
./autogen.sh
./configure --prefix=/usr

À ce stade, il est préférable de vérifier les options configurées par veejay. À la toute fin de la configuration, une liste de fonctionnalités est proposée avec comme argument ’true’ ou ’false’, correspondant à sa disponibilité ou non. Certaines sont dépendantes de votre configuration matérielle, d’autres concernent le support d’un logiciel tiers, d’une norme ou d’un type de fichier particulier.

Il n’est pas trop tard pour taper :

./configure --help

et adapter à vos besoins.

make -j nombre_de_CPUs_sur_la_machine
sudo make install

Configuration de veejay :

Configuration des chemins de frei0r et effectv.

On va mettre le bon chemin vers le bon binaire :

sudo find /usr/* -executable -type f -name frei0r-1 > ~/.veejay/plugins.cfg
sudo find /usr/* -executable -type f -name effectv >> ~/.veejay/plugins.cfg

Voilà, c’est terminé pour la partie serveur, on a déjà le principal.

Les actions relatives à l’installation et la configuration de veejay peuvent être passées via les commandes suivantes, à copier coller dans un fichier texte qu’on rend exécutable par la suite :

#!/bin/bash

sudo apt-get update;
sudo apt-get dist-upgrade;
sudo apt-get install aconnectgui gcc make pkg-config build-essential automake libtool git yasm libgtk2.0-dev libx11-dev libxml2-dev libxinerama-dev libsdl1.2-dev libjack-dev libglib2.0-dev libquicktime-dev libmjpegtools-dev  libfreetype6-dev libdv4-dev libdirectfb-dev liblo-dev libglade2-dev libtheora-dev libvorbis-dev libxv-dev libavutil-dev libswscale-dev libavcodec-dev libavformat-dev libghc-sdl-ttf-dev effectv;
sudo ldconfig;
mkdir compilation;
cd compilation;
git clone git://code.dyne.org/frei0r.git;
cd frei0r;
./autogen.sh;
./configure;
make;
sudo make install;
cd ..;
git clone git://code.dyne.org/veejay.git veejay-git;
cd veejay-git/veejay-current/veejay-server/;
./autogen.sh;
./configure --prefix=/usr;
make;
sudo make install;
cd;
mkdir -p .veejay/fonts;
mkdir -p .veejay/plugins;
sudo find /usr/* -executable -type f -name frei0r-1 > ~/.veejay/plugins.cfg;
sudo find /usr/* -executable -type f -name effectv >> ~/.veejay/plugins.cfg;

2 - Installation et configuration du client

C’est moins long que le serveur :

cd
cd veejay-git/veejay-current/veejay-client
./autogen.sh
./configure --prefix=/usr
make -j nombre_de_CPUs_sur_la_machine
sudo make install

done !

Il faut répéter l’opération pour veejay-utils et veejay-themes, ces étapes sont facultatives. Les autres dossiers source sont placés à coté de celui du serveur et du client.

3 - Avant de démarrer veejay...

Si on use de fichiers pour alimenter veejay, il faut s’assurer d’utiliser un codec taillé pour la performance. Pas de mpeg4, xvid...

Par contre, le mjpeg offre un bon compromis : pas ou peu de décompression, toutes les frames sont entières et ça reste gérable au niveau de la taille des fichiers. Une fois désentrelacé et débarrassé de sa piste audio, ça fait de quoi travailler.

OK ! On a le codec ! Super !

Bon maintenant la mauvaise nouvelle, les samples vidéo doivent impérativement avoir la même taille (x,y) ainsi que le même nombre d’images / seconde (fps), 25 pour ne pas se compliquer, c’est le framerate par défaut de veejay.
J’en suis sur, ffmpeg vous aidera à démouler le flan sans accroc avec une commande comme l’exemple qui suit.

ffmpeg -i mon_fichier.video -vcodec mjpeg -s vga -r 25 -an -v un_autre_fichier.avi

Avidemux aidera les allergiques à la ligne de commande.

Quand on y réfléchit, c’est pas si bête de refuser de charger des codecs absolument pas optimisés pour du live, et quand on fait un peu de projection par ci par là, on sait qu’il vaut mieux exploiter des tailles (x,y) standard.

Attention, je n’ai pas dit que veejay ne pourrait pas afficher la fenêtre du serveur à une taille de... disons 277x1856 pixels et y faire passer de la vidéo.

4 - Prêt ?

Le moyen de tester veejay pour la première fois est de taper dans un terminal :

veejay -D

ce qui aura pour effet de démarrer veejay sans charger de fichier et à une taille de 576x720 px. Le debug est affiché dans le terminal, il faut le lire, les infos relatives au démarrage sont précieuses car c’est elles qui vont vous aider à optimiser veejay.
À coté du terminal, une fenêtre noire s’est ouverte, c’est la sortie du serveur.

Pour stopper veejay, dans le terminal :

[CRTL]+C

Si vous tapez ce raccourci clavier dans veejay et non dans le terminal, ceci aura pour effet d’afficher les informations légales.

Il est toujours mieux de démarrer veejay depuis le répertoire où on a stocké ses fichiers de travail :

cd le/dossier/où/sont/mes/vidéos

Pour s’assurer du contenu vidéo d’un répertoire, ’file’ est encore le meilleur outil :

file *.avi

Pour demarrer veejay en mode VGA (640x480) :

veejay -w 640 -h 480

Pour démarrer veejay avec un framerate de 23 fps :

veejay -w 640 -h 480 -r 23

Pour démarrer l’interface graphique (client), dans un autre terminal :

reloaded -h 127.0.0.1 -p 3490

Une fois l’interface graphique ouverte, on peut charger des flux, des fichiers.

Toutefois, reloaded et veejay offrent des possibilités accrues.

Exemple : vous avez installé veejay sur deux postes A et B qui se trouvent reliés sur le même réseau local.
Le poste le plus performant est le poste A, donc sur le poste A :

veejay -w 640 -h 480

sur le poste B :

reloaded -h ipv4_du_poste_A -p 3490

Vous êtes en mode client serveur pur, vous commandez veejay sur le poste A depuis le poste B. Il est possible de démarrer veejay sur plusieurs postes et reloaded sur un autre poste. Reloaded peut commander 32 instances de veejay (non recommandé). Possible également de démarrer plusieurs serveurs (4, 9 ou 16 ?) sur un seul poste en divisant l’écran par autant de serveurs (recommandé). Les gars qui n’en veulent en auront déduit que tout ça peut passer à travers un routeur ou un tunnel...

Pas besoin d’être root pour connaître l’adresse ip de vôtre poste, dans un terminal :

ip -4 a

Ça doit commencer par 192.168.xxx.xxx, ou 172.xx.xxx.xxx ou encore 10.xxx.xxx.xxx . Une ip en 169.254.xxx.xxx signifie que le poste n’a pas pu se connecter au réseau.

Si vous n’êtes dans un aucun de ces cas, contactez vôtre administrateur réseaux pour qu’il vous demande si vous avez déjà redémarré votre poste et/ou de bien vérifier le câble.

Veejay possède une manpage bien renseignée :

man veejay

et des d’autres informations très utiles telles que les plugins trouvés, chargés, une description sommaire des effets et leurs paramètres, l’espace de noms dédié à la partie OSC, les variables d’environnement concernant veejay :

veejay -u|less

Et si on mettait de la vidéo maintenant ?

Dans reloaded :

Gveejay > Sample > New from file

pour localiser et charger une vidéo.

Localisez l’onglet Samplebank dans reloaded. Une première case avec ’solid 1’ représente un flux par défaut, l’écran noir. La deuxième case, c’est la vidéo qu’on vient de charger. Ainsi de suite, les samples vont se ranger dans cette grille. Double cliquer le sample qu’on veut jouer.
Au clavier, c’est [F1], [F2], [F3], etc...

L’onglet qui attire l’oeil : FX List

  • Mixing effects
    regroupe les effets qu’on peut utiliser sur une seule source, ou mélangée avec une autre.
    On mélange deux vidéos comme suit : on joue la vidéo 1, on clique sur un ’mixing effect’, on se déplace à l’onglet ’mixing sources’, on clique sur la vidéo 2, celle qu’on veut superposer, ajuster l’effet en faisant coulisser p0, p1, p2 juste au dessus.
  • Image effects
    regroupe les effets simples.

Les effets sont combinables dans l’onglet FX Chain, on peut les copier-coller-couper avec les boutons en dessous.
Pour positionner un effet en 3° position dans la chaîne d’effets, il faut d’abord sélectionner la 3° ligne dans FX Chain, ensuite double cliquer l’effet voulu, parce que c’est toujours la première ligne qui est sélectionnée par défaut.
En théorie, il est donc possible de combiner jusqu’à 21 vidéos sur une sortie, car on peut positionner 20 effets sur une seule vidéo.

*** Héhé, oui, cet article est déjà publié, mais toujours en cours de rédaction :)
à venir : enregistrer, reboucler, sauvegarder, MIDI, OSC, entrée DV ***