2024-05-19 15:05:58 发布
网友
我有一个关于计算时间码增量的问题。 我从包含时间码格式的电影文件中读取元数据HH:MM:SS:FF
HH:MM:SS:FF
(FF=帧,00->23例如。所以就像00到framerate-1)
FF
00->23
00
framerate-1
所以我得到了一些数据,比如15:41:08:02,而从另一个reference文件中,我得到了15:41:07:00 现在我必须计算时间偏移量(类似于timedelta,但仅限于帧)。 我该怎么做呢?
15:41:08:02
15:41:07:00
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"
如果时间码是SMPTE timecode,则可能需要考虑丢弃帧。删除帧时间码删除每分钟第一秒的帧号0和1,但分钟数可被10整除的情况除外。
This page为一些历史背景提供了在时间码和帧号之间转换的公式。
我只使用gobal帧号进行所有计算,转换回仅用于显示的时间码
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)
对于负数,我会在绝对值的表示前面加上负号
如果时间码是SMPTE timecode,则可能需要考虑丢弃帧。删除帧时间码删除每分钟第一秒的帧号0和1,但分钟数可被10整除的情况除外。
This page为一些历史背景提供了在时间码和帧号之间转换的公式。
我只使用gobal帧号进行所有计算,转换回仅用于显示的时间码
对于负数,我会在绝对值的表示前面加上负号
相关问题 更多 >
编程相关推荐