# HG changeset patch # User Robert McIntyre # Date 1340640908 18000 # Node ID a3bdff5554ad5a17162e632c87c417b93eb5c153 # Parent c6ad363e36f7609b0f6df668456048e857bd0702 completed clojure functions to generate final video. diff -r c6ad363e36f7 -r a3bdff5554ad clojure/com/aurellem/run/final_cut.clj --- a/clojure/com/aurellem/run/final_cut.clj Sun Jun 24 17:18:22 2012 -0500 +++ b/clojure/com/aurellem/run/final_cut.clj Mon Jun 25 11:15:08 2012 -0500 @@ -54,32 +54,74 @@ (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) (defn composite-frames-command - [screenshot ram-map target] - ["convert" - "-size" "318x276" "xc:white" - screenshot "-geometry" "+10+10" "-composite" - ram-map "-geometry" "+180+10" "-composite" - target]) + [screenshot ram-map target move] + (let [actual-keys (set move) + keys [:a :b :start :select :u :d :l :r] + button-on-name ["-size" "5x5" "xc:red"] + button-off-name ["-size" "5x5" "xc:black"]] + ["convert" + "-size" "318x276" "xc:white" + (map + (fn [index] + (let [position ["-geometry" + (str "+" (+ 30 (* index 8)) + "+" "225") "-composite"]] + (if (actual-keys (keys index)) + [button-on-name position] + [button-off-name position]))) + (range (count keys))) + screenshot "-geometry" "+10+10" "-composite" + ram-map "-geometry" "+180+10" "-composite" + target])) (defn generate-composite-frames! - ([^File rendered-dir] - (let [final-frames (File. rendered-dir "final") - _ (.mkdir final-frames) - screenshots (file-names (File. rendered-dir "frames")) - ram-maps (file-names (File. rendered-dir "ram-map")) - targets (map #(File. final-frames (format "%07d.png")) - (range (count screenshots)))] - (dorun - (map - ;; (comp ;;clojure.java.shell/sh - ;; println - ;; flatten - composite-frames-command - screenshots ram-maps targets)) + [^File rendered-dir moves] + (let [final-frames (File. rendered-dir "final") + _ (.mkdir final-frames) + screenshots (file-names (File. rendered-dir "frames")) + ram-maps (file-names (File. rendered-dir "ram-map")) + targets (map #(.getCanonicalPath + (File. final-frames (format "%07d.bmp" %))) + (range (count screenshots)))] + (dorun + (map + (comp + (partial apply clojure.java.shell/sh) + flatten + (partial apply composite-frames-command) + (fn [a b c d] (println c) [a b c d])) + screenshots ram-maps targets moves)))) - )) - ([] (generate-composite-frames! render-dir))) + +(defn final-cut! [^File render-dir] + (let [movie (File. render-dir "final.ogg") + final (File. render-dir "final")] + (.delete movie) + (clojure.java.shell/sh + "ffmpeg" "-r" "60" + "-i" (str (.getCanonicalPath final) "/" "%07d.bmp") + "-i" (.getCanonicalPath (File. render-dir "audio.wav")) + "-b:a" "128k" + "-b:v" "9000k" + "-c:a" "libvorbis" + "-c:v" "libtheora" + (.getCanonicalPath movie)) nil)) + +(comment + ;; step 1 + + (render-files! + render-dir (root) + (take 9000 (first (control-checkpoint)))) - \ No newline at end of file + ;; step 2 + + (generate-composite-frames! + render-dir + (take 9000 (first (control-checkpoint)))) + + ;; step 3 + (final-cut! render-dir) + ) \ No newline at end of file diff -r c6ad363e36f7 -r a3bdff5554ad todo.org --- a/todo.org Sun Jun 24 17:18:22 2012 -0500 +++ b/todo.org Mon Jun 25 11:15:08 2012 -0500 @@ -1,11 +1,11 @@ -* vba-clojure [2/7] +* vba-clojure [3/7] - [X] create ram display - [ ] derpy hack - [X] sound recording - [ ] fix unnecessary pauses before take-over - [ ] design demo choreography - [ ] implement choreography - - [ ] clojure function to assemble final video + - [X] clojure function to assemble final video * fimfiction [0/1] - [ ] clojure catalogue