2011-12-13 47 views
5

Tôi có một câu hỏi liên quan đến tính toán delta mã thời gian.
tôi đọc siêu dữ liệu từ một tập tin phim chứa một timecode formated HH:MM:SS:FFCách tính toán mã hóa thời gian?

(FF = khung, 00->23 chẳng hạn. Vì vậy, nó như 00 để framerate-1)

Vì vậy, tôi nhận được một số dữ liệu như 15:41:08:02 và từ một tập tin refrence Tôi nhận được 15:41:07:00
Bây giờ tôi phải tính toán thời gian chờ (như timedelta nhưng chỉ với khung).
Làm cách nào để tôi thực hiện việc này?

Trả lời

4
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" 
+0

Cảm ơn rất nhiều cho tất cả các câu trả lời nhanh chóng! Ngạc nhiên làm sao mọi người nhanh chóng và tử tế ở đây. – Malu05

2

Tôi chỉ muốn sử dụng số khung gobal cho tất cả các tính toán, chuyển đổi trở lại mã thời gian chỉ để trưng bày

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) 

cho số khung tiêu cực tôi muốn thêm vào trước dấu trừ để các đại diện của các giá trị tuyệt đối

0

Nếu mã thời gian là SMPTE timecode, bạn có thể cần phải tính đến các khung thả tài khoản. Mã thời gian thả khung thả số khung 0 và 1 của giây đầu tiên của mỗi phút, trừ khi số phút có thể chia hết cho 10.

This page cung cấp một số nền lịch sử với công thức để chuyển đổi giữa mã thời gian và số khung.

+0

Kính gửi yannick, bạn đã đọc câu hỏi dưới đây chưa? Vui lòng đọc kỹ ... – Trinimon

+0

Đối với mã thời gian thả khung, thời gian chờ giữa 01: 08: 59: 29 và 01: 09: 00: 02 phải là 1, phải không? – yannick

Các vấn đề liên quan