in fairmotion/viz/bvh_visualizer.py [0:0]
def keyboard_callback(self, key):
motion = self.motions[self.file_idx]
if key == b"s":
self.cur_time = 0.0
self.time_checker.begin()
elif key == b"]":
next_frame = min(
motion.num_frames() - 1,
motion.time_to_frame(self.cur_time) + 1,
)
self.cur_time = motion.frame_to_time(next_frame)
elif key == b"[":
prev_frame = max(0, motion.time_to_frame(self.cur_time) - 1)
self.cur_time = motion.frame_to_time(prev_frame)
elif key == b"+":
self.play_speed = min(self.play_speed + 0.2, 5.0)
elif key == b"-":
self.play_speed = max(self.play_speed - 0.2, 0.2)
elif (key == b"r" or key == b"v"):
self.cur_time = 0.0
end_time = motion.length()
fps = motion.fps
save_path = input(
"Enter directory/file to store screenshots/video: "
)
cnt_screenshot = 0
dt = 1 / fps
gif_images = []
while self.cur_time <= end_time:
print(
f"Recording progress: {self.cur_time:.2f}s/{end_time:.2f}s ({int(100*self.cur_time/end_time)}%) \r",
end="",
)
if key == b"r":
utils.create_dir_if_absent(save_path)
name = "screenshot_%04d" % (cnt_screenshot)
self.save_screen(dir=save_path, name=name, render=True)
else:
image = self.get_screen(render=True)
gif_images.append(
image.convert("P", palette=Image.ADAPTIVE)
)
self.cur_time += dt
cnt_screenshot += 1
if key == b"v":
utils.create_dir_if_absent(os.path.dirname(save_path))
gif_images[0].save(
save_path,
save_all=True,
optimize=False,
append_images=gif_images[1:],
loop=0,
)
else:
return False
return True