Aller au contenu

Créer une data-visualisation des contributions à Geotribu avec Gource#

logo Gource

Le(s) site(s) Geotribu étant basés sur Git, on profite ainsi de l'outillage de l'écosystème ; GitHub bien sûr mais aussi d'autres outils moins connus.

Cette page décrit comment on peut utiliser Gource pour générer des vidéos rétrospectives sur les contributions au site (voir un exemple sur la rétrospective 2022).

C'est un outil qui est connu et largement utilisé dans différents projets (voir ici l'exemple de MapServer). Dans la communauté géomatique, on a régulièrement la vidéo retraçant les contributions à OpenStreetMap sur une fenêtre spatio-temporelle. A titre d'expérience personnelle, je l'avais utilisé pour retracer le tavail de développement sur le plugin QGIS d'Isogeo : https://www.youtube.com/watch?v=URoH0osLY_4.

Prérequis#

  • avoir un ordinateur qui dispose d'une bonne carte graphique
  • avoir cloné la dernière version du dépôt du site web
  • vérifier que tous les contributeurs ont bien un seul nom (en exécutant git shortlog -nse et en complétant le fichier .mailmap en conséquence)
  • avoir du temps devant soi (ou un double écran)

Installation#

Note

L'installation sur Windows est plutôt facile de mémoire (enfin celle de ffmpeg semble un peu exotique), donc je n'en parle pas ici.

Sur une distribution basée sur Debian (Ubuntu 22.04 à date) :

Il se trouve que la version disponible dans les dépôts officiels est (à date) la 0.51. Il est préférable d'utiliser la dernière version (0.54 à date) depuis les sources.

Dépendances#

On installe d'abord les dépendances requises pour la compilation :

sudo apt install ffmpeg
sudo apt install libsdl2-dev libsdl2-image-dev libpcre2-dev libfreetype6-dev libglew-dev libglm-dev libboost-filesystem-dev libpng-dev libtinyxml-dev

Téléchargement#

On définit la version que l'on souhaite :

GOURCE_VERSION=0.54

On télécharge et extrait :

wget https://github.com/acaudwell/Gource/releases/download/gource-${GOURCE_VERSION}/gource-${GOURCE_VERSION}.tar.gz -O /tmp/gource.tar.gz
tar xvfz /tmp/gource.tar.gz --directory /tmp

Compilation#

On lance la configuration préalable puis la compilation :

cd /tmp/gource-${GOURCE_VERSION}
./configure
make
sudo make install

On vérifie que l'installation s'est bien déroulée :

gource --help

On nettoie l'environnement de compilation :

sudo apt remove libpcre2-dev libfreetype6-dev libglm-dev libboost-filesystem-dev libpng-dev libtinyxml-dev

Configuration#

A partir de maintenant, les commandes suivantes sont à exécuter dans le dossier du dépôt Git local du site Geotribu.

Télécharger le logo taillé pour la vidéo :

wget https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_tipi_seul_carre.png -O geotribu_logo_tipi_seul_carre.png

Fichier gource.ini#

On stocke les paramètres dans un fichier pour avoir une commande plus lisible et pouvoir jouer sur les paramètres plus facilement.

Fichier de configuration gource.ini
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
[display]
fullscreen=true
output-framerate=60
output-ppm-stream=/tmp/geotribu_website_git_history.ppm
viewport=1280x720

[gource]
auto-skip-seconds=1
camera-mode=track
date-format=%B %Y
disable-progress=true
frameless=true
hide=mouse,progress
highlight-dirs=true
highlight-users=true
key=true
logo=geotribu_logo_tipi_seul_carre.png
path=.
seconds-per-day=1
start-date=2023-01-01
stop-at-end=true
title=Contributions au contenu de Geotribu

Show time !#

icône globe video

Allez, on a tout ce qu'il faut, c'est parti pour produire la vidéo ! Concrètement, on lance la commande qui va lancer l'animation en plein écran, filmer l'écran et encoder/compresser le tout dans un fichier mp4.

gource --load-config gource.ini -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset fast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 geotribu_history.mp4

Décortiquons :

  1. --load-config gource.ini: on charge les paramètres de configuration.
  2. -o -: cela indique à Gource de rediriger la sortie vers la sortie standard (stdout) au lieu d'écrire directement dans un fichier. La sortie sera ensuite utilisée comme entrée pour la commande suivante, ici ffmepg.
  3. |: C'est le symbole de tube (pipe) qui prend la sortie de la première commande (gource) et la transmet à la deuxième commande (ffmpeg).
  4. ffmpeg: c'est la bibliothèque de traitement multimédia qu'on utilise pour encoder la vidéo dans un fichier
  5. -y: écraser automatiquement les fichiers de sortie existants sans poser de questions.
  6. -r 60: débit d'images de sortie (60 images par seconde dans ce cas).
  7. -f image2pipe: on indique le format d'entrée, qui est une série d'images en flux (image2pipe).
  8. -vcodec ppm: codec vidéo utilisé pour le flux d'entrée, qui est PPM (Portable Pixel Map)
  9. -i -: on indique à ffmpeg de prendre l'entrée depuis la sortie standard (stdout) de la commande précédente (gource).
  10. -vcodec libx264: codec vidéo de sortie, qui est libx264, un codec vidéo largement utilisé pour la compression vidéo.
  11. -preset fast: préréglage de vitesse de la compression vidéo, en choisissant "ultrafast" pour maximiser la vitesse au détriment de la taille du fichier.
  12. -pix_fmt yuv420p: format de pixel de sortie pour la vidéo.
  13. -crf 1: facteur de qualité Constant Rate Factor (CRF) pour la vidéo. Une valeur faible (comme 1) entraînera une meilleure qualité mais un fichier plus volumineux.
  14. -threads 0: on indique à ffmpeg d'utiliser autant de threads que possible pour l'encodage.
  15. -bf 0: on désactive l'utilisation de cadres B (B-frames) pour la compression vidéo.
  16. geotribu_history.mp4: fichier de sortie qui contiendra la vidéo finale.

Ressources#


  1. étape où un contributeur propose d'intégrer ses modifications dans le socle principal du projet. Voir la documentation de GitHub

Commentaires