Как сделать расчет тайм-кода? - PullRequest
5 голосов
/ 13 декабря 2011

У меня есть вопрос, касающийся вычисления дельты временного кода.
Я читаю метаданные из файла фильма, содержащего форматированный временной код HH:MM:SS:FF

(FF = кадр, например, 00->23. Такэто как 00 до framerate-1)

Так что я получаю некоторые данные, такие как 15:41:08:02 и из другого файла ссылки, я получаю 15:41:07:00
Теперь я должен рассчитать смещение времени (как timedelta, но простос кадрами).
Как бы я обойти это делать?

Ответы [ 4 ]

5 голосов
/ 13 декабря 2011
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"
2 голосов
/ 13 декабря 2011

Я бы просто использовал глобальные числа кадров для всех вычислений, конвертируя обратно во временные коды только для отображения*

1 голос
/ 10 апреля 2013

Если временным кодом является SMPTE временным кодом , вам может потребоваться учитывать пропущенные кадры. Временные коды пропускаемых кадров пропускают номера кадров 0 и 1 первой секунды каждой минуты, кроме случаев, когда количество минут делится на 10.

Эта страница предоставляет некоторый фон истории с формулами для преобразования между временными кодами и номерами кадров.

0 голосов
/ 14 ноября 2018

Используя модуль timecode , это довольно просто:

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

...