Vidéo et Max-Jitter

1 - Installation

  • Jusqu'à Max 7, installer Quicktime player
  • Utiliser la version 32 bits de Max sans installation supplémentaire
  • Installer les codecs K-Lite pour utiliser la version 64 bits de Max

Remarque : Max 8 n'est que 64 bits.

  • Pour que Max trouve facilement les vidéos, enregistrer le patch dans un dossier,
  • Placer les videos à lire dans ce même dossier

En cas d'impossibilité d'enregistrer, placer les vidéos dans un dossier facile à trouver quand même, enregistrer un chemin dans Max, menu Options / Files preferences, bouton + en bas pour créer un chemin et déclarer ce dossier.

2 - Lecture et affichage d’une video

Lecture basique, récapitulatif des objets pour démarrer

Choix et lecture de video en jitter

  • Objet jit.movie :
    lit une video
  • Objet qmetro :
    rythme l’affichage
    si arrêté : image fixe
    Déclenché par Toggle
  • Objet jit.pwindow :
    affiche une fenêtre de prévisualisation de la vidéo dans le patch.
    Pratique pour programmer, mais ce n’est pas un objet de rendu final.

Quelques messages de jit.movie :

  • Gestion de la lecture : read, start, stop, clear
    • read permet de choisir et de charger en mémoire la video / image. Envoyer un message read démarre automatiquement la lecture du media.
    • stop arrête la lecture. La dernière image lue reste affichée. Le media reste chargé en mémoire.
    • start reprend la lecture après un stop.
    • clear affiche un fond noir. clear après stop permet d'effacer la dernière image lue. Le media reste chargé en mémoire et la video peut à nouveau être lue avec un start sans nécessité d'être rechargée avec un read.
  • Vitesse de lecture :
    rate avec syntaxe rate /espace/ valeur de vitesse
    valeur négative = lecture à l’envers
  • Boucle : loop
  • Volume du son de la video : vol

Codec

Si la video sera manipulée en temps réel, sera affectée par des effets, des changements de vitesse, etc... Format Quicktime PhotoJpeg

Résolution : jamais plus que l'affichage final, par exemple un vidéoprojecteur 1024 x 768... Vérifier ce paramètre avant d'encoder les vidéos d'un projet.

NE JAMAIS UTILISER D'ESPACE, de lettres accentuées, de caractères spéciaux, DANS LES NOMS DE VIDEOS, SONS, MEDIAS APPELES DANS UN PATCH MAX (ou dans n'importe quel autre type de programmation).

Affichage d’une fenêtre de rendu définitif

  • Objet jit.window
    C'est l'objet généralement utilisé pour afficher une vidéo lue par jit.movie, s'il n'y a pas de superposition, d'OpenGL, etc.
    Fenêtre flottante ou plein écran.
    Sortie video en Jitter

Divers messages de configuration, dont :

  • floating pour que la fenêtre soit toujours à l’avant-plan ;
  • size pour redimensionner ;
  • fullscreen pour passer en plein écran.

Selon les objets Jitter employés, la fenêtre de rendu n'est pas toujours jit.window.

Plein écran

Attention, lorsque le fullscreen est lancé au démarrage, il peut être difficile d'en sortir.
=> Touches Alt + Tab pour changer de fenêtre.
Néanmoins cela ne suffit pas toujours pour récupérer la main et sortir du mode plein écran.

Il est donc prudent d'associer le message fullscreen à une touche qui permet de l'activer et de le désactiver via un toggle.
Pour gérer la sortie de plein écran, utiliser une touche de clavier, telle que Echap (Esc), key numéro 27.
$1 est remplacé par 0 ou 1 en fonction de la valeur du Toggle.

La souris

Passer en fullscreen n'enlève pas la souris. Pour éviter de l'avoir en plein milieu, il y a un message Max général à manipuler avec beaucoup de précautions : il s'adresse à l'ensemble des fenêtres Max, y compris celles du patch.
Il faut donc impérativement l'associer à une touche pour retrouver la souris.

Enlever la souris :

;
max hidecursor

Afficher la souris :

;
max showcursor

Messages max cursor : hidecursor, showcursor

Dans cet exemple le r affiche reçoit un "1" envoyé par un loadbang pour cacher le curseur au démarrage.

3 - Exercices

Exercice - Contrôler la vitesse de lecture avec une autre touche du clavier

  • Trouver le numéro de la touche espace : placer un nombre sous key et observer...
  • Utiliser sel 32 pour sélectionner la touche espace
  • Brancher un Toggle pour alterner entre deux valeurs 0 et 1
  • Transformer ces valeurs avec un scale pour basculer entre lecture normale et inversée.
  • Envoyer le résultat sur un message rate $1.

Vitesse de lecture vidéo

Exercice - Contrôler l’affichage de plusieurs videos

  • Copier plusieurs videos dans le dossier du patch.
  • Utiliser un objet coll.
  • Quelle doit être la structure de chaque ligne pour s’adresser directement à l’entrée du jit.movie ?
  • numero de ligne, read nom_du_fichier.extension;
  • 1, read tartempion.mov;
  • Contrôler le coll avec un Nombre pour changer de video sans cliquer sur un message.

Lire plusieurs vidéos en jitter

Exercice - Contrôler l’affichage de plusieurs videos avec un premier capteur et leur vitesse de lecture avec un autre

  • Partir de l’exercice précédent.
  • Il est possible d’utiliser 2 sliders pour simuler les capteurs (range de 0 à 127).
  • Quel est le traitement à intercaler entre le premier capteur et le coll ? Plusieurs solutions possibles.
  • Avec le deuxième capteur faire varier la vitesse de lecture entre -3 et 3. Quel est le traitement à utiliser ?

Patches du jour

4 - Superpositions

Comment superposer un objet mouvant au dessus d'un décor ?
Patches : jit.layer.zip

Texturer un plan

L'objet de prédilection est : jit.gl.videoplane.
Il permet aussi de gérer la transparence de l'objet superposé qui peut donc être aux formats Gif ou png, ou une video avec un masque alpha.
C'est un objet .gl, pour OpenGl, il n'a donc pas besoin d'une fenêtre jit.window. Sa fenêtre de rendu est fournie par un objet jit.world.

Les deux images choisies sont : une video de fond qui défile en boucle - londrebus.mov - et une image fixe d'un rond rouge avec fond transparent - rondrougetransp.png.
Chacune utilise un objet jit.movie, dont la sortie est envoyée dans un objet jit.gl.layer.
L'objet jit.gl.layer est exactement la même chose que l'objet jit.gl.videoplane, mais préréglé pour gérer la transparence avec les paramètres preserve_aspect 1 et blend_enable 1.

Attention aux arguments @layer, à numéroter, ce sont eux qui déterminent l'ordre des calques.

Le démarrage automatique se fait en envoyant :

  • Activation du qmetro pour le rafraîchissement de la video - cette étape pourrait se faire aussi avec un argument @active 1 dans l'objet. Ici le 1 active le Toggle qui à son tour active le qmetro.
  • Bang sur les messages read des jit.movie, ou envoi de message avec un numéro de ligne dans un coll fournissant ces paramètres.
  • Activation du jit.world avec un 1 sur son Toggle. Sans cela, le contenu de la fenêtre est noir.
  • Activation du message enable sur les objets jit.gl.layer, avec un 1. Les deux images s'affichent l'une sur l'autre.
  • Activation du message blend_enable avec un 1 branché sur le jit.gl.layer superposé. Cela active la transparence, sinon le tour est noir.

Affichage

La gestion du rendu final sur jit.world est équivalente à celle du jit.window, pour le plein écran et la souris.

L'affichage final en plein écran est ici géré avec un delai de 10 secondes et la touche espace pour repasser en petite fenêtre avec la souris.

Mouvement

Déplacement, rotation et zoom de l'image superposée : objet jit.rota.

5 - Démarrage automatique avec des précautions

ATTENTION aux commandes de curseur de souris.
RISQUE : perdre le patch en cas de mauvaise gestion.

Gestion du message hidecursor

Le message hidecursor est général pour tout Max : il masque aussi la souris dans le patch.
DONC :

  • Prévoir un message showcursor pour récupérer la souris
  • Faire dépendre ces messages d'une touche de clavier
  • Mieux, mettre un délai de plusieurs secondes au démarrage avant de masquer la souris, pour avoir le temps d'enlever le message si nécessaire.

Au secours ! J'ai perdu la souris !

Le pire des cas : le message max hidecursor est en démarrage automatique sous un loadbang sans délai ni touche pour activer un message max showcursor.
La souris est perdue.
Comment faire ?

Il n'est pas nécessaire de recommencer tout le programme...

Méthode à l'aveuglette

Même masquée la souris fonctionne encore. Il est possible de cliquer dessus, donc de cliquer sur un message max showcursor s'il existe.
La difficulté est de repérer le bon endroit sans voir la souris.

  • Basculer entre les fenêtres video et patch et autres logiciels avec les touches Alt + Tab.
  • Quand le focus est sur le patch, la barre de navigation du système est accessible, donc il est possible de lancer n'importe quel autre logiciel où la souris s'affiche.
  • Basculer entre le patch et une autre fenêtre avec ALt+Tab pour mettre la souris sur le message max showcursor.
  • Cliquer sur ce message.
  • La souris réapparaît, corriger le patch.

Méthode en mode texte

Un patch Max peut s'ouvrir et se manipuler avec un simple éditeur de texte.
Cette méthode est valable pour toutes les erreurs bloquantes de démarrage automatique.

Principe : ouvrir le patch en mode texte, repérer l'objet (par exemple loadbang) ou le message à effacer, l'effacer.

  • Fermer le patch Max, avec Alt + F4 ou avec le gestionnaire des tâches si impossible à la souris.
  • Repérer le fichier dans un explorateur,
    Patch Max
    • Pour les utilisateurs de Free Commander ou Total Commander, F4 pour éditer le fichier en texte simple,
    • Sinon clic droit, Ouvrir avec..., Plus d'options, Bloc-Note
      Ouvrir avec
  • Dans l'éditeur de texte, rechercher le mot "hidecursor" (Control + f)
    Chercher
  • Ce mot se trouve dans un ensemble de lignes définissant le message.
    Trouver
  • Repérer toutes les lignes définissant le message : elles sont encapsulées entre deux accolades { }, lesquelles se situent entre 2 virgules. Les virgules séparent les entités telles que messages et objets.
  • Sélectionner l'une des virgules et toutes les lignes du message hidecursor.
    Sélectionner
  • Effacer le message, en faisant bien attention à conserver une virgule entre les lignes restantes.
    Effacer
  • En ouvrant le patch, constater que le terrible message a disparu.
    Patcher
  • Refaire correctement le démarrage automatique.
    Bien fait

6 - Accès aux frames, video image par image

Le qmetro est une façon de rafraîchir automatiquement l'image diffusée. Il rythme la video. Ce n'est néanmoins pas la seule façon de renouveler l'image lue. Une video peut aussi être pilotée directement frame par frame.
Inconvénient : c'est plus laborieux.
Avantage : il est dans certains projets utile de savoir à quelle frame de la video le patch est, pour y synchroniser des événements.

Les frames