Ce petit billet va décrire comment (ne pas) créer une vidéo pour une conférence, en espérant que cela serve à d’autres.
Contexte
Un article au sujet des fonctions Z-polyrégulières a été accepté à LICS’23, conférence qui se tient actuellement à Boston. La conférence accepte les participations à distance sous la forme de vidéos suivies de questions réponses en vidéoconférence. Globalement, c’est une bonne idée:
- Produire une vidéo oblige à faire attention à la qualité du rendu, ce qui n’est souvent pas le cas pour une simple vidéoconférence.
- Avoir à l’avance un simple fichier à lancer mitige les problèmes de latence induits par les vidéoconférences transatlantiques (la personne peut se connecter pendant que la vidéo est lancée).
Cependant, il faut produire une vidéo, et la contrepartie du point (1) est que cela demande un peu plus de travail aux auteurs.
Mise en garde: Cet article contient des liens vers une plateforme propriétaire.
Mise en garde: Il est toujours un peu compliqué de se rendre compte des technicités liées à un corps de métier avant d’avoir réellement essayé de s’en passer. Un monteur, un designer graphique, et un ingénieur son et lumière sont probablement nécessaires à la réalisation sereine d’une vidéo de qualité. Aucun de ces corps de métier ne sont représentés ici, et aucun des outils utilisés n’est techniquement viable.
Une première tentative
J’ai tendance à toujours partir dans des idées un peu grandioses et après avoir vu un bon ami présenter sa thèse en utilisant un outil un peu fou pour la visualisation de concepts mathématiques sur Youtube (voir par exemple, une illustration de la transformée de Fourier).
Un exemple de code produisant une animation où un cercle se déforme en un carré (repris depuis le LISEZMOI du projet).
% Fichier example.py
from manim import *
class SquareToCircle(Scene):
def construct(self):
= Circle()
circle = Square()
square
square.flip(RIGHT)-3 * TAU / 8)
square.rotate(=0.5)
circle.set_fill(PINK, opacity
self.play(Create(square))
self.play(Transform(square, circle))
self.play(FadeOut(square))
Pour que le code suivant se transforme magiquement en un fichier mp4
lisible par votre conférence préférée, il faudra utiliser une commande dans le style de
manim -p -ql example.py SquareToCircle
Néanmoins, j’aurais dû écouter sa mise en garde: la mise en place de telles animations est extrêmement coûteuse en temps, et l’origine de ce programme Python ne laisse aucun de doute sur ce qu’il sera facile de faire avec: des animations de mathématiques (continues). Ainsi, il faut créer une abstraction supplémentaire pour travailler avec des objets discrets comme des automates, ou utiliser une librairie arbitraire sans documentation sur un dépôt Github non mis à jour depuis trois ans.
Par ailleurs, je n’ai pas encore fait la migration de mon ordinateur de travail vers une version plus récente de Ubuntu, qui est donc coincé avec des librairies Python d’un autre âge. Ce qui m’a donné une raison supplémentaire d’abandonner cette technique pourtant intéressante.
Tout cela pour dire qu’utiliser un tel logiciel/librairie est probablement la meilleure chose à faire, et que, par conséquent, c’est un autre chemin ce billet va décrire.
Le bon vieux beamer
Dans le doute, il faut revenir aux fondamentaux: un fichier PDF classique, produit avec LaTeX, en utilisant la class Beamer. Même dans cette configuration éprouvée, on peut essayer quelques petites choses, et cela vaut peut-être la peine de décrire certaines techniques qui rendent (à mon sens) les présentations un peu plus intéressantes qu’une liste de points qui apparaissent.
Utiliser un thème agréable
Il n’est probablement plus à présenter, mais le thème metropolis est probablement celui à utiliser pour avoir des présentations qui ne donnent pas la nausée aux lecteurs. Ne pas hésiter à le configurer pour utiliser un thème de couleur qui vous plaît, et configurer les quelques options que proposent le thème comme suit:
% Use a 16:9 ratio, because no-one uses a 4:3
% screen anymore.
\documentclass[aspectratio=169]{beamer}
% Use metropolis theme
\usetheme[sectionpage=none,
subsectionpage=progressbar,
titleformat=smallcaps,
progressbar=foot, numbering=fraction]{metropolis}
En utilisant cette configuration de base, vous surplombez déjà la foule de présentations qui utilisent des thèmes d’une époque révolue.
Une fonctionnalité que j’apprécie particulièrement dans ce thème est la possibilité de faire des standout frames, qui donnent une pause bienvenue à l’orateur qui cherche son souffle, et à l’audience qui souffre sous le poids des équations ésotériques.
\begin{frame}[standout]
\ldots what?
Wait\end{frame}
Utiliser Tikz dans un Beamer
Si vous voulez que les gens retiennent un tout petit bout de votre présentation (les présentations à LICS durent quinze minutes en incluant les questions), mieux vaut avoir un joli dessin à montrer. Pour cela, la manière la plus intégrée à Beamer est d’utiliser Tikz. C’est un choix qui n’est pas évident puisque la courbe d’apprentissage est démentielle. Néanmoins, le gain de temps obtenu en réduisant la friction dans l’écriture des diapositives est lui aussi substantiel (du moment que l’on reste sur des présentations écrites avec LaTeX bien sûr).
Avant de décrire des éléments plus “méta”, voilà une liste de petites astuces permettent de faciliter l’écriture des dessins et rendre l’écriture moins désagréable.
- Utiliser un éditeur de texte qui recompile à la sauvegarde.
- Définir une palette de couleur dans le préambule, et créer une fonction
\tableofcolors
pour l’afficher dès que nécessaire lors de l’écriture. - Lorsqu’une diapositive contient une
tikzpicture
, elle ne doit contenir que cela: tout le contenu est géré partikz
. Cela simplifie énormément la gestion du contenu. - Mettre les dessins dans une
tikzpicture
proprement centrée, et proprement mise à l’échelle avec le joli hack\resizebox{\linewidth}{!}{ CONTENU }
. - Utiliser les librairies tikz suivantes
overlay-beamer-styles
,automata
,positioning
,arrows
, etbackgrounds
.
De manière plus générale, il faut absolument utiliser le système de styles de Tikz lorsqu’on construit une image. Cela simplifie à la fois l’écriture et la modification des images. Par exemple dans le code suivant:
\begin{tikzpicture}[
poly/.style={fill=red},
starfree/.style={fill=blue},
]\node[poly] (ZP1) at (0,0)
$\mathbb{Z}_1$};
{\node[poly] (ZP2) at (0,1)
$\mathbb{Z}_2$};
{
\node[starfree] (SF1) at (1,1)
$\mathbb{Z}\mathsf{SF}_1$};
{\node[starfree] (SF2) at (1,1)
$\mathbb{Z}\mathsf{SF}_2$};
{\end{tikzpicture}
Un intérêt d’utiliser de tels styles est que l’on peut par la suite décider que tous les nœuds poly sont d’une taille fixe, avec retour à la ligne, dans un rectangle aux bords arrondis
\begin{tikzpicture}[
poly/.style={
fill=red,
rounded corners=1mm,
draw=black,\sf\large,
font=
execute at begin node=\begin{varwidth}{2.8cm}},
{
execute at end node=\end{varwidth}},
{
minimum width=2.8cm,
},
starfree/.style={fill=blue},
]% unchanged content
\end{tikzpicture}
Il faut voir l’argument optionnel de l’environnement tikzpicture
comme une
feuille de style CSS sous stéroïdes: on peut même ajouter du code à exécuter
au début et à la fin des nœuds. Enfin, vous êtes prêts à découvrir la clef
pour construire des images en cohérence avec vos diapositives, la petite
commande magique à ajouter au préambule de son document…
\tikzset{
onslide/.code args={<#1>#2}{\only<#1>{\pgfkeysalso{#2}}
}, }
Cette petite définition ajoute une commande onslide
utilisable sur les objets
Tikz comme suit:
\begin{tikzpicture}[
poly/.style={
fill=red,% unchanged
},
starfree/.style={fill=blue,
opacity=0,
onslide=<1>{
opacity=1,
},
onslide=<2->{
opacity=0.6
}
},
]% unchanged
\end{tikzpicture}
Et d’un seul coup de baguette magique, on passe d’un dessin statique à une image qui se crée progressivement sous les yeux ébahis des spectateurs. Globalement, la méthode suivante pour créer des images possède de nombreux avantages:
- L’effort est minimal: on commence par dessiner avec du Tikz normal le dessin final, par exemple directement repris du papier de conférence.
- On ajoute aux nœuds des classes “sémantiques” pour rendre le dessin plus joli
- On décide ensuite de l’ordre dans lequel les objets vont apparaître, doivent changer de couleur, ou doivent se révéler.
Un seul problème apparaît dans cette méthode, l’ordre dans lequel les objets
sont dessinés (donc leur z-index) ne correspond pas forcément à l’ordre
dans lequel les objets sont révélés, ou à l’ordre dans lequel les objets
doivent être crées. Le problème typique est de vouloir ajouter un objet
“sous” un objet qui est déjà dessiné, ce qui se fait très bien avec un combinaison bien sentie de scope
et de background
comme suit:
\begin{tikzpicture}
% code
\begin{scope}[on background layer]
% code qui fait référence
% aux nœuds précédents,
% mais dont le rendu
% se fera en arrière plan.
\end{scope}
\end{tikzpicture}
Enfin, pour les plus programmeurs d’entre nous, l’utilisation intensive de
boucles \foreach[count=\step]
dont la documentation se trouve sur internet
permet de créer facilement des figures un peu plus “régulières”.
Si vous voulez un exemple de rendu, voilà le pdf correspondant à l’article présenté à LICS’23.
L’atroce contournement
Si vous avez été assez attentifs jusqu’à présent, vous avez compris que l’objectif est de produire une vidéo et non pas un PDF. Même si des “animations” ont été insérées en découpant l’affichage des diapositives, cela ne rend pas la vidéo très attrayante et il manque encore la bande son.
Il se trouve que j’ai une tablette à encre électronique Boox, dont le
système d’exploitation est Android. Il est donc possible d’utiliser le petit
logiciel screen copy pour enregistrer
l’écran de la tablette dans un fichier mp4
. Le processus d’enregistrement
de la vidéo a donc été le suivant
- Faire la présentation en enregistrant le son (avec un bon micro de préférence)
- Utiliser la bande son ainsi créée pour écrire un script complet de la vidéo.
- Lire le script complet par paquet de slides (au bout de 5 slides je commence à faire des erreurs).
- Concaténer les fichiers pour avoir la bande son de votre vidéo.
- Enregistrer l’écran de la tablette, lancer la bande son, et écrire sur les slides des annotations qui soulignent et illustrent le propos “en live” (et même un peu avant, vu qu’on a le script).
À la fin, on obtient un fichier vidéo et un fichier audio à peu près cohérents qu’il suffit d’éditer pour obtenir le rendu final.
L’édition vidéo libre
Là c’est un peu le drame. J’ai tenté d’utiliser Pitivi puisque mes besoins étaient minimes. Cela s’est avéré être une expérience extrêmement désagréable, tant l’interface utilisateur est peu adaptée à éditer une vidéo de conférence. Globalement, les défauts dans la vidéo sont essentiellement à mettre sur mon incapacité à proprement synchroniser l’audio et la vidéo (le logiciel n’aidant clairement pas).
Avec un peu plus de temps, il aurait été de bon ton d’ajouter un fichier de sous-titres pour que les spectateurs puissent savoir ce qui est dit même avec un haut-parleur grésillant, mais cela demande l’apprentissage d’un autre logiciel et cette aventure sera pour un prochain billet.
Conclusion
Si vous voulez faire une vidéo, trouvez un collègue qui possède un ordinateur Apple avec son logiciel d’édition vidéo par défaut, cela vous simplifiera la vie pour le montage.
Si cela vous intéresse, voila le rendu final de ma petite expérience, à commenter avec bienveillance puisque, vous l’aurez compris, ce n’est pas encore mon métier.