Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do timecode calculation?

I got a question regarding calculating time code delta.
I read metadata from a movie file containing a timecode formated HH:MM:SS:FF

(FF = frame, 00->23 for example. So its like 00 to framerate-1)

So i get some data like 15:41:08:02 and from another refrence file i get 15:41:07:00
Now I have to calculate the timeoffset (like timedelta but just with frames).
How would i go around doing this?

like image 736
Malu05 Avatar asked Jan 18 '23 01:01

Malu05


2 Answers

framerate = 24

def timecode_to_frames(timecode):
    return sum(f * int(t) for f,t in zip((3600*framerate, 60*framerate, framerate, 1), timecode.split(':')))

print timecode_to_frames('15:41:08:02') - timecode_to_frames('15:41:07:00')
# returns 26

def frames_to_timecode(frames):
    return '{0:02d}:{1:02d}:{2:02d}:{3:02d}'.format(frames / (3600*framerate),
                                                    frames / (60*framerate) % 60,
                                                    frames / framerate % 60,
                                                    frames % framerate)

print frames_to_timecode(26)
# returns "00:00:01:02"
like image 183
eumiro Avatar answered Jan 28 '23 15:01

eumiro


I'd just use gobal frame numbers for all computations, converting back to timecodes only for display

def tc_to_frame(hh, mm, ss, ff):
    return ff + (ss + mm*60 + hh*3600) * frame_rate

def frame_to_tc(fn):
    ff = fn % frame_rate
    s = fn // frame_rate
    return (s // 3600, s // 60 % 60, s % 60, ff)

for negative frame numbers I'd prepend a minus to the representation of the absolute value

like image 23
6502 Avatar answered Jan 28 '23 16:01

6502