¿Cómo hacer el cálculo del código de tiempo?

Tengo una pregunta sobre el cálculo del código de tiempo delta.
Leí metadatos de un archivo de película que contiene un código de tiempo con formato HH:MM:SS:FF

( FF = fotogtwig, 00->23 por ejemplo. Entonces es como 00 a framerate-1 )

Entonces obtengo información como 15:41:08:02 y de otro archivo de referencia obtengo 15:41:07:00
Ahora tengo que calcular el timeoffset (como timedelta pero solo con marcos).
¿Cómo voy a hacer esto?

 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" 

Acabo de usar los números de marco global para todos los cálculos, convirtiendo de nuevo a códigos de tiempo solo para mostrar

 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) 

para los números de marco negativos, antepondría un signo menos a la representación del valor absoluto

Si el código de tiempo es código de tiempo SMPTE , es posible que deba tener en cuenta los fotogtwigs de colocación. Los códigos de tiempo de los fotogtwigs de caída bajan los números de fotogtwig 0 y 1 del primer segundo de cada minuto, excepto cuando el número de minutos es divisible por 10.

Esta página proporciona algunos antecedentes históricos con fórmulas para convertir entre códigos de tiempo y números de fotogtwig.

Usar el módulo de código de tiempo es bastante fácil:

 import timecode as tc tc1 = tc.Timecode(24, "15:41:08:02") tc2 = tc.Timecode(24, "15:41:07:00") delta = tc1 - tc2 print(delta.frames) 

te da 26