Mercurial > vba-clojure
diff clojure/com/aurellem/run/final_cut.clj @ 546:36e5fa62eb3c
i believe this latest change will correct all A/V synching problems.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Wed, 27 Jun 2012 14:08:59 -0500 |
parents | 86d23b6d433f |
children | b3b7a06686c4 |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/run/final_cut.clj Wed Jun 27 13:41:01 2012 -0500 1.2 +++ b/clojure/com/aurellem/run/final_cut.clj Wed Jun 27 14:08:59 2012 -0500 1.3 @@ -15,22 +15,37 @@ 1.4 1.5 (def render-dir (File. user-home "proj/vba-clojure/render/test")) 1.6 1.7 -(defn force-sync 1.8 - "keep the entire movie to a certain fps" 1.9 - [fps] 1.10 - 1.11 - 1.12 - ) 1.13 - 1.14 +(defn write-move-image! [move target-file] 1.15 + (let [actual-keys (set move) 1.16 + keys [:a :b :start :select :u :d :l :r] 1.17 + button-on-name ["-size" "5x5" "xc:red"] 1.18 + button-off-name ["-size" "5x5" "xc:white"]] 1.19 + (apply 1.20 + clojure.java.shell/sh 1.21 + (flatten 1.22 + ["convert" 1.23 + "-size" "64x5" "xc:white" 1.24 + (map 1.25 + (fn [index] 1.26 + (let [position ["-geometry" 1.27 + (str "+" (* index 8) 1.28 + "+" "0") "-composite"]] 1.29 + (if (actual-keys (keys index)) 1.30 + [button-on-name position] 1.31 + [button-off-name position]))) 1.32 + (range (count keys))) 1.33 + (.getCanonicalPath target-file)])))) 1.34 1.35 (defn render-files! 1.36 ([^File target-dir initial-state moves] 1.37 (let [ram-map-dir (File. target-dir "ram-map") 1.38 frames-dir (File. target-dir "frames") 1.39 + moves-dir (File. target-dir "moves") 1.40 audio-file (File. target-dir "audio.wav") 1.41 _ (.mkdir target-dir) 1.42 _ (.mkdir ram-map-dir) 1.43 _ (.mkdir frames-dir) 1.44 + _ (.mkdir moves-dir) 1.45 wave-writer (WaveWriter. audio-file) 1.46 moves (vec moves) 1.47 desired-fps 60 1.48 @@ -62,7 +77,9 @@ 1.49 write-video! 1.50 (fn [index] 1.51 ;; write screenshot 1.52 - 1.53 + (write-move-image! 1.54 + move 1.55 + (File. moves-dir (format "%07d.png" index))) 1.56 1.57 (write-png! 1.58 @current-state 1.59 @@ -112,25 +129,13 @@ 1.60 (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) 1.61 1.62 (defn composite-frames-command 1.63 - [screenshot ram-map target move] 1.64 - (let [actual-keys (set move) 1.65 - keys [:a :b :start :select :u :d :l :r] 1.66 - button-on-name ["-size" "5x5" "xc:red"] 1.67 - button-off-name ["-size" "5x5" "xc:white"]] 1.68 - ["convert" 1.69 - "-size" "318x276" "xc:white" 1.70 - (map 1.71 - (fn [index] 1.72 - (let [position ["-geometry" 1.73 - (str "+" (+ 30 (* index 8)) 1.74 - "+" "225") "-composite"]] 1.75 - (if (actual-keys (keys index)) 1.76 - [button-on-name position] 1.77 - [button-off-name position]))) 1.78 - (range (count keys))) 1.79 - screenshot "-geometry" "+10+10" "-composite" 1.80 - ram-map "-geometry" "+180+10" "-composite" 1.81 - target])) 1.82 + [move-image screenshot ram-map target] 1.83 + ["convert" 1.84 + "-size" "318x276" "xc:white" 1.85 + move-image "-geometry" "+30+225" "-composite" 1.86 + screenshot "-geometry" "+10+10" "-composite" 1.87 + ram-map "-geometry" "+180+10" "-composite" 1.88 + target]) 1.89 1.90 (defn generate-composite-frames! 1.91 [^File rendered-dir moves] 1.92 @@ -167,6 +172,7 @@ 1.93 "-b:v" "9000k" 1.94 "-c:a" "libvorbis" 1.95 "-c:v" "libtheora" 1.96 + "-g" "200" 1.97 (.getCanonicalPath movie)) nil)) 1.98 1.99