{"id":1643,"date":"2022-01-08T21:04:03","date_gmt":"2022-01-08T20:04:03","guid":{"rendered":"https:\/\/hannes.enjoys.it\/blog\/?p=1643"},"modified":"2022-01-28T21:19:37","modified_gmt":"2022-01-28T20:19:37","slug":"von-wegen-lisbeth-bitch-als-slitscan","status":"publish","type":"post","link":"https:\/\/hannes.enjoys.it\/blog\/2022\/01\/von-wegen-lisbeth-bitch-als-slitscan\/","title":{"rendered":"Von Wegen Lisbeth &#8211; B*tch als Slitscan"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"256\" src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/title.jpg\" alt=\"\" class=\"wp-image-1647\" srcset=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/title.jpg 960w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/title-300x80.jpg 300w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/title-768x205.jpg 768w, https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/title-624x166.jpg 624w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><figcaption>Ausschnitt eines resultierenden Bildes<\/figcaption><\/figure>\n\n\n\n<p>Das Lied <em>Von Wegen Lisbeth &#8211; <s>Bitch<\/s><\/em> hat ein verr\u00fccktes Musikvideo, wo sich die Kamera in einer chaotischen Szene scheinbar um sich selbst dreht, w\u00e4hrend im Hintergrund jemand von links nach rechts l\u00e4uft.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Von Wegen Lisbeth - Bitch (Offizielles Video)\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/URKEvZxdgZQ?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Ich hab da mal was beklopptes mit gemacht&#8230;: Eine Transformation des Videos im <a href=\"https:\/\/en.wikipedia.org\/wiki\/Slit-scan_photography\">Slitscan<\/a>-Stil. Angefangen 2019, und jetzt endlich mal richtig gerendert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kochrezept\">Kochrezept<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Extrahiere die Videoframes: 5621 Frames mit einer Aufl\u00f6sung von 1920&#215;1080 Pixeln<\/li><li>Schneide jeden der Frames in einzelne 1&#215;1080 gro\u00dfe Streifen: 5621x der linkste Streifen, 5621x der zweitlinkste Streifen und  so weiter.<\/li><li>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\u00f6sung von 5621&#215;1080 Pixeln<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"184\" style=\"aspect-ratio: 960 \/ 184;\" width=\"960\" controls src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/slice-animation-left-most-pixel.smallfast.webm\"><\/video><figcaption>Hier sieht man, wie sich eins der Bilder aus den einzelnen Pixelstreifen der Frames zusammensetzt<\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Setze die resultierenden Bilder als Video zusammen: Video in 5621&#215;1080 Aufl\u00f6sung und 1920 Frames<\/li><\/ul>\n\n\n\n<p>Ich hab&#8217;s mit ffmpeg, graphicsmagick und einem Bash-Skript gemacht. Super ineffizient, aber sehr effektiv ;)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"resultat\">Resultat<\/h2>\n\n\n\n<p>Hier in klein, der Link unten f\u00fchrt zur &#8220;Vollversion&#8221;. Es wabbelt alles bisschen rum, weil die Kamera nicht in gleichbleibender Geschwindigkeit bewegt wurde, oder so \u00e4hnlich.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"92\" style=\"aspect-ratio: 960 \/ 92;\" width=\"960\" controls src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/slices_reversed_doublewidth_x265_13slow_audio_vstretched_small.webm\"><\/video><\/figure>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"610\" style=\"aspect-ratio: 960 \/ 610;\" width=\"960\" controls src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/clip-fast-960fps.webm\"><\/video><\/figure>\n\n\n\n<p>Ein so gro\u00dfes Video kann man nirgendwo einfach hosten oder vern\u00fcnftig ansehen (oder?), praktischerweise gibt es das <a href=\"https:\/\/web.archive.org\/http:\/\/wiki.gigapan.org\/creating-time-machines\">Gigapan Time Machine<\/a>-Projekt, was auch Google f\u00fcr ihre <a href=\"https:\/\/earthengine.google.com\/timelapse\/\">Timelapse<\/a>-Funktion nutzt. Damit kann man die Bilder nehmen und wie eine animierte Webkarte ansehbar machen, mit Zoom und Pan und einigerma\u00dfen effizientem Datenzugriff. Leider ist das Tool veraltet, nicht mehr in Entwicklung und macht es praktisch unm\u00f6glich die Videoparameter selbst zu tweaken.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Volle Aufl\u00f6sung: <a href=\"https:\/\/hannes.enjoys.it\/stuff\/lisbeth-slitscan\/view.html\"><strong>https:\/\/hannes.enjoys.it\/stuff\/lisbeth-slitscan\/view.html<\/strong><\/a><\/p><cite>Achtung, ggf. hoher Datenverbrauch<\/cite><\/blockquote>\n\n\n\n<p>PS: (Ich hab das Resultat vertikal gestaucht, damit die Proportionen besser passen. Und es l\u00e4uft r\u00fcckw\u00e4rts, weil damit die Zeit der meisten Bewegungen passt. Ziemlicher Brainfuck.)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ha\">H\u00e4?!<\/h2>\n\n\n\n<p>Joa, schwer zu verstehen, was hier passiert. Ein paar schicke Diagramme w\u00fcrden helfen (welcher Pixelstreifen geht wohin und was wurde wie zusammengesetzt), aber das ist mir zu zeitaufwendig. Daher nur ein paar Denkanst\u00f6\u00dfe, vielleicht helfen die:<\/p>\n\n\n\n<p>Das originale Video hat 5621 Frames in 1920&#215;1080.<br>Dieses Video hat 1920 Frames in 5621&#215;1080.<\/p>\n\n\n\n<p>Die Dame mit dem Tuch am Anfang ist etwa bis Frame 750 im originalen Video sichtbar.<br>Im transformierten Video ist sie nie weiter als etwa 750 Pixel vom linken Bildrand entfernt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"als-3d-volumen-punktwolke\">Als 3D Volumen\/Punktwolke<\/h2>\n\n\n\n<p>Weil warum auch nicht hab ich das ganze noch als dreidimensionales Etwas aufbereitet. Jedes Frame des Videos besteht aus 1920&#215;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\u00e4\u00dfige und &#8220;volumin\u00f6se&#8221; Punktwolke, also kann man entsprechende Tools missbrauchen. Ich hab die Daten mal in das fantastische <a href=\"https:\/\/github.com\/potree\/potree\">Potree<\/a> gesteckt:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"768\" style=\"aspect-ratio: 1024 \/ 768;\" width=\"1024\" controls src=\"https:\/\/hannes.enjoys.it\/blog\/wp-content\/uploads\/potree.mp4\"><\/video><figcaption>Nein ich hatte die vertikale Achse nicht vertauscht, der Mauszeiger ist bei mir immer so!!!!!1<\/figcaption><\/figure>\n\n\n\n<p>Es sind 11 Milliarden Punkte und mit 40 Gigabyte etwas zu gro\u00df, als dass ich es hosten m\u00f6chte. Wer es nachbauen will: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for file in slices_reversed\/*.png  # 0001.png, 0002.png, ...\ndo\n\tn=$(echo \"${file}\" | grep -Eo '&#91;0-9]+' | sed 's#^0*##')  # frame number from filename\n\tconvert \"${file}\" sparse-color: | tr \" \" \"\\n\" | \\\n        sed 's\/srgb\/\/g' | sed 's\/&#91;()]\/\/g' | \\\n        awk -F ',' -v OFS=',' -v n=\"$n\" '{ print $1,-n-1,$2,$3,$4,$5 }' \\\n        # image to csv, insert frame number-1 so we get 0, flip y \\\n        # TODO flip y seems to have been buggy :(\ndone > images.xyzrgb.csv<\/code><\/pre>\n\n\n\n<p>Das 250GB-CSV wiederum mit <code>split<\/code> nach Belieben splitten, da <code>txt2las<\/code> bei mir irgendwie nicht mehr als 2^64 Punkte aufeinmal vertragen wollte und dann die Teile<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>txt2las -parse xyzRGB -i \"${file}\" -set_scale 1 1 1 -o \"${file}.laz\" &amp;&amp; lasinfo -repair_bb \"${file}.laz\"<\/code><\/pre>\n\n\n\n<p>Anschlie\u00dfend die .laz-Dateien mit <a href=\"https:\/\/github.com\/potree\/PotreeConverter\">PotreeConverter<\/a> zum Ansehen aufbereiten (Achtung, mit dem default Poisson-Sampler fliegt es immer bei 76% auseinander, wohl wegen der verr\u00fcckt regul\u00e4ren Struktur der Punktwolke):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PotreeConverter ${chunk}.laz -o ${chunk}_potree --encoding BROTLI -p ${chunk} -m random<\/code><\/pre>\n\n\n\n<p>Die fertigen Teile dann in einen Viewer stecken, z. B. in das <a href=\"https:\/\/github.com\/potree\/potree\/blob\/develop\/examples\/multiple_pointclouds.html\">multiple_pointclouds.html<\/a>-Beispiel und Spa\u00df haben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"disclaimer\">Disclaimer<\/h2>\n\n\n\n<p>Dies ist ein Kunstprojekt und ich hoffe damit es ist <a href=\"https:\/\/www.youtube.com\/watch?v=Y-B0lXnierw\">von etwas wie der Kunstfreiheit gedeckt<\/a>. Falls nicht: Eine kurze Mail (hannes \u00e4t enjoys dotter it) und ich l\u00f6sche es von der Seite.<\/p>\n\n\n\n<p>\u2764\ufe0f <a href=\"https:\/\/www.vonwegenlisbeth.de\/\">Von Wegen Lisbeth<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Lied Von Wegen Lisbeth &#8211; Bitch hat ein verr\u00fccktes Musikvideo, wo sich die Kamera in einer chaotischen Szene scheinbar um sich selbst dreht, w\u00e4hrend im Hintergrund jemand von links nach rechts l\u00e4uft. Ich hab da mal was beklopptes mit gemacht&#8230;: Eine Transformation des Videos im Slitscan-Stil. Angefangen 2019, und jetzt endlich mal richtig gerendert. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[],"class_list":["post-1643","post","type-post","status-publish","format-standard","hentry","category-image-processing"],"_links":{"self":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/comments?post=1643"}],"version-history":[{"count":17,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1643\/revisions"}],"predecessor-version":[{"id":1686,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/posts\/1643\/revisions\/1686"}],"wp:attachment":[{"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/media?parent=1643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/categories?post=1643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hannes.enjoys.it\/blog\/wp-json\/wp\/v2\/tags?post=1643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}