Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- ########################################################################
- #
- # zoomskript
- # $Id: zoomskript,v 1.8 2013/12/21 02:55:39 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" \\
- -pixelwidth 1 \\
- -pixelheight 1 \\
- -size 1280x720 \\
- -antialiasing \\
- -periodicity \\
- -range 1 \\
- -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
- notify-send --icon=info \\
- "Fraktalzoom" \\
- "Der Fraktalzoom ist fertig gerendert."
- EOF
- # Aufräumen
- chmod +x "$xaosskript"
- # Abschließender Hinweis
- echo "Starte das Rendern mit ./$xaosskript"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement