Mercurial > vba-clojure
comparison 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 |
comparison
equal
deleted
inserted
replaced
545:2b6cdea9bcdb | 546:36e5fa62eb3c |
---|---|
13 (:import com.aurellem.gb.WaveWriter)) | 13 (:import com.aurellem.gb.WaveWriter)) |
14 | 14 |
15 | 15 |
16 (def render-dir (File. user-home "proj/vba-clojure/render/test")) | 16 (def render-dir (File. user-home "proj/vba-clojure/render/test")) |
17 | 17 |
18 (defn force-sync | 18 (defn write-move-image! [move target-file] |
19 "keep the entire movie to a certain fps" | 19 (let [actual-keys (set move) |
20 [fps] | 20 keys [:a :b :start :select :u :d :l :r] |
21 | 21 button-on-name ["-size" "5x5" "xc:red"] |
22 | 22 button-off-name ["-size" "5x5" "xc:white"]] |
23 ) | 23 (apply |
24 | 24 clojure.java.shell/sh |
25 (flatten | |
26 ["convert" | |
27 "-size" "64x5" "xc:white" | |
28 (map | |
29 (fn [index] | |
30 (let [position ["-geometry" | |
31 (str "+" (* index 8) | |
32 "+" "0") "-composite"]] | |
33 (if (actual-keys (keys index)) | |
34 [button-on-name position] | |
35 [button-off-name position]))) | |
36 (range (count keys))) | |
37 (.getCanonicalPath target-file)])))) | |
25 | 38 |
26 (defn render-files! | 39 (defn render-files! |
27 ([^File target-dir initial-state moves] | 40 ([^File target-dir initial-state moves] |
28 (let [ram-map-dir (File. target-dir "ram-map") | 41 (let [ram-map-dir (File. target-dir "ram-map") |
29 frames-dir (File. target-dir "frames") | 42 frames-dir (File. target-dir "frames") |
43 moves-dir (File. target-dir "moves") | |
30 audio-file (File. target-dir "audio.wav") | 44 audio-file (File. target-dir "audio.wav") |
31 _ (.mkdir target-dir) | 45 _ (.mkdir target-dir) |
32 _ (.mkdir ram-map-dir) | 46 _ (.mkdir ram-map-dir) |
33 _ (.mkdir frames-dir) | 47 _ (.mkdir frames-dir) |
48 _ (.mkdir moves-dir) | |
34 wave-writer (WaveWriter. audio-file) | 49 wave-writer (WaveWriter. audio-file) |
35 moves (vec moves) | 50 moves (vec moves) |
36 desired-fps 60 | 51 desired-fps 60 |
37 seconds-per-frame (/ 1.0 desired-fps) | 52 seconds-per-frame (/ 1.0 desired-fps) |
38 | 53 |
60 av-diff (- total-audio-time | 75 av-diff (- total-audio-time |
61 total-video-time) | 76 total-video-time) |
62 write-video! | 77 write-video! |
63 (fn [index] | 78 (fn [index] |
64 ;; write screenshot | 79 ;; write screenshot |
65 | 80 (write-move-image! |
81 move | |
82 (File. moves-dir (format "%07d.png" index))) | |
66 | 83 |
67 (write-png! | 84 (write-png! |
68 @current-state | 85 @current-state |
69 (File. frames-dir (format "%07d.png" index))) | 86 (File. frames-dir (format "%07d.png" index))) |
70 | 87 |
110 | 127 |
111 (defn file-names [#^File dir] | 128 (defn file-names [#^File dir] |
112 (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) | 129 (mapv #(.getCanonicalPath %) (next (sort (file-seq dir))))) |
113 | 130 |
114 (defn composite-frames-command | 131 (defn composite-frames-command |
115 [screenshot ram-map target move] | 132 [move-image screenshot ram-map target] |
116 (let [actual-keys (set move) | 133 ["convert" |
117 keys [:a :b :start :select :u :d :l :r] | 134 "-size" "318x276" "xc:white" |
118 button-on-name ["-size" "5x5" "xc:red"] | 135 move-image "-geometry" "+30+225" "-composite" |
119 button-off-name ["-size" "5x5" "xc:white"]] | 136 screenshot "-geometry" "+10+10" "-composite" |
120 ["convert" | 137 ram-map "-geometry" "+180+10" "-composite" |
121 "-size" "318x276" "xc:white" | 138 target]) |
122 (map | |
123 (fn [index] | |
124 (let [position ["-geometry" | |
125 (str "+" (+ 30 (* index 8)) | |
126 "+" "225") "-composite"]] | |
127 (if (actual-keys (keys index)) | |
128 [button-on-name position] | |
129 [button-off-name position]))) | |
130 (range (count keys))) | |
131 screenshot "-geometry" "+10+10" "-composite" | |
132 ram-map "-geometry" "+180+10" "-composite" | |
133 target])) | |
134 | 139 |
135 (defn generate-composite-frames! | 140 (defn generate-composite-frames! |
136 [^File rendered-dir moves] | 141 [^File rendered-dir moves] |
137 (let [final-frames (File. rendered-dir "final") | 142 (let [final-frames (File. rendered-dir "final") |
138 _ (.mkdir final-frames) | 143 _ (.mkdir final-frames) |
165 "-i" (.getCanonicalPath final-audio) | 170 "-i" (.getCanonicalPath final-audio) |
166 "-b:a" "128k" | 171 "-b:a" "128k" |
167 "-b:v" "9000k" | 172 "-b:v" "9000k" |
168 "-c:a" "libvorbis" | 173 "-c:a" "libvorbis" |
169 "-c:v" "libtheora" | 174 "-c:v" "libtheora" |
175 "-g" "200" | |
170 (.getCanonicalPath movie)) nil)) | 176 (.getCanonicalPath movie)) nil)) |
171 | 177 |
172 | 178 |
173 (comment | 179 (comment |
174 | 180 |