0

I would like to make a 7 minute timer, but I'm new to scripting and don't know how to. So can anyone help by sending a script that I could use.

Blender For You
  • 1,640
  • 12
  • 23
Aapo H.
  • 9
  • 2

2 Answers2

1

Here's my script. Just make a text object called "timer", then run this script from the text editor. Note that you can change the duration of the timer by editing the START_TIME value at the bottom.

import bpy

def get_playback_time():
    """
    Convert the current frame to seconds of playback time
    """
    scene = bpy.context.scene

    fps = scene.render.fps  / scene.render.fps_base
    frame = scene.frame_current

    return frame / fps

def seconds_to_timecode(sec):
    """
    Makes a timecode of the format MM:SS from seconds
    """

    minutes = "%02d" % int(sec / 60)
    seconds = "%02d" % int(sec % 60)

    return ''.join([minutes, ':', seconds])

def set_clock(scene):
    """
    Looks for a text object called 'timer' and sets it's text to the 
    start_time - current time
    """
    global START_TIME

    current_time = get_playback_time()

    secs = START_TIME - current_time

    if secs > 0:
        timecode = seconds_to_timecode(secs)
    else:
        timecode = '00:00'

    obj = scene.objects['timer']
    obj.data.body = timecode

if __name__ == "__main__":
    START_TIME = 60 * 7
    bpy.app.handlers.frame_change_post.append(set_clock)
doakey3
  • 1,946
  • 11
  • 24
1

Depends what you mean when you say timer. If you want a timer during your animation your best bet is to just calculate the corresponding keyframe. If you mean just a generic timer, the easiest way from within python is with threading.

import threading

def foo():
    print("times up")

timer = threading.Timer(7*60, foo)
timer.start()

see https://docs.python.org/3/library/threading.html#timer-objects for more details

Matt
  • 91
  • 1
  • 3