Datamosh : mode d’emploi

Last updated on 31 janvier 2019

1 – C’est quoi ?

Le datamoshing est le processus de manipulation des données d’un fichier média afin d’avoir, intentionnellement, des erreurs de compression à des fins artistiques.

La technique du datamosh est apparue début année 2000, inspirée par les erreurs des premiers codecs vidéos numériques comme le fameux DivX. Des artistes ont commencé à exploiter ces artefacts de compression et à pirater des fichiers vidéos pour créer des effets… rocambolesques !

Personne ne sait avec exactitude à quand remonte la première utilisation artistique du datamosh, ni de l’origine du mot, mais on peut néanmoins citer des artistes comme Takeshi Murata, Paper Rad, Kris Moyes ou encore David O’Reilly qui ont utilisé cette esthétique durant leurs carrières. L’exemple le plus loin dans le temps que j’ai pu trouver est celui de Owi Mahn & Laura Baginski avec Pastell Kompressor en 2003. Je vous invite à regarder cette sélection qui relate les prémices de cette technique :

Owi Mahn & Laura Baginski – Pastell Kompressor – 2003
David O’Reilly – Venetian Snares – Szamar Madar – 2005
Kris Moyes – The Presets – Are You the One ? – 2005
Takeshi Murata – Untitled (Silver) – 2006
Takeshi Murata – Untitled (Pink Dot) – 2007
Paper Rad et Paul B. Davis – Umbrella Zombie Datamosh Mistake – 2007
David O’Reilly – Compression Reel – 2008
Takeshi Murata – Monster Movie – 2009

Petite parenthèse : Il faut savoir que les combinaisons d’erreurs et d’échecs à but artistique remonte bien avant l’air numérique, à partir des années 60, avec des cinéastes du cinéma structurel comme Paul Sharits, George Landow et Tony Conrad en filmant volontairement hors focus, en intégrant des images vides et en manipulant la pellicule, en parallèle aux experimentations en image-processing, des artistes comme Nam June Paik avec Magnet TV, Joan Jonas avec Vertical Roll, résultat de deux fréquences désynchronisées, Steina et Woody Vasulka et leurs utilisations du synthétiseur vidéo Rutt/Etra… On comprends mieux alors l’intérêt des artistes comme Takeshi Murata pour cette technique.

Très vite, le courant mainstream va s’approprier la technique, notamment Kanye West avec son clip Welcome to Heartbreak (2009), ou encore Leos Carax avec Holy Motors (2012). Pour la petite histoire, on dit que West a vu Pink Dot de Murata dans une galerie d’art (source). Comme pour la plupart des appropriations de la culture underground, la version de West est nettement moins intéressante… même Hollywood s’y mets avec la bande annonce de Man of Steel…

Si tu n’ouvres pas ce lien, un bébé panda sera sauvé.
Leos Carax – Holy Motors – 2012
Man of Steel – 2013


2 – I, P et B frames ou GOP

Pour se lancer dans le datamosh, il faut comprendre les I-, les P- et les B-frames. Une séquence vidéo numérique est composé de ces différents types de frames, réunis dans un groupe d’image, alias GOP (Group Of Pictures). Le I-frame (intra-frame), aussi appelé Keyframe, est une représentation complète d’un frame de la vidéo, avec toutes les informations concernant la chrominance et la luminance, une image complète. le P-frame (predicted-frame) informe plutôt le lecteur vidéo des différences entre deux I-frames, ce qui permet d’avoir moins de redondance temporelle. Le B-frames (bi-direction predictive frame) peut sauver autant d’espace en utilisant la différence entre le frame actuel avec son précédent et son prochain.

Source : https://en.wikipedia.org/wiki/Video_compression_picture_types

En théorie, une vidéo peut être entièrement composé de I-frame, c’est exactement ce que fais le codec ProRes (et aussi la pellicule des films !) , où aucun frame ne dépend de l’autre, d’où son utilité seulement pendant le montage, mais lors de la distribution, on utilise plutôt un schéma de compression « Group Of Pictures », pierre angulaire du H.264.

Exemple de GOP – Source : https://www.tcs.ifi.lmu.de/teaching/ws-2016-17/code/background-image-video-compression

Exemple (Citizen Kane, O.Welles, 1941) :

Comparant les deux images d’un même plan fixe à quelques frames d’intervalles. Si on applique une différence entre les deux, voici ce qu’on obtient :

P-Frame

Seulement le déplacement des personnages et quelques changements mineurs dans le décor dû à un changement de mise au point. Le reste, en noir, n’a absolument pas bougé.

C’est donc, en partie, sur cela que le principe de la compression repose : plus le ratio de la taille entre le I et le P est grand, plus la taille du fichier est petite.

S’il y a des changements importants entre les images, par exemple lors d’un mouvement de caméra comme un traveling, un pano… Les changements vont être plus important, donc les images clés et les images prédictives vont avoir quasiment le même poids et le codec pourrait avoir du mal à bien compresser les images, ce qui peut ralentir la vitesse de lecture car il n’arrive plus à lire à la bonne vitesse les images sur le disque… ce qu’on appel le lagging.


3 – Détournement des i-frames

Maintenant, supposons qu’on vienne corrompre, enlever ou remplacer un I-frame, le P-frame va se basé sur le mauvais I-frame pour former l’image. C’est le datamosh !

le décodeur n’aura plus d’image de reference pour se basé dessus, le P va se basé sur une vieille image I qui a déjà été tronqué par des centaines d’autres P… bref, un vrai massacre !


4 – Les outils

Le logiciel le plus utilisé (et peut-être le premier) dans le monde du datamoshing c’est Avidemux, mais ce dernier à tendance à être très instable et il faut avoir beaucoup de nerf pour l’utiliser. Il y a beaucoup de technique qu’on peut appliquer pour créer du datamosh : ouvrir le fichier vidéo avec un éditeur hexadécimal et remplacer des valeurs, créer des fake glitch avec des plug-ins sur After Effects ou des presets sur Premiere Pro… Ici je vous propose de créer du vrai glitch avec des outils gratuits en passant par le terminal.

Ce dont on aura besoin :

ffmpeg https://www.ffmpeg.org/ : C’est un convertisseur de vidéo et audio très puissant, hautement configurable, open source et gratuit. Il ne s’exécute que via le terminal. J’y consacre pas mal d’article dans mon blog, dont ce tutorial.

AVIglitch https://ucnv.github.io/aviglitch/ : c’est lui qui va enlever les keyframes et appliquer la magie !

Moshy https://github.com/wayspurrchen/moshy : bien qu’il fait aussi du datamosh, on va s’en servir seulement pour appliquer l’effet et rendre le fichier corrompu lisible.

AVIglitch et Moshy utilisent Ruby. Si vous ne l’avez pas ou vous ne savez pas ce que s’est, pas de panique ! on verra comment installer tout cela.


5 – L’installation

Note : Ces étapes détaillées sont destinées à un ordinateur équipé de MacOS… et Linux aussi à peu de chose près, comme l’utilisation d’un autre gestionnaire de paquet…etc.

Si vous n’avez jamais utilisé le terminal… hé ben c’est le moment ou jamais ! Il y a un début à tout et il ne faut pas en avoir peur ! Il n’y a pas longtemps, bien avant l’avènement des interfaces, l’interaction avec un ordinateur se faisait uniquement à travers les lignes de commandes. Malgré la prévalence des interfaces graphiques, les lignes de commandes jouent toujours un rôle important dans l’informatique, notamment dans les serveurs. En plus, ca vous donnera indéniablement un côté geek !

5.1 : Homebrew et ffmpeg :

Tout d’abord, on va installer ffmpeg. Pour cela, vaut mieux l’installer en passant par un gestionnaire de paquet, ca va nous faciliter la vie…

Ouvrir le terminal et taper ceci :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Si c’est la première fois que vous allez utiliser le terminal sur MacOS, vous allez peut être avoir besoin de xCode, de taper votre mot de passe… allez-y sans crainte !

Maintenant, vous allez installer ffmpeg :

brew install ffmpeg

une fois l’installation terminée, taper ffmpeg dans le terminal pour s’assurer que tout a bien fonctionner.

5.2 : Ruby, Moshy et AVIglitch :

Vu que les deux autres petits programmes (Moshy et AVIglitch) utilisent Ruby (un language de programmation) et on va utiliser le gestionnaire de paquet brew encore fois !

brew install ruby

Excellent ! Maintenant passons à l’installation de Moshy et AVIglitch :

gem install moshy

et

gem install aviglitch

5.3 Bonus : Youtube-dl

Si jamais vous voulez récupérer une vidéo depuis YouTube, vous pouvez installer Youtube-dl, toujours dans un esprit de fair use !

brew install youtube-dl

6 – L’utilisation

6.1 : Terminal

On va utiliser uniquement le terminal pour manipuler nos fichiers. Bien qu’on peut faire une partie des tâches avec la souris et l’interface, c’est bien plus clean et cool de le faire avec le terminal, vous ne trouvez pas ?

la commande cd va nous permettre de nous promener dans les répertoires et ls de lister les fichiers. Taper ls, vous allez voir apparaitre des dossiers comme Desktop, Downloads, Pictures, Music… supposons qu’on veut créer un répertoire dans le desktop, on va tout d’abord y accéder. faites cd Desktop. Notez qu’il est important dans le terminal de respecter la casse.

Maintenant, on va créer un répertoire dans le desktop pour stocker nos vidéos et les exportations. faites :

mkdir datamosh && cd $_

Ceci va créer un répertoire qu’on va nommé datamosh et on va demander au terminal d’y accéder.

Si jamais vous voulez retourner d’un répertoire, faites :

cd ..

6.2 : Youtube-dl

Si vous avez des vidéos que vous voulez manipuler, mettez le dans ce répertoire et vous pouvez sauter jusqu’à l’étape 6.3. Si vous voulez télécharger une vidéo de Youtube, voici les commandes à taper :

youtube-dl -F "LeLienDeVotreVideo"

le -F va nous permettre de choisir la résolution qu’on veut. Voici la liste de tout les formats et tailles disponible :

Je vais, par exemple, télécharger la vidéo avec la plus haute résolution sans son, le numéro 313.

youtube-dl -f 313 "LeLienDeVotreVideo"

et voilà ! la vidéo devrait apparaître dans notre répertoire datamosh. Faites ls pour en être sûr.

6.3 : Conversion en AVI

Maintenant, on va préparer notre vidéo pour le grand massacre.

le codec h264, VP9… et le format mp4 n’aiment pas vraiment qu’on touche a leurs structures… pas le avi ! lui, ça ne le dérange pas si vous altérer des frames au plein milieu de la vidéo… Justement, ça nous arrange !

grace à ffmpeg, on va convertir notre fichier en .avi avec le codec libxvid, l’ancêtre du h264, qui a connu lui aussi ses heures de gloire, et on va lui spécifier quelques paramètres…

ffmpeg -i VotreVideo -c:v libxvid -qscale 1 -g 150 -me_method epzs -bf 0 -mbd 0 -c:a copy VideoOut.avi

-c:v libxvid : conversion avec ce codec.

-qscale 1 : choisir la qualité en rapport avec le bitrate. 0 étant la meilleure qualité/fichier volumineux, 31 étant la mauvaise/fichier réduit. Pour les familiers du h264, c’est un peu comme le -crf.

-g 150 : vous vous rappelez des Groups of Pictures ? on va determiner sa taille, 100 c’est 1 keyframe chaque 100 frames. Sur une vidéo de 30 images/secondes, c’est équivaut à 1 keyframe chaque 3 secondes à peu près. C’est LE paramètre a changer si vous voulez des résultats différents !

-me_method epzs : estime le motion tracking avec la valeur par défaut.

-bf 0 : pas de b-frame !

-mbd 0 : concerne le « macroblock decision algorithm », 0 étant la meilleure qualité.

-c:a copy : ceci va juste copier le stream audio si jamais il est présent.

VideoOut.avi : notre fichier final.

Rien ne vous empêche de jouer avec ces paramètres et de faire des essais… mais n’oubliez pas le paramètre le plus important : celui du Groups of Pictures ! (-g).

6.4 : datamosh

Maintenant, passons au chose sérieuse… appliquons un peu de corruption magique sur notre vidéo .avi :

datamosh VideoOut.avi -o VideoDatamosh.avi

et… c’est tout ! ou presque !

Vous pouvez déjà voir le résultat avec vlc… mais le fichier est encore corrompu et vaut mieux fixer tout cela. C’est là où Moshy intervient :

moshy -m bake -i VideoDatamosh.avi -o Video1.avi

il ne reste plus qu’à convertir le fichier en H264 et .mp4 pour diffuser cet oeuvre artistique. Je vous promet que cela va être la dernière étape !

ffmpeg -i Video1.mp4 -c:v libx264 -crf 23 -c:a copy VideoFinal.mp4

-c:v libx264 : on va utiliser le codec H.264

-crf 23 : 0 étant la meilleure qualité/fichier volumineux, 51 étant la plus mauvaise qualité/fichier réduit.

Si vous avez fait toutes ces étapes, je vous nomme Roi/Reine du datamoshing ! et voici le résultat :

mais attendez un peu… et que faire si j’ai 100 ou 1000 vidéos à traiter ainsi ? dois-je aussi taper les commandes une à une ? et si on automatisait tout cela ?


7 – Script bash

J’ai concocté pour vous un petit script qui va prendre tout les fichiers .mp4 d’un répertoire, prendre comme argument une valeur à appliquer dans le -g qu’on a vu un peu plus tôt et faire tout le boulot à notre place ! je sens que vous allez commencer à aimer le terminal !

Si vous êtes un enthousiaste de bash, voici le code source :

#!/bin/bash

tempfoo=`basename $0`
TMPFILE=`mktemp /tmp/${tempfoo}.XXX`
TMPFILE1=`mktemp /tmp/${tempfoo}.XXX`


for i in *.mp4;

do

	echo "||| Datamosh... conversion vers AVI avec -g $1 |||";
	ffmpeg -i "$i" -c:v libxvid -q:v 1 -g $1 -me_method epzs -bf 0 -mbd 0 -c:a copy -y $TMPFILE.avi;
	
	echo "||| Datamosh... en cours ! |||";    
	datamosh $TMPFILE.avi -o $TMPFILE1.avi;
	moshy -m bake -i $TMPFILE1.avi -o $TMPFILE.avi; 
	
	echo "||| Datamosh... conversion vers mp4 |||";   
	ffmpeg -i $TMPFILE.avi -strict -2 -y "${i%.*}-datamosh.mp4" ;
	
	clear;
	echo "||| Datamosh... Done! |||"

done

Ce code fait exactement toutes les étapes vu précédemment, avec l’avantage de créer des fichiers temporaires entre les étapes dans le répertoire /tmp, ce dernier s’efface tout seul à chaque redémarrage du MacOS et ne gardera que la vidéo original ET la vidéo « datamoshé ».

Si vous voulez le lancer sur votre machine, voici les étapes :

1 – télécharger le fichier ici

2 – changer les permissions du fichier afin qu’il s’exécute correctement sur votre machine, pour cela, placer-le dans le répertoire de votre choix, à la source des vidéos que vous voulez traiter, ouvrir le terminal et naviguer jusqu’au répertoire et faites :

sudo chmod a+x datamosh.sh

Comme cela, vous allez avoir le droit d’exécuter ou modifier le fichier. Ensuite, pour lancer le script, faites ceci :

./datamosh.sh 100

100 correspond au -g du Groups of Pictures vu plus haut.


C’est certainement l’un des effets le plus organique et imprédictible dans la manipulation d’une vidéo. Bien qu’on est pas totalement en contrôle, on peut être parfois surpris du résultat ! Je vous laisse vous amuser avec cela et n’hésitez pas à m’envoyer vos travaux que je publierais sur cette page à titre d’exemple pour les générations futures des manipulateurs de pixel.

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.