4 Stimmen

Wie wird der Timecode berechnet?

Ich habe eine Frage zur Berechnung des Zeitcode-Deltas.
Ich lese Metadaten aus einer Filmdatei, die einen Timecode im Format HH:MM:SS:FF

( FF = Rahmen, 00->23 zum Beispiel. Es ist also wie 00 まで framerate-1 )

Ich erhalte also einige Daten wie 15:41:08:02 und aus einer anderen Referenzdatei erhalte ich 15:41:07:00
Jetzt muss ich den Zeitversatz berechnen (wie timedelta, aber nur mit Frames).
Wie würde ich vorgehen?

8voto

eumiro Punkte 193562
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"

3voto

6502 Punkte 108136

Ich würde einfach gobale Frame-Nummern für alle Berechnungen verwenden und nur für die Anzeige wieder in Timecodes konvertieren.

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)

bei negativen Rahmenzahlen würde ich der Darstellung des absoluten Wertes ein Minus voranstellen

1voto

yannick Punkte 63

Wenn der Zeitcode SMPTE-Zeitcode müssen Sie möglicherweise Dropframes in Betracht ziehen. Drop-Frame-Timecodes lassen die Bildnummern 0 und 1 der ersten Sekunde jeder Minute aus, außer wenn die Anzahl der Minuten durch 10 teilbar ist.

このページ bietet einige geschichtliche Hintergründe mit Formeln zur Umrechnung zwischen Timecodes und Bildnummern.

0voto

Spencer Punkte 1642

Die Verwendung des Zeitcode Modul ist dies ganz einfach:

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)

gibt Ihnen 26

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X