2011-12-13 12 views
5

Mam pytanie dotyczące obliczania delty kodu czasu.
czytam metadanych z pliku filmowego zawierającego kod czasowy sformatowany HH:MM:SS:FFJak wykonać obliczenia z kodem czasowym?

(FF = ramę, 00->23 np. Tak jego jak 00 do framerate-1)

Więc ja dostać jakieś dane jak 15:41:08:02 iz innego pliku refrence Dostaję teraz 15:41:07:00
Teraz muszę obliczyć timeoffset (jak timedelta, ale tylko z ramkami).
Jak bym to robił?

Odpowiedz

4
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" 
+0

Dziękuję wszystkim za szybkie odpowiedzi wszystkim! Zaskoczony, jak mili i dobrzy ludzie są tutaj. – Malu05

2

że wystarczy użyć gobal numer ramki dla wszystkich obliczeń, przekształca z powrotem do kodów czasowych jedynie do wyświetlania

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) 

na ujemne numery ramek ja dołączana minus do reprezentacji wartości bezwzględnej

0

Jeśli kod czasowy to SMPTE timecode, konieczne może być uwzględnienie zrzutów. Kody czasowe zrzucanych klatek upuszczają ramki o numerach 0 i 1 pierwszej sekundy każdej minuty, z wyjątkiem sytuacji, gdy liczba minut jest podzielna przez 10.

This page dostarcza tła historii z formułami do konwersji między kodami czasowymi i numerami ramek.

+0

Droga Yannick, czy przeczytałeś pytanie poniżej? Przeczytaj uważnie ... – Trinimon

+0

W przypadku kodu kreskowego z kroplą czas przesunięcia między 01: 08: 59: 29 a 01: 09: 00: 02 powinien wynosić 1, czyż nie? – yannick

Powiązane problemy