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