Aller au contenu
Kamo

Technique

Comment marche le zoom automatique de Kamo

Des clics de souris bruts à une caméra qui glisse. Les règles de regroupement, le timing et la physique de ressort derrière chaque zoom.

· 5 min de lecture · Par Doug Siqueira

Dans un enregistrement Kamo, chaque clic devient un zoom qui donne l’impression qu’un cadreur tenait la caméra. Aucune IA là-dedans, juste quelques règles simples et un peu de physique. Voici la recette complète.

1. Ce qui compte comme un clic

Pendant que vous enregistrez, Kamo écrit dans un fichier les mouvements, les clics et les défilements de la souris, sur la même horloge que la vidéo. À la première ouverture du projet, Kamo lit ces événements et ne regarde que les appuis sur le bouton gauche à l’intérieur de la zone enregistrée.

  • Les clics droit et du milieu ne zooment jamais.
  • Le défilement et les simples mouvements ne créent jamais de zoom.
  • Les clics en dehors de la fenêtre ou de la zone enregistrée sont ignorés.

2. Regrouper les clics en plans

Si chaque clic avait son propre zoom, remplir un formulaire secouerait la caméra comme un téléphone tenu à la main. Kamo regroupe donc les clics en plans. Un clic rejoint le plan en cours quand ces deux conditions sont vraies :

  • il arrive moins de 1,5 seconde après le relâchement du clic précédent, et
  • il tombe à moins d’un quart de la diagonale de l’écran du premier clic du plan (environ 550 px sur un écran 1080p).

Mesurer depuis le premier clic, et pas depuis le dernier, est important : sinon, une suite de petits pas pourrait faire traverser tout l’écran au plan.

3. Le timing

Chaque plan commence 0,3 seconde avant son premier clic, pour que le spectateur regarde déjà au bon endroit quand le clic arrive, et tient 1 seconde après le dernier relâchement. Un plan dure au moins 0,6 seconde. Quand deux plans se chevaucheraient, ils fusionnent en un seul.

Par défaut, la caméra zoome à 2×, visant la position moyenne des clics du plan, et se décale vers l’intérieur près des bords pour ne jamais montrer quoi que ce soit en dehors de la vidéo. Pendant un zoom, la caméra suit doucement le curseur, avec un léger retard.

4. Le ressort

Les zooms n’utilisent jamais d’interpolation linéaire. La caméra est un ressort amorti (raideur 170, amortissement 26), le même genre de mouvement que dans une bonne animation de téléphone : il démarre vite, ralentit en douceur et se pose sans osciller.

Deux détails font que ça sonne juste :

  • Le ressort est résolu exactement, sous forme analytique, au lieu d’être simulé pas à pas. Chaque fréquence d’images obtient la même courbe, donc l’aperçu et l’export en 60 fps correspondent.
  • Le ressort met environ 0,6 seconde à arriver, donc la caméra commence à bouger avant le clic et se pose dessus à une image près. Les zooms qui s’enchaînent passent directement d’une cible à la suivante, sans dézoomer entre les deux.

5. Le curseur suit le même ressort

Kamo enregistre l’écran sans le curseur de Windows et dessine le sien à partir du trajet de la souris. Il utilise le même ressort sur chaque axe. Comme tout le trajet est connu à l’avance, le curseur peut anticiper d’environ 150 ms : il glisse sans traîner derrière votre main. À chaque clic, l’écart restant est résorbé en fondu pour que le curseur soit exactement sur le point du clic, à l’image du clic.

6. Vous avez toujours le dernier mot

Chaque zoom apparaît comme un bloc sur la timeline. Faites-le glisser, étirez-le, changez son échelle, supprimez-le, ou double-cliquez pour ajouter le vôtre. Tout bloc que vous touchez devient manuel, et Regenerate zooms (Régénérer les zooms) ne remplace jamais que les automatiques.

Le tout est déterministe (même enregistrement, mêmes zooms) et rapide : les zooms d’un enregistrement de 10 minutes sont générés en moins d’une seconde.

Le code est open source si vous voulez le lire, et vous pouvez essayer le zoom dans votre navigateur tout de suite.

Plus d’articles

Essayez-le sur votre prochain enregistrement.

Gratuit, open source, sans compte. Votre première vidéo montée n’est qu’à un téléchargement.