4

我有一个关于计算时间码增量的问题。
我从包含格式化时间码的电影文件中读取元数据HH:MM:SS:FF

(例如FF=帧00->23。所以它00喜欢framerate-1

所以我得到了一些数据,比如我得到15:41:08:02的另一个参考文件15:41:07:00
现在我必须计算时间偏移量(比如 timedelta,但只是帧)。
我该怎么做呢?

4

4 回答 4

6
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"
于 2011-12-13T11:58:59.063 回答
2

我只使用全局帧数进行所有计算,转换回时间码仅用于显示

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)

对于负帧数,我会在绝对值的表示之前加上一个减号

于 2011-12-13T11:59:33.023 回答
1

如果时间码是SMPTE 时间码,您可能需要考虑丢帧。丢帧时间码会丢掉每分钟第一秒的帧号 0 和 1,除非分钟数可以被 10 整除。

此页面提供了一些历史背景以及在时间码和帧号之间进行转换的公式。

于 2013-04-10T19:36:08.147 回答
0

使用时间码模块非常简单:

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)

给你26

于 2018-11-13T22:59:14.490 回答