Fraktalanimationen mit Xaos erstellen

Das ist ja geil, wie du deine Fraktalzooms schnell an der Kommandozeile machst. Kannst du mir das Programm geben?

Ja, das ist geil, denn da sind die Konzepte unixoider Betriebssysteme so richtig an der Arbeit, um mir die leidige und fehleranfällige Arbeit abzunehmen.

Das »Programm« ist ein einfaches Shellskript, das eine Menge fertiger Arbeit anderer Menschen nutzbar macht. Die Länge des unterlegten Musikstückes bestimme ich mit Sox, was übrigens generell ein unentbehrliches Tool für Menschen ist, die öfter einmal Sounddateien zu konvertieren haben und lieber dem Rechner bei der Arbeit zuschauen als sich die Finger wund zu klicken. Die einzelnen Bilder der Animation lasse ich mit Xaos berechnen, damit lege ich auch (schön klickig) den Start- und Endpunkt der Reise durch Fraktalia fest. Zum Glück kann man Xaos skripten, so dass dieser Teil der Arbeit bereits erledigt ist – sonst müsste ich für jedes Bild eine einzelne Parameterdatei erzeugen. Abschließend setze ich aus den Bildern und der Musik ein Video mit FFmpeg zusammen, einem geradezu mörderischen, kleinen Tool, dessen man-page mir jedes Mal aufs Neue zeigt, dass ich überhaupt nichts von Videoformaten zu verstehen scheine.

Mir wurde es irgendwann zu lästig, diesen Vorgang immer wieder händisch zu machen (und dabei auch immer wieder einmal eine neue Fehlerquelle zu finden), und deshalb habe ich mein Shellskript geschrieben. Dieses sieht für »normale« Menschen auf dem ersten Blick ein bisschen gruselig aus, was daran liegt, dass es sich um ein Programm handelt, das ein Programm erzeugt – dabei kommt es nicht gerade zur hübschesten Syntax. Dieses Skript sieht so aus (ich habs eben etwas aufgeräumt):

#!/bin/sh
########################################################################
#
# zoomskript
# $Id: zoomskript,v 1.3 2012/09/22 15:38:03 elias Exp $
#
# Aus einer Audio-Datei (diese gibt die Länge vor), zwei gespeicherten
# Parameterdateien von Xaos und einem Namen wird ein Skript erzeugt, das
# einen Fraktalzoom berechnet. Ich habe dabei so häufig Fehler gemacht,
# dass ich diese Aufgabe lieber an einen Computer übergebe. Der kann
# das nämlich besser als ich... 
#
# Alle vier Parameter sind erforderlich.
#
########################################################################

# Paranoiazeilen
PATH=/bin:/usr/bin
SOX_OPTS=""

# Parameter lesen, Kurzinfo bei falscher Anzahl 
case $# in
    4) 	xaosfrom="$1"
        xaosto="$2"
        music="$3"
        zoomname="$4"
        ;;
    *) 	echo "Aufruf: `basename $0` [xaos-from] [xaos-to] [audiofile] [name]"
        echo
        echo "* Schreibt zwei Dateien: [name].xpf und [name].sh"
        echo "* [name].xpf ist die Zoom-Definition für xaos"
        echo "* Filter und Palette werden aus [xaos-to] genommen"
        echo "* [name].sh ist das Shellskript, das das Video rendert"
        exit
        ;;
esac

# Die Namen der erzeugten Dateien
xaoszoom="$zoomname.xpf"
xaosskript="$zoomname.sh"

# Ein paar Zeilen langweiliger Fehlerbehandlung
if [ ! -f "$xaosfrom" ]
then
    echo >&2 "Keine Startpunkt-Definition ’$xaosfrom’"
    exit 1
fi
if [ ! -f "$xaosto" ]
then
    echo >&2 "Keine Endpunkt-Definition ’$xaosto’"
    exit 1
fi
if [ ! -f "$music" ]
then
    echo >&2 "Keine Audiodatei ’$music’"
    exit 1
fi
if [ -f "$xaoszoom" ]
then
    echo >&2 "Ausgabedatei ’$xaoszoom’ existiert bereits"
    exit 1
fi
if [ -f "$xaosskript" ]
then
    echo >&2 "Ausgabeskript ’$xaosskript’ existiert bereits"
    exit 1
fi

# Die Länge der Audiodatei mit sox ermitteln und daraus die
# Anzahl der Mikrosekunden für xaos ermitteln
musicmicros=`sox --info "$music" |
grep ’uration’ |
sed ’s/^[^0-9]*\([0-9\.:]*\).*$/\1/
     s/[:\.]/ /g’ |
awk ’{ sec = $4 / 100 + $3 + $2 * 60 + $1 * 60 * 60
       microsec = sec * 1000000
       printf "%d", microsec }’`

# Keine Länge ermittelt? Das ist ein Fehler!
if [ -z "$musicmicros" ]
then
    echo >&2 "Länge für Audiodatei ’$music’ kann nicht ermittelt werden"
    exit 1
fi

# Startpunkt aus der Startdatei ermitteln
startline=`grep ’^ *(view’ $xaosfrom |
sed ’s/).*$/)/
     s/^[^(]*(/(/’`

# Kein Startpunkt ermittelt? Das ist ein Fehler!
if [ -z "$startline" ]
then
    echo >&2 "In ’$xaosfrom’ existiert keine view-Zeile"
    exit 1
fi

# Zoomdatei schreiben
(   echo "; Diese Datei wurde automatisch mit `basename $0` erzeugt"
    echo "; Aufruf: `basename $0` \"$1\" \"$2\" \"$3\" \"$4\""
    echo
    sed "/^;/d
         s/(view/$startline\n(morphview/" <"$xaosto" 
    echo "(usleep $musicmicros)" ) >"$xaoszoom"

# Zoomskript schreiben
# Achtung! Ich setze eine gediegene Bitrate beim Erzeugen des Videos,
# weil ich der Meinung bin, dass man immer noch nachträglich die
# Qualität verschlechtern kann. Nachträgliches Verbessern hingegen ist
# eher ein bisschen schwierig...
cat >"$xaosskript" <<EOF
#!/bin/sh
# Dieses Skript wurde automatisch mit `basename $0` erzeugt
# Aufruf: `basename $0` "$1" "$2" "$3" "$4"

if [ -d /var/tmp ]
then
    tmpdir=/var/tmp/zoom-\`whoami\`-\$$
else
    tmpdir=/tmp/zoom-\`whoami\`-\$$
fi

trap "rm -rf \$tmpdir; exit" 1 2 15
mkdir \$tmpdir

nice xaos -render "$xaoszoom" \\
          -size 1280x720 \\
          -antialiasing \\
          -rendervectors \\
          -renderframerate 25 \\
          -basename \$tmpdir/img

nice ffmpeg -y \\
            -i "$music" \\
            -f image2 \\
            -i "\$tmpdir/img%04d.png" \\
            -r 25 \\
            -s hd720 \\
            -b 17000k \\
            "$zoomname.mp4"

rm -rf \$tmpdir
EOF

# Aufräumen
chmod +x "$xaosskript"

# Abschließender Hinweis
echo "Starte das Rendern mit ./$xaosskript"

Abschreiben oder übers Clipboard kopieren ist nicht nötig, hier ist ein bequemerer Download. Einfach herunterladen, entpacken und irgendwo in den $PATH legen. Wer auf Sicherheit bedacht ist, wird mir nicht vertrauen und natürlich einen Blick auf das Skript werfen wollen.

Ein erheblicher Teil besteht aus der Behandlung naheliegender Fehler, um einigermaßen verständliche Fehlermeldungen zu bekommen.

Wenn die verwendeten Tools sox und ffmpeg installiert sind, ist die Verwendung des Skriptes ganz einfach. Angenommen, die Musik befindet sich in der Datei soundtrack.wav, der Startpunkt der Animation in start.xpf und der Endpunkt in ende.xpf, und daraus soll ein Video namens blah.mp4 gemacht werden, dann gibt es die folgende Sitzung an der Kommandozeile:

ich@rechner ~/zoom $ zoomskript start.xpf ende.xpf soundtrack.wav blah
Starte das Rendern mit blah.sh
ich@rechner ~/zoom $ ./blah.sh

Den Rest erledigt jemand für mich, der es besser kann als ich: Der Rechner. 😉

So muss das auch sein!

Die Palette für die Animation und eventuelle Filter werden dabei aus der Zielposition übernommen, entsprechende Angaben der Startparameter werden vollständig verworfen. Das liegt daran, dass ich selbst lieber am Ziel (oder auf dem Weg dorthin) über solche Dinge entscheide.

Ach ja: Wer gern einen Lizenztext zu diesem Skript haben möchte, fühle sich bitte einfach unter den Bedingungen der Piratenlizenz lizensiert. Share and Enjoy, but don’t sue me!

Veröffentlicht unter Technisches | Verschlagwortet mit , , | Schreib einen Kommentar

Wpcmd 0.6

Nachdem ich mich mit einigen verbliebenen Fehlern herumgeärgert habe, war es wieder an der Zeit, eine neue Version von wpcmd zu veröffentlichen. Große Änderungen gibt es nicht, aber Abhilfe gegen kleine Ärgernisse.

Unter anderem haben viele Menschen, die ein bei wordpress.com gehostetes Blog betreiben, ein sehr ärgerliches Verhalten in wpcmd gefunden. Nachdem wordpress.com die XMLRPC-URL auf TLS-Verschlüsselung (HTTPS) umgestellt hatte, war es nicht mehr möglich, ein Blog zu revalidieren. Dies war jedoch erforderlich, um geänderte Kategorien auch für wpcmd bekannt zu machen, damit geeignete Vorlagedateien erstellt werden können.

Der Fehler lag darin, dass ich die XMLRPC-URL intern verwendet habe, um ein Blog zu identifizieren. Diese enthielt natürlich auch das Protokollschema https:, so dass das Revalidieren scheiterte und die neuen Kategorien nicht mehr ermittelt werden konnten. Eine schlechte Entscheidung, wie ich bemerken musste… 😉

Dieser Fehler gehört der Vergangenheit an. Desweiteren gibt es jetzt eine Option -K, um den Kategorienbaum neu von WordPress anzufordern, ohne dass eine vollständige Revalidierung erforderlich ist. Hinterher ist die Frage, warum man da nicht vorher dran gedacht hat, natürlich leicht zu stellen…

Desweiteren gibt es auch interne Änderungen. Bislang enthielt wpcmd eine Menge Code, der darauf vorbereiten sollte, eine Version zu erstellen, die sowohl mit Python 2.x als auch mit Python 3.x läuft – dieses Unterfangen hat sich jedoch als schwieriger erwiesen, als ich vorher gedacht habe. Deshalb habe ich diesen Code vollständig entfernt, um diese unnütze, das Lesen und Anpassen erschwerende Schicht zusätzlicher Komplexität aus dem Quelltext zu nehmen. Ich werde erst dann an eine Version für Python 3 denken, wenn Debian Stable mit Python 3 als Standardversion ausgeliefert wird.  Bis dahin ändert sich aus Benutzersicht nichts, denn nach wie vor läuft wpcmd mit Python 2. Bei der Installation wird ein installiertes Python 2 auch dann gefunden und benutzt, wenn Python 3 von der Linux-Distribution als Vorgabe verwendet wurde, weil ich vom populären Ubuntu einen derartigen Schritt für die nächste Zeit erwarte. Vernünftige Menschen nehmen eh die LTS-Version von Ubuntu und werden noch lange Zeit Ruhe vor derartigen »Beglückungsideen« haben.

Wie immer gibt es eine gute und auf den aktuellen Stand angepasste HTML-Dokumentation in deutscher und englischer Sprache sowie natürlich eine englischsprachige man-page. Die HTML-Dokumentation lässt sich bequem lesen, indem wpcmd -D an der Kommandozeile abgesetzt wird. Sie richtet sich explizit an Menschen mit geringem technischen Hintergrund, die ihre Blogbenutzung teilweise oder ganz automatisieren wollen oder die – wie ich – lieber ihre Texte mit HTML-Markup in ihrem Lieblingseditor als im doch recht fetten WordPress-Dashboard verfassen möchten.

Download-Link: wpcmd 0.6 (143,6 KiB).

Veröffentlicht unter Download | Verschlagwortet mit , | Schreib einen Kommentar

Wenn das »Leistungsschutzrecht« in Kraft tritt…

Wenn – was leider trotz der vollständigen Idiotie dieses Standesrechtes zum Schutz gescheiterter Geschäftsmodelle zu befürchten ist – das so genannte »Leistungsschutzrecht« demnächst in Kraft treten wird, dann werde ich mich nicht mehr groß aufregen, denn ich habe mich vorbereitet. Ich werde ganz einfach ein Terminal öffnen und nur eine kurze Zeile tippen:

$ sudo cat blacklist-0.2.txt >>/etc/hosts

Eine gefühlte Hunderstelsekunde später existiert im von mir benutzten Internet kein Verlagsangebot mehr. Das befreit mich von jeder Chance, die Machwerke bundesdeutscher Presseverleger zu sehen und dabei versehentlich irgendwo zu verlinken.

Denn ich finde, dass der energisch und würgmächtig wirkmächtig vorgetragene Wunsch dieser Leute nach einem Sonderstatus im Internet respektiert werden sollte. Die machen ja den »Qualitätsjournalismus«, und der wird schon für sich selbst sprechen. Ohne, dass es irgendeiner Verlinkung dorthin bedarf. Ein Feuer wirbt nun einmal für sich selbst, wenn es unter großem Leuchten alte Häuser verzehrt.

Ich wünsche mir in ganz besonderer Weise, dass große Suchmaschinen fortan ebenfalls auf die Verlinkung dieser Websites verzichten – zumindest so lange, bis die Betreiber dieser Websites eindeutig, öffentlich und rechtsverbindlich klargestellt haben, dass sie auf ihre aus dem »Leistungsschutzrecht« erwachsenen Rechte verzichten, indem sie eine allgemeine, vernünftige, unmissverständliche und für jeden Menschen kostenlos und ohne besondere Formalitäten zu verwendende Lizenz erteilen.

Vom Schicksal der Dinosaurier lernen, bedeutet: Verstehen, dass das Ansterben dem Aussterben voran geht.

Wer Bitterkeit in diesem Post findet, darf sie behalten. Diese Bitterkeit geht nicht von mir aus. Es ist die Bitterkeit, mit der ein aussterbendes Gewerbe versucht, die eigene Zerstörung durch eine teilweise Zerstörung der Kultur des Internet zu entschleunigen, und zwar ohne jede Rücksicht auf Verluste.

Wer die Datei blacklist-0.2.txt nicht gefunden hat: Die gibt es hier zum freien Download. Ich hoffe, sie ist einigermaßen vollständig. [Inzwischen ist es eine blacklist-0.3.txt, in die auch Zeit Online und Spiegel Online aufgenommen wurden. Weitere Ergänzungen sind noch möglich.]

Natürlich kann sie in dieser Form auch in der Hosts-Datei von Microsoft Windows verwendet werden, die Syntax der Einträge ist die gleiche. Vielleicht baut ja jemand einen kleinen, bequemen Windows-Installer für diese Datei. 😉

Es ist möglich, dass ich in Zukunft aktualisierte Formen dieser Datei pflege. Es ist aber auch möglich, dass mir das zu viel der Mühe für einen Haufen von Idioten ist.

Veröffentlicht unter Technisches | Verschlagwortet mit , , , | 12 Kommentare

Diebstahl! Klau mich!

Komplizierte Themen für Journalisten erklärt: Diebstahl oder Kopie

Nachdem ich jetzt schon zweimal gefragt wurde, ob ich dieses (gerade erst im Alarmknopf verwendete) Bild »auch in etwas größer« hätte, biete ich meine SVG-Version hier für alle zum Download an: Download-Link auf ein ZIP-Archiv mit der Grafik (17,7 KiB). Die verwendeten Schriftarten sind – wie so häufig bei mir – aus der freien DejaVu-Familie. Wer meint, eine Lizenz zu benötigen, fühle sich unter den Bedingungen der Piratenlizenz lizenziert.

Share and Enjoy!

Veröffentlicht unter Allgemeines, Bloggen, Download, Musik, Technisches | Verschlagwortet mit | Schreib einen Kommentar

Offener Kurzbrief an die Verleger

Werte Verleger!

Wenn eure Websites ein Verlustgeschäft sind, dann stellt dieses Verlustgeschäft doch einfach ein.

Niemand hat euch ins Web gebeten. Ihr seid freiwillig dorthin gekommen, weil ihr euch große Profitmöglichkeiten davon versprochen habt. Und wenn ihr jetzt feststellt, dass ihr dabei draufzahlt, könnt ihr das entweder wegen der Werbewirkung eines Webauftritts in Kauf nehmen, oder ihr könnt es einstampfen.

Schaut mal, Verleger, ich bin auch freiwillig ins Web gekommen, ohne dass mich jemand gebeten hätte. Und ich zahle dafür drauf. Ich habe nicht einmal ans Geschäft gedacht, sondern nur an die preiswerte Möglichkeit, mich mitzuteilen. Ich klage nicht drüber, dass ich draufzahle, und ich komme übrigens auch nicht auf die Idee, meine paar Leser mit Werbung zu verachten.

Was ist bei euch anders? Richtig, dass ihr euch nicht mitteilen wollt, sondern mit industriell erstellten Texten den Reibach machen wollt, den ihr früher nur mit Druckwerken gemacht habt. Und nachdem euch über ein Jahrzehnt lang keine einzige funktionierende Idee gekommen ist, wie ihr diesen Reibach erzielen könnt, solltet ihr ruhig zu der Einsicht kommen, dass der von euch hinphantasierte Reibach nicht zu holen ist – da wird euch übrigens auch kein absurdes Standesrecht wie das »Leistungsschutzrecht« helfen. Wenn ihr trotzdem Bestandteil des Web sein wollt – es gibt ja ein paar gute Gründe dafür – dann lebt damit, dass man euch als Bestandteil des Web behandelt, dass man euch aufnimmt, zitiert, verlinkt, kritisiert und euch manchmal sogar lobt und zustimmt. Wenn ihr das nicht sein wollt, verpisst euch einfach aus dem Web und fällt Bäume, um sie mit Reklame und Agenturtexten zu bestempeln!

Grüßt mir auf eurem Weg die Dinosaurier. Vor dem Aussterben ist das Ansterben gesetzt!

Elias Schwerdtfeger
Nach Diktat verreist.

Veröffentlicht unter Allgemeines | Verschlagwortet mit , | 3 Kommentare