簡體   English   中英

使用SQL時間碼計算幀

[英]Calculating Frames with SQL timecode

所以我有一個SQL表如下

+---------+-------------+-------------+------------------+-----------------+
| Barcode |    Time1    |    Time2    | Frame for time 1 | Frame for time2 |
+---------+-------------+-------------+------------------+-----------------+
|       1 | 10:20:34.25 | 23:59:59.25 | NULL             | NULL            |
|         |             |             |                  |                 |
+---------+-------------+-------------+------------------+-----------------+

我想要一種方法來計算Time1和Time2的幀,例如以下網站http://www.zapstudio.net/framecalc/以便生成下表

+---------+-------------+-------------+------------------+-----------------+
| Barcode |    Time1    |    Time2    | Frame for time 1 | Frame for time2 |
+---------+-------------+-------------+------------------+-----------------+
|       1 | 10:20:34.25 | 23:59:59.25 | 930880           | 2160000         |
|         |             |             |                  |                 |
+---------+-------------+-------------+------------------+-----------------+

但是在計算幀期間,我希望從另一個表中讀取每個條形碼的幀率

+---------+--------+------------+
| Barcode | Format | Frame Rate |
+---------+--------+------------+
|       1 | 1080p  |         25 |
+---------+--------+------------+

一旦了解了幀速率就是每秒的幀數這一事實,這就是一個簡單的計算。 您只需要將時間轉換為秒,然后在看似小數點之后添加值即可,但這只是其他幀。 以下計算使用時間隱式轉換,但僅限於23:59:59。 如果需要更大的值,可以設置更復雜的轉換。 它也不考慮格式錯誤。

CREATE TABLE #Barcodes(
    Barcode         int,
    Time1           varchar(11),
    Time2           varchar(11),
    FramesForTime1  int,
    FramesForTime2  int
)
INSERT INTO #Barcodes(Barcode, Time1, Time2)
VALUES( 1, '10:20:34.25', '23:59:59.25')
CREATE TABLE #FrameRates(
    Barcode         int,
    Format          varchar(11),
    FrameRate       int
)
INSERT INTO #FrameRates VALUES( 1, '1080p', 25);

SELECT bc.Barcode, 
    bc.Time1,
    bc.Time2,
    DATEDIFF( ss, 0, LEFT( Time1, 8)) * Fr.FrameRate + RIGHT(Time1, 2) AS FramesForTime1, 
    DATEDIFF( ss, 0, LEFT( Time2, 8)) * Fr.FrameRate + RIGHT(Time2, 2) AS FramesForTime2,
    fr.Format,
    fr.FrameRate
FROM #Barcodes bc
JOIN #FrameRates fr ON bc.Barcode = fr.Barcode

GO
DROP TABLE #Barcodes, #FrameRates

我同意建議不要存儲這些值的評論。 但是,您可以創建將在需要時即時計算的計算列。

數學公式為:([小時] * 3600 + [分鍾] * 60 + [秒])* [幀速率] + [毫秒]

這是更新表的代碼:

CREATE TABLE #FramesConfig
    (
        Barcode int,
        Format varchar(8),
        FrameRate int
    )

CREATE TABLE #Frames
(
    Barcode int,
    Time1 time(2),
    Time2 time(2),
    FrameForTime1 int,
    FrameForTime2 int
)

INSERT INTO #FramesConfig
VALUES(1, '1080p', 25)

INSERT INTO #Frames
VALUES (1, '10:20:34.25', '23:59:59.25', NULL, NULL)

UPDATE f
SET FrameForTime1 = DATEDIFF(SS, 0, f.Time1) * fc.FrameRate + RIGHT(f.Time1, 2),
FrameForTime2 = DATEDIFF(SS, 0, f.Time2) * fc.FrameRate + RIGHT(f.Time2, 2)
FROM #Frames f
    INNER JOIN #FramesConfig fc ON f.Barcode = fc.Barcode


SELECT *
FROM #Frames

DROP TABLE #Frames
DROP TABLE #FramesConfig

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM