Mercurial > vba-clojure
diff clojure/com/aurellem/run/final_cut.clj @ 532:a3bdff5554ad
completed clojure functions to generate final video.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Mon, 25 Jun 2012 11:15:08 -0500 |
parents | c6ad363e36f7 |
children | 60da469773e5 |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/run/final_cut.clj Sun Jun 24 17:18:22 2012 -0500 1.2 +++ b/clojure/com/aurellem/run/final_cut.clj Mon Jun 25 11:15:08 2012 -0500 1.3 @@ -54,32 +54,74 @@ 1.4 (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) 1.5 1.6 (defn composite-frames-command 1.7 - [screenshot ram-map target] 1.8 - ["convert" 1.9 - "-size" "318x276" "xc:white" 1.10 - screenshot "-geometry" "+10+10" "-composite" 1.11 - ram-map "-geometry" "+180+10" "-composite" 1.12 - target]) 1.13 + [screenshot ram-map target move] 1.14 + (let [actual-keys (set move) 1.15 + keys [:a :b :start :select :u :d :l :r] 1.16 + button-on-name ["-size" "5x5" "xc:red"] 1.17 + button-off-name ["-size" "5x5" "xc:black"]] 1.18 + ["convert" 1.19 + "-size" "318x276" "xc:white" 1.20 + (map 1.21 + (fn [index] 1.22 + (let [position ["-geometry" 1.23 + (str "+" (+ 30 (* index 8)) 1.24 + "+" "225") "-composite"]] 1.25 + (if (actual-keys (keys index)) 1.26 + [button-on-name position] 1.27 + [button-off-name position]))) 1.28 + (range (count keys))) 1.29 + screenshot "-geometry" "+10+10" "-composite" 1.30 + ram-map "-geometry" "+180+10" "-composite" 1.31 + target])) 1.32 1.33 (defn generate-composite-frames! 1.34 - ([^File rendered-dir] 1.35 - (let [final-frames (File. rendered-dir "final") 1.36 - _ (.mkdir final-frames) 1.37 - screenshots (file-names (File. rendered-dir "frames")) 1.38 - ram-maps (file-names (File. rendered-dir "ram-map")) 1.39 - targets (map #(File. final-frames (format "%07d.png")) 1.40 - (range (count screenshots)))] 1.41 - (dorun 1.42 - (map 1.43 - ;; (comp ;;clojure.java.shell/sh 1.44 - ;; println 1.45 - ;; flatten 1.46 - composite-frames-command 1.47 - screenshots ram-maps targets)) 1.48 + [^File rendered-dir moves] 1.49 + (let [final-frames (File. rendered-dir "final") 1.50 + _ (.mkdir final-frames) 1.51 + screenshots (file-names (File. rendered-dir "frames")) 1.52 + ram-maps (file-names (File. rendered-dir "ram-map")) 1.53 + targets (map #(.getCanonicalPath 1.54 + (File. final-frames (format "%07d.bmp" %))) 1.55 + (range (count screenshots)))] 1.56 + (dorun 1.57 + (map 1.58 + (comp 1.59 + (partial apply clojure.java.shell/sh) 1.60 + flatten 1.61 + (partial apply composite-frames-command) 1.62 + (fn [a b c d] (println c) [a b c d])) 1.63 + screenshots ram-maps targets moves)))) 1.64 1.65 - )) 1.66 - ([] (generate-composite-frames! render-dir))) 1.67 + 1.68 +(defn final-cut! [^File render-dir] 1.69 + (let [movie (File. render-dir "final.ogg") 1.70 + final (File. render-dir "final")] 1.71 + (.delete movie) 1.72 + (clojure.java.shell/sh 1.73 + "ffmpeg" "-r" "60" 1.74 + "-i" (str (.getCanonicalPath final) "/" "%07d.bmp") 1.75 + "-i" (.getCanonicalPath (File. render-dir "audio.wav")) 1.76 + "-b:a" "128k" 1.77 + "-b:v" "9000k" 1.78 + "-c:a" "libvorbis" 1.79 + "-c:v" "libtheora" 1.80 + (.getCanonicalPath movie)) nil)) 1.81 + 1.82 1.83 +(comment 1.84 1.85 + ;; step 1 1.86 + 1.87 + (render-files! 1.88 + render-dir (root) 1.89 + (take 9000 (first (control-checkpoint)))) 1.90 1.91 - 1.92 \ No newline at end of file 1.93 + ;; step 2 1.94 + 1.95 + (generate-composite-frames! 1.96 + render-dir 1.97 + (take 9000 (first (control-checkpoint)))) 1.98 + 1.99 + ;; step 3 1.100 + (final-cut! render-dir) 1.101 + ) 1.102 \ No newline at end of file