2

Von Wegen Lisbeth – B*tch als Slitscan

 2 years ago
source link: https://hannes.enjoys.it/blog/2022/01/von-wegen-lisbeth-bitch-als-slitscan/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Von Wegen Lisbeth – B*tch als Slitscan

Ausschnitt eines resultierenden Bildes

Das Lied Von Wegen Lisbeth – Bitch hat ein verrücktes Musikvideo, wo sich die Kamera in einer chaotischen Szene scheinbar um sich selbst dreht, während im Hintergrund jemand von links nach rechts läuft.

Ich hab da mal was beklopptes mit gemacht…: Eine Transformation des Videos im Slitscan-Stil. Angefangen 2019, und jetzt endlich mal richtig gerendert.

Kochrezept

  • Extrahiere die Videoframes: 5621 Frames mit einer Auflösung von 1920×1080 Pixeln
  • Schneide jeden der Frames in einzelne 1×1080 große Streifen: 5621x der linkste Streifen, 5621x der zweitlinkste Streifen und so weiter.
  • Setze je ein Bild je Streifen zusammen, als erstes ganz links den linksten Streifen des ersten Frames, direkt daneben den linksten Streifen vom zweiten Frame, dann den vom dritten, etc.: 1920 Bilder mit einer Auflösung von 5621×1080 Pixeln

Hier sieht man, wie sich eins der Bilder aus den einzelnen Pixelstreifen der Frames zusammensetzt

  • Setze die resultierenden Bilder als Video zusammen: Video in 5621×1080 Auflösung und 1920 Frames

Ich hab’s mit ffmpeg, graphicsmagick und einem Bash-Skript gemacht. Super ineffizient, aber sehr effektiv ;)

Resultat

Hier in klein, der Link unten führt zur “Vollversion”. Es wabbelt alles bisschen rum, weil die Kamera nicht in gleichbleibender Geschwindigkeit bewegt wurde, oder so ähnlich.

Ein so großes Video kann man nirgendwo einfach hosten oder vernünftig ansehen (oder?), praktischerweise gibt es das Gigapan Time Machine-Projekt, was auch Google für ihre Timelapse-Funktion nutzt. Damit kann man die Bilder nehmen und wie eine animierte Webkarte ansehbar machen, mit Zoom und Pan und einigermaßen effizientem Datenzugriff. Leider ist das Tool veraltet, nicht mehr in Entwicklung und macht es praktisch unmöglich die Videoparameter selbst zu tweaken.

Volle Auflösung: https://hannes.enjoys.it/stuff/lisbeth-slitscan/view.html

Achtung, ggf. hoher Datenverbrauch

PS: (Ich hab das Resultat vertikal gestaucht, damit die Proportionen besser passen. Und es läuft rückwärts, weil damit die Zeit der meisten Bewegungen passt. Ziemlicher Brainfuck.)

Joa, schwer zu verstehen, was hier passiert. Ein paar schicke Diagramme würden helfen (welcher Pixelstreifen geht wohin und was wurde wie zusammengesetzt), aber das ist mir zu zeitaufwendig. Daher nur ein paar Denkanstöße, vielleicht helfen die:

Das originale Video hat 5621 Frames in 1920×1080.
Dieses Video hat 1920 Frames in 5621×1080.

Die Dame mit dem Tuch am Anfang ist etwa bis Frame 750 im originalen Video sichtbar.
Im transformierten Video ist sie nie weiter als etwa 750 Pixel vom linken Bildrand entfernt.

Als 3D Volumen/Punktwolke

Weil warum auch nicht hab ich das ganze noch als dreidimensionales Etwas aufbereitet. Jedes Frame des Videos besteht aus 1920×1080 farbigen Pixeln, wenn man alle Frames hintereinander reiht, entsteht ein Kubus 1920x1080x5621 Pixeln. Und das ist im Grunde nichts anderes als eine sehr regelmäßige und “voluminöse” Punktwolke, also kann man entsprechende Tools missbrauchen. Ich hab die Daten mal in das fantastische Potree gesteckt:

Nein ich hatte die vertikale Achse nicht vertauscht, der Mauszeiger ist bei mir immer so!!!!!1

Es sind 11 Milliarden Punkte und mit 40 Gigabyte etwas zu groß, als dass ich es hosten möchte. Wer es nachbauen will:

for file in slices_reversed/*.png  # 0001.png, 0002.png, ...
do
	n=$(echo "${file}" | grep -Eo '[0-9]+' | sed 's#^0*##')  # frame number from filename
	convert "${file}" sparse-color: | tr " " "\n" | \
        sed 's/srgb//g' | sed 's/[()]//g' | \
        awk -F ',' -v OFS=',' -v n="$n" '{ print $1,-n-1,$2,$3,$4,$5 }' \
        # image to csv, insert frame number-1 so we get 0, flip y \
        # TODO flip y seems to have been buggy :(
done > images.xyzrgb.csv

Das 250GB-CSV wiederum mit split nach Belieben splitten, da txt2las bei mir irgendwie nicht mehr als 2^64 Punkte aufeinmal vertragen wollte und dann die Teile

txt2las -parse xyzRGB -i "${file}" -set_scale 1 1 1 -o "${file}.laz" && lasinfo -repair_bb "${file}.laz"

Anschließend die .laz-Dateien mit PotreeConverter zum Ansehen aufbereiten (Achtung, mit dem default Poisson-Sampler fliegt es immer bei 76% auseinander, wohl wegen der verrückt regulären Struktur der Punktwolke):

PotreeConverter ${chunk}.laz -o ${chunk}_potree --encoding BROTLI -p ${chunk} -m random

Die fertigen Teile dann in einen Viewer stecken, z. B. in das multiple_pointclouds.html-Beispiel und Spaß haben.

Disclaimer

Dies ist ein Kunstprojekt und ich hoffe damit es ist von etwas wie der Kunstfreiheit gedeckt. Falls nicht: Eine kurze Mail (hannes ät enjoys dotter it) und ich lösche es von der Seite.

❤️Von Wegen Lisbeth!

This entry was posted in image-processing on 2022-01-08.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK