Advertisement
goebelmasse

Mein Helferskript für Fraktalzooms

Mar 3rd, 2014
383
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.12 KB | None | 0 0
  1. #!/bin/sh
  2. ########################################################################
  3. #
  4. # zoomskript
  5. # $Id: zoomskript,v 1.8 2013/12/21 02:55:39 elias Exp $
  6. #
  7. # Aus einer Audio-Datei (diese gibt die Länge vor), zwei gespeicherten
  8. # Parameterdateien von Xaos und einem Namen wird ein Skript erzeugt, das
  9. # einen Fraktalzoom berechnet. Ich habe dabei so häufig Fehler gemacht,
  10. # dass ich diese Aufgabe lieber an einen Computer übergebe. Der kann
  11. # das nämlich besser als ich... ;)
  12. #
  13. # Alle vier Parameter sind erforderlich.
  14. #
  15. ########################################################################
  16.  
  17. # Paranoiazeilen
  18. PATH=/bin:/usr/bin
  19. SOX_OPTS=""
  20.  
  21. # Parameter lesen, Kurzinfo bei falscher Anzahl
  22. case $# in
  23.     4)  xaosfrom="$1"
  24.     xaosto="$2"
  25.     music="$3"
  26.     zoomname="$4"
  27.     ;;
  28.     *)  echo "Aufruf: `basename $0` [xaos-from] [xaos-to] [audiofile] [name]"
  29.     echo
  30.     echo "* Schreibt zwei Dateien: [name].xpf und [name].sh"
  31.     echo "* [name].xpf ist die Zoom-Definition für xaos"
  32.     echo "* Filter und Palette werden aus [xaos-to] genommen"
  33.     echo "* [name].sh ist das Shellskript, das das Video rendert"
  34.     exit
  35.     ;;
  36. esac
  37.  
  38. # Die Namen der erzeugten Dateien
  39. xaoszoom="$zoomname.xpf"
  40. xaosskript="$zoomname.sh"
  41.  
  42. # Ein paar Zeilen langweiliger Fehlerbehandlung
  43. if [ ! -f "$xaosfrom" ]
  44. then
  45.     echo >&2 "Keine Startpunkt-Definition '$xaosfrom'"
  46.     exit 1
  47. fi
  48. if [ ! -f "$xaosto" ]
  49. then
  50.     echo >&2 "Keine Endpunkt-Definition '$xaosto'"
  51.     exit 1
  52. fi
  53. if [ ! -f "$music" ]
  54. then
  55.     echo >&2 "Keine Audiodatei '$music'"
  56.     exit 1
  57. fi
  58. if [ -f "$xaoszoom" ]
  59. then
  60.     echo >&2 "Ausgabedatei '$xaoszoom' existiert bereits"
  61.     exit 1
  62. fi
  63. if [ -f "$xaosskript" ]
  64. then
  65.     echo >&2 "Ausgabeskript '$xaosskript' existiert bereits"
  66.     exit 1
  67. fi
  68.  
  69. # Die Länge der Audiodatei mit sox ermitteln und daraus die
  70. # Anzahl der Mikrosekunden für xaos ermitteln
  71. musicmicros=`sox --info "$music" |
  72. grep 'uration' |
  73. sed 's/^[^0-9]*\([0-9\.:]*\).*$/\1/
  74.     s/[:\.]/ /g' |
  75. awk '{ sec = $4 / 100 + $3 + $2 * 60 + $1 * 60 * 60
  76.       microsec = sec * 1000000
  77.       printf "%d", microsec }'`
  78.  
  79. # Keine Länge ermittelt? Das ist ein Fehler!
  80. if [ -z "$musicmicros" ]
  81. then
  82.     echo >&2 "Länge für Audiodatei '$music' kann nicht ermittelt werden"
  83.     exit 1
  84. fi
  85.  
  86. # Startpunkt aus der Startdatei ermitteln
  87. startline=`grep '^ *(view' $xaosfrom |
  88. sed 's/).*$/)/
  89.     s/^[^(]*(/(/'`
  90.  
  91. # Kein Startpunkt ermittelt? Das ist ein Fehler!
  92. if [ -z "$startline" ]
  93. then
  94.     echo >&2 "In '$xaosfrom' existiert keine view-Zeile"
  95.     exit 1
  96. fi
  97.  
  98. # Zoomdatei schreiben
  99. (   echo "; Diese Datei wurde automatisch mit `basename $0` erzeugt"
  100.     echo "; Aufruf: `basename $0` \"$1\" \"$2\" \"$3\" \"$4\""
  101.     echo
  102.     sed "/^;/d
  103.         s/(view/$startline\n(morphview/" <"$xaosto"
  104.     echo "(usleep $musicmicros)" ) >"$xaoszoom"
  105.  
  106. # Zoomskript schreiben
  107. # Achtung! Ich setze eine gediegene Bitrate beim Erzeugen des Videos,
  108. # weil ich der Meinung bin, dass man immer noch nachträglich die
  109. # Qualität verschlechtern kann. Nachträgliches Verbessern hingegen ist
  110. # eher ein bisschen schwierig...
  111. cat >"$xaosskript" <<EOF
  112. #!/bin/sh
  113. # Dieses Skript wurde automatisch mit `basename $0` erzeugt
  114. # Aufruf: `basename $0` "$1" "$2" "$3" "$4"
  115.  
  116. if [ -d /var/tmp ]
  117. then
  118.     tmpdir=/var/tmp/zoom-\`whoami\`-\$$
  119. else
  120.     tmpdir=/tmp/zoom-\`whoami\`-\$$
  121. fi
  122.  
  123. trap "rm -rf \$tmpdir; exit" 1 2 15
  124. mkdir \$tmpdir
  125.  
  126. nice xaos -render "$xaoszoom" \\
  127.           -pixelwidth 1 \\
  128.           -pixelheight 1 \\
  129.           -size 1280x720 \\
  130.           -antialiasing \\
  131.           -periodicity \\
  132.           -range 1 \\
  133.           -rendervectors \\
  134.           -renderframerate 25 \\
  135.           -basename \$tmpdir/img
  136.  
  137. nice ffmpeg -y \\
  138.             -i "$music" \\
  139.             -f image2 \\
  140.             -i "\$tmpdir/img%04d.png" \\
  141.             -r 25 \\
  142.             -s hd720 \\
  143.             -b 17000k \\
  144.             "$zoomname.mp4"
  145.  
  146. rm -rf \$tmpdir
  147.  
  148. notify-send --icon=info \\
  149.             "Fraktalzoom" \\
  150.             "Der Fraktalzoom ist fertig gerendert."
  151. EOF
  152.  
  153. # Aufräumen
  154. chmod +x "$xaosskript"
  155.  
  156. # Abschließender Hinweis
  157. echo "Starte das Rendern mit ./$xaosskript"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement