Journal Réanimation des tuxeries

Posté par  (site web personnel, Mastodon) . Licence CC By‑SA.
Étiquettes :
12
30
nov.
2025

Sommaire

Je partage avec vous les dix-neuf animations du dessinateur JC ressuscitées du royaume des SWF, sous forme de GIF animés, grâce à un script Bash appelant Ruffle et ImageMagick. En effet, comme le disait Glandos en commentaire de ma seconde étude ArkéoLogique, « c'est un travail pour Ruffle ! », un formidable effort sous licences MIT et Apache 2.0 pour dérouiller les contenus Flash à coups de Rust et WebAssembly.

L'archive contenant les animations GIF est ici jusqu'au 30 décembre. Et pour ceux qui ont manqué un épisode, l'archive originale complète de JC est ici, mais seulement jusqu'au 7 décembre (le fichier est plus gros).

Le script est disponible sur Codeberg sous licence MIT. Pour l'instant, j'ai vraiment la flemme d'en faire un vrai outil avec une gestion d'arguments et une aide, je me suis contenté de coder en dur les répertoires utiles (Ruffle, les SWF, la sortie) et je n'ai pas essayé d'installer Ruffle dans le système. Il faut dire que je n'ai pas l'impression que je vais m'en resservir une seconde fois dans ma vie… Mais voyons maintenant les points intéressants du script.

Ruffle, l'agitateur du web

On peut le tester dans l'onglet demo du site ou l'installer dans son navigateur, mais on peut aussi compiler le dépôt GitHub du projet. On peut alors utiliser Ruffle soit sous forme d'application graphique :

$ cargo run --release --package=ruffle_desktop

soit sous forme d'applications en ligne de commande.

Bon, la compilation du projet fait un peu peur avec ses centaines de dépendances Rust, mais ça se passe bien. J'ai testé sur un vieux PC en Fedora 43. A part Rust, j'ai juste eu à installer le paquet alsa-lib-devel car Ruffle gère le son, en tout cas côté visualisation. Pour l'instant l'exporter ne semble pas gérer le son mais le projet est très actif (environ 40 commits par semaine), peut-être que ça viendra. Et dans nos 19 fichiers SWF, seuls deux comportent du son à ma connaissance : linux-petitanim/linuxpiqueur-son.swf et linux-petitanim/linuxpiqueur-son02.swf.

Ruffle propose plusieurs commandes, en particulier ruffle_scanner qui, avec sa sous-commande scan, scanne un répertoire et ses sous-répertoires à la recherche de fichiers SWF et génère ensuite un fichier CSV très utile avec pleins d'informations (une ligne par fichier SWF) :

cargo run --release --package=ruffle_scanner -- scan "${SWF_DIR}" "${CSV_FILE}"

C'est de plus facile d'itérer sur les lignes d'un CSV :

for line in $(cat "${CSV_FILE}") ; do

et la commande cut permet facilement d'extraire les champs d'un CSV, par exemple ici le framerate de l'animation (colonne 11) :

framerate=$(echo "${line}" | cut -d ',' -f 11)

La commande exporter de Ruffle permet alors d'écrire dans un répertoire de sortie toutes les images de l'animation en PNG à la dimension voulue grâce à un facteur d'échelle :

cargo run --release --package=exporter -- "${SWF_DIR}/${path}" "${OUTPUT_DIR}/${gif_dir}" --silent --frames all --scale ${scale}

ImageMagick ou la magie de Noël

Les GIF animés, ça fleure bon le web des années 90, quand ça clignotait de partout comme un sapin de Noël. Mais c'est justement un format simple, bien documenté, largement supporté par les logiciels actuels (navigateurs, visualiseurs, GIMP…) et compressé sans perte. Il est certes limité à 256 couleurs par image, mais dans le cas présent nous avons affaire à des dessins vectoriels avec des aplats de couleurs en nombre limité (pas de dégradé), donc ça ne pose pas de problème. Enfin, le système de compression LZW était breveté, mais les brevets sont montés au paradis du domaine public depuis belle lurette.

La commande magick permet facilement de prendre une série de PNG et de générer un GIF animé. L'option -delay permet de régler la durée entre deux images, en centièmes de secondes. Il a fallu pour cela récupérer le framerate dans le fichier CSV et faire le calcul avec la commande bc. L'option -loop 0 permet d'obtenir une boucle infinie :

magick -delay ${centiseconds} -loop 0 "${OUTPUT_DIR}/${gif_dir}/*.png" "${OUTPUT_DIR}/${gif_dir}/${name}-big.gif"
magick -delay ${centiseconds} -loop 0 "${OUTPUT_DIR}/${gif_dir}/*.png" -resize 40% "${OUTPUT_DIR}/${gif_dir}/${name}-medium.gif"
magick -delay ${centiseconds} -loop 0 "${OUTPUT_DIR}/${gif_dir}/*.png" -resize 16% "${OUTPUT_DIR}/${gif_dir}/${name}-small.gif"

J'ai utilisé l'option -resize pour obtenir des versions medium et small de chaque GIF. Dans un premier temps, j'avais utilisé Ruffle pour exporter en différentes tailles, mais faire faire le travail par ImageMagick à partir de la version haute résolution permet d'obtenir de petites images avec des contours lissés.

L'homme qui valait 350 millions (de francs)

C'est mon estimation : nous sommes encore loin des trois milliards, sachant qu'il reste 140 fichiers FLA à convertir. La reconstruction de l'homme bionique a à peine commencé. L'opération continue et on entre dans la partie délicate. Le format FLA, c'est le format Flash de travail, propriétaire, à partir duquel on exportait des SWF lisibles par les navigateurs.

Work in progress

Je vais contacter JC pour lui demander s'il se souvient quel logiciel il avait utilisé à l'époque et s'il a encore un vieux numéro de licence qui traîne quelque part. Il y a des chances que ce soit Macromedia Flash 4 (1999). En effet, Ruffle indique que les fichiers sont en SWF version 4 dans le CSV. De plus, le répertoire contenant les dessins de JC contient un fichier linux/muletux.exe, embarquant apparemment son propre Flash Player, et la commande strings --encoding={b,l} muletux.exe me permet de détecter les chaînes « Flash Player 4.0 » et « Copyright (C) 1996-99 Macromedia, Inc. ».

J'ai aussi repéré quelques projets à explorer sur GitHub concernant les FLA et XFL (fichiers non compressés), mais avec moins d'espoir que pour les SWF.

Enfin, le projet étant loin d'être abouti, je n'ai pas encore bien réfléchi à l'archivage de ces fichiers pour les siècles des siècles. Faut-il faire un dépôt sur une forge comme Codeberg ? Ou les déposer sur un site comme Wikimedia Commons ? Un par un :-( ? Quelle est votre opinion ? Avez-vous d'autres idées ?

Pour en savoir plus

  • # Merci

    Posté par  . Évalué à 3 (+1/-0).

    Joli bouleau de restauration !
    Je viens de regarder toutes les animations et elles sont sympathique.
    Par contre, je pense qu’il y a un soucis de délai pour les GIF des T-shirts, ils sont bien trop rapide.

  • # Internet archive

    Posté par  (site web personnel, Mastodon) . Évalué à 4 (+1/-0).

    Enfin, le projet étant loin d'être abouti, je n'ai pas encore bien réfléchi à l'archivage de ces fichiers pour les siècles des siècles. Faut-il faire un dépôt sur une forge comme Codeberg ? Ou les déposer sur un site comme Wikimedia Commons ? Un par un :-( ? Quelle est votre opinion ? Avez-vous d'autres idées ?

    C'est le genre de chose qui a tout à fait sa place chez https://archive.org, je pense?

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.