preview timing improvements + imcorporated into script wrapper

This commit is contained in:
Grant Sanderson 2015-06-09 11:51:40 -07:00
parent b527568f5c
commit 4198581f8a
2 changed files with 23 additions and 18 deletions

View file

@ -63,13 +63,14 @@ def find_scene_class_and_args(scene_string, args_extension,
def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""): def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
try: try:
opts, args = getopt.getopt(sys_argv, "ho:s:a:l") opts, args = getopt.getopt(sys_argv, "h:s:a:l:p")
except getopt.GetoptError as err: except getopt.GetoptError as err:
print str(err) print str(err)
sys.exit(2) sys.exit(2)
scene_string = "" scene_string = ""
args_extension = "" args_extension = ""
display_config = PRODUCTION_QUALITY_DISPLAY_CONFIG display_config = PRODUCTION_QUALITY_DISPLAY_CONFIG
preview = False
for opt, arg in opts: for opt, arg in opts:
if opt == '-h': if opt == '-h':
print HELP_MESSAGE print HELP_MESSAGE
@ -80,6 +81,9 @@ def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
args_extension = arg args_extension = arg
elif opt == '-l': elif opt == '-l':
display_config = LOW_QUALITY_DISPLAY_CONFIG display_config = LOW_QUALITY_DISPLAY_CONFIG
elif opt == '-p':
display_config = LOW_QUALITY_DISPLAY_CONFIG
preview = True
if len(args) > 0: if len(args) > 0:
scene_string = args[0] scene_string = args[0]
if len(args) > 1: if len(args) > 1:
@ -92,7 +96,10 @@ def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
name = SceneClass.__name__ + SceneClass.args_to_string(*args) name = SceneClass.__name__ + SceneClass.args_to_string(*args)
print "Constructing %s..."%name print "Constructing %s..."%name
scene = SceneClass(*args, display_config = display_config) scene = SceneClass(*args, display_config = display_config)
scene.write_to_movie(movie_prefix + name) if preview:
scene.preview()
else:
scene.write_to_movie(movie_prefix + name)

View file

@ -1,6 +1,8 @@
from scene import * from scene import *
import Tkinter import Tkinter
from PIL import ImageTk, Image from PIL import ImageTk, Image
import itertools as it
import time
class TkSceneRoot(Tkinter.Tk): class TkSceneRoot(Tkinter.Tk):
def __init__(self, scene): def __init__(self, scene):
@ -17,23 +19,19 @@ class TkSceneRoot(Tkinter.Tk):
self.canvas.configure(background='black') self.canvas.configure(background='black')
self.canvas.place(x=-2,y=-2) self.canvas.place(x=-2,y=-2)
self.frame_index = 0 last_time = time.time()
self.num_frames = len(self.scene.frames) for frame in it.cycle(self.scene.frames):
self.frame_duration_in_ms = int(1000*scene.frame_duration) try:
# self.after(0,self.show_new_image) self.show_new_image(frame)
while(1): except:
self.frame_index = 0 break
self.show_new_image() sleep_time = self.scene.frame_duration
sleep_time -= time.time() - last_time
time.sleep(max(0, sleep_time))
last_time = time.time()
self.mainloop() self.mainloop()
def show_new_image(self, frame):
def show_new_image(self):
self.frame_index += 1
if self.frame_index >= self.num_frames:
return
frame = self.scene.frames[self.frame_index]
image = Image.fromarray(frame).convert('RGB') image = Image.fromarray(frame).convert('RGB')
image.resize(self.frame.size()) image.resize(self.frame.size())
photo = ImageTk.PhotoImage(image) photo = ImageTk.PhotoImage(image)
@ -42,5 +40,5 @@ class TkSceneRoot(Tkinter.Tk):
0, 0, 0, 0,
image = photo, anchor = Tkinter.NW image = photo, anchor = Tkinter.NW
) )
self.after(self.frame_duration_in_ms, self.show_new_image) # self.after(self.frame_duration_in_ms, self.show_new_image)
self.update() self.update()