4

タイムコードデルタの計算について質問がありました。
フォーマットされたタイムコードを含むムービーファイルからメタデータを読み取りますHH:MM:SS:FF

FF=フレーム、00->23たとえば。だから、そのよう00framerate-1

だから私は私が得る15:41:08:02別の参照ファイルのようないくつかのデータを取得し15:41:07:00
ます今私はtimeoffsetを計算する必要があります(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タイムコードの場合、ドロップフレームを考慮する必要がある場合があります。ドロップフレームタイムコードは、分数が10で割り切れる場合を除いて、毎分の最初の秒のフレーム番号0と1をドロップします。

このページでは、タイムコードとフレーム番号の間で変換する式を含むいくつかの歴史的背景を提供します。

于 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 に答える