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
Solution 1:
framerate = 24deftimecode_to_frames(timecode):
returnsum(f * int(t) for f,t inzip((3600*framerate, 60*framerate, framerate, 1), timecode.split(':')))
print timecode_to_frames('15:41:08:02') - timecode_to_frames('15:41:07:00')
# returns 26defframes_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"
Solution 2:
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_rates= fn // frame_ratereturn (s // 3600, s // 60 % 60, s % 60, ff)
for negative frame numbers I'd prepend a minus to the representation of the absolute value
Solution 3:
If the timecode is SMPTE timecode, you may need to take into account drop frames. Drop-frame timecodes drop frame numbers 0 and 1 of the first second of every minute, except when the number of minutes is divisible by 10.
This page provides some history background with formulas to convert between timecodes and frame numbers.
Solution 4:
Using the timecode module this is quite easy:
import timecode as tctc1= tc.Timecode(24, "15:41:08:02")
tc2 = tc.Timecode(24, "15:41:07:00")
delta = tc1 - tc2
print(delta.frames)
gives you 26
Post a Comment for "How To Do Timecode Calculation?"