جان در صنعت تلویزیون کار می کند، جایی که زمان بندی با وضوح کمتر از یک ثانیه انجام می شود. ویدئوی تلویزیونی باید ساعت ها، دقیقه ها، ثانیه ها و فریم ها را در نظر بگیرد. (در هر ثانیه سی فریم وجود دارد.) جان در این فکر بود که آیا راهی برای کنترل فریم ها در اکسل وجود دارد؟
هیچ راهی برای کنترل فریم ها به عنوان بخشی از مقادیر زمانی بومی در اکسل وجود ندارد. (در صنعت تلویزیون، مقدار زمانی که شامل فریمها میشود، اغلب به عنوان «کد زمانی» یا «کد زمانی» نامیده میشود.) با این حال، چند کار وجود دارد که میتوانید برای کار با فریمها انجام دهید. شاید واضحترین پیشنهاد این باشد که ساعتها، دقیقهها و ثانیهها را بهعنوان یک مقدار زمانی منظم نگه دارید و سپس فریمها را در یک سلول جداگانه قرار دهید. اشکال فوری این رویکرد این است که محاسبات برای «زمانهای تلویزیونی» به آسانی اگر در یک مقدار نمایش داده میشدند، نیست.
یک راه حل این است که سعی کنید محاسبات خود را در یک ماکرو انجام دهید. اکسل یک فرآیند داخلی تبدیل زمان ها به مقادیر اعشاری را انجام می دهد که می توان با آن بسیار آسان کار کرد. شما می توانید همین فرآیند تبدیل را شبیه سازی کنید و یک مقدار زمانی (از جمله فریم ها) را به یک مقدار اعشاری تبدیل کنید. زمان تلویزیون، با فرمت 00:29:10:10، می تواند در یک سلول ذخیره شود (که اکسل آن را به عنوان یک رشته در نظر می گیرد) و سپس توسط ماکرو به یک مقدار تبدیل می شود.
البته در اینجا یک مشکل وجود دارد: شما نمی توانید زمان را به یک مقدار اعشاری واقعی بین 0 و 1 تبدیل کنید، همانطور که اکسل برای بارها انجام می دهد. دلیل آن مربوط به محدودیت ارقام قابل توجه اکسل است. برای رسیدن به یک مقدار، باید ساعت ها را بر 24، دقیقه ها را بر 1440 (24 * 60)، ثانیه ها را بر 86400 (24 * 60 * 60) و فریم ها را بر 2592000 (24 * 60 * 60 * 30) تقسیم کنید. شما با سرعت 30 فریم در ثانیه کار می کنید). وقتی شروع به وارد کردن مقادیر بسیار کوچک می کنید، از محدودیت های Excels برای حفظ همه چیز تا پانزده رقم قابل توجه فراتر می رود. بنابراین، شما با خطاهای گرد کردن اجتناب ناپذیر در مقدار فریم ها مواجه می شوید.
یک راه حل برای این مشکل این است که سعی نکنید با مقادیر اعشاری بین 0 و 1 کار کنید، بلکه با اعداد صحیح کار کنید. اگر زمان رشته را به یک مقدار صحیح تبدیل کنید که تعداد کل فریمها را در زمان نشان میدهد، میتوانید به راحتی روی مقدار حاصل محاسبه کنید. ماکرو زیر تبدیل یک رشته را با فرمتی که قبلا ذکر شد انجام می دهد:
Function Time2Num(Raw) As Long
Dim FirstColon As Integer
Dim SecondColon As Integer
Dim ThirdColon As Integer
Dim NumHours As Integer
Dim NumMinutes As Integer
Dim NumSeconds As Integer
Dim NumFrames As Integer
Dim FrameRate As Integer
Dim T2D As Long
Change the following to the number of frames
per second with which you are working
FrameRate = 30
FirstColon = InStr(Raw, ":")
SecondColon = InStr(FirstColon + 1, Raw, ":")
ThirdColon = InStr(SecondColon + 1, Raw, ":")
NumHours = Val(Mid(Raw, 1, FirstColon - 1))
NumMinutes = Val(Mid(Raw, FirstColon + 1, SecondColon - 1))
NumSeconds = Val(Mid(Raw, SecondColon + 1, ThirdColon - 1))
NumFrames = Val(Mid(Raw, ThirdColon + 1, Len(Raw)))
T2D = CLng(NumHours)
T2D = T2D * 60 + NumMinutes
T2D = T2D * 60 + NumSeconds
T2D = T2D * FrameRate + NumFrames
Time2Num = T2D
End Function
برای اینکه ببینید چگونه این کار می کند، اگر رشته ای مانند 37:15:42:06 در سلول A4 دارید و از فرمول =Time2Num(A4) استفاده می کنید، نتیجه مقدار 4024266 است که تعداد فریم ها در 37 است. ساعت و 15 دقیقه و 42 ثانیه و 6 فریم. برای تبدیل چنین مقادیری به زمان قابل درک، می توانید از تابع زیر استفاده کنید:
Function Num2Time(Raw) As String
Dim NumHours As Integer
Dim NumMinutes As Integer
Dim NumSeconds As Integer
Dim NumFrames As Integer
Dim FrameRate As Integer
Dim RemainingTime As Long
Change the following to the number of frames
per second with which you are working
FrameRate = 30
NumHours = Raw (CLng(FrameRate * 60) * 60)
RemainingTime = Raw Mod (CLng(FrameRate * 60) * 60)
NumMinutes = RemainingTime (60 * FrameRate)
RemainingTime = RemainingTime Mod (60 * FrameRate)
NumSeconds = RemainingTime FrameRate
RemainingTime = RemainingTime Mod FrameRate
NumFrames = RemainingTime
Num2Time = Format(NumHours, "00") & ":" & _
Format(NumMinutes, "00") & ":" & _
Format(NumSeconds, "00") & ":" & _
Format(NumFrames, "00")
End Function
با ترکیب این دو تابع، می توانید مقداری ریاضی با زمان انجام دهید. برای مثال، فرض کنید در سلول A4 زمان 00:29:10:10 و در سلول A5 زمان 00:16:12:23 داشتید. اگر فرمول زیر را در یک سلول قرار دهید، می توانید تفاوت بین این دو زمان را دریابید:
=Num2Time(Time2Num(A4)-Time2Num(A5))
نتیجه 00:12:57:17 است.
نمونه های ارائه شده در اینجا ابتدایی هستند. آنها هیچ گونه رسیدگی به خطا یا بررسی محدودیت زمان استفاده را در نظر نمی گیرند. میتوانید نمونهها را متناسب با نیاز خود گسترش دهید، یا میتوانید به منبع شخص ثالث مراجعه کنید. برای مثال، میتوانید توضیحی (همراه با یک نمونه کار) برای زمانهای NTSC و PAL در URL زیر پیدا کنید:
http://www.kenstone.net/fcp_homepage/timecode_spreadsheet.html
راهحلهای مبتنی بر کلان دیگری نیز در سراسر اینترنت شناور هستند. بهترین روش استفاده از موتور جستجوی مورد علاقه خود و جستجوی "timecode excel" یا "time code excel" (بدون نقل قول) است. نمونه های زیادی از کدها را پیدا خواهید کرد که می توانید با آنها شروع کنید.