2014-10-09 56 views
2

有稱爲%時間代碼%,如果時間碼存在,並且被定義一個envoroment變量,輸出這種類型的字符串:批次轉換TIMECODE到框架中一個批號

HH:MM:SS:FF 

例如1點32 :21:05

在PAL模式下,25fps的,想轉換該時間代碼在他的通訊員幀編號,對於rxample在01的情況下:32:21:05 138530

所以轉換處理應輸出138530

Another examples: 00:00:00:00 ----------------> 0 
00:00:00:01 ----------------> 1 
........ 
00:00:00:24 ----------------> 24 
00:00:01:00 ----------------> 25 
00:00:01:01 ----------------> 26 

等 我該怎麼辦?

+1

分能告訴你的你寫的代碼到目前爲止? – foxidrive 2014-10-09 00:39:00

回答

1
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "frameRate=25" 

    set "timecode=01:32:21:05" 

    for /f "tokens=1-4 delims=:" %%a in (
     "100%timecode::0=: %"  
    ) do set /a "frame=((%%a %% 100)*3600 + (%%b0)*60/10 + (%%c0)/10) * %frameRate% + (%%d0)/10" 

    echo %frame% 

此代碼分割使用冒號作爲分隔符的時間代碼變量內容。爲了解釋零前綴字段(以八進制形式考慮並且在0809的情況下有問題),缺少或不良的格式化數據,使用一些「技巧」。

要糾正小時部分,輸入數據的前綴100並且這個字段將被處理模100

爲了處理有問題的零個前綴字段,一個冒號隨後在輸入數據中的零被替換用相同的冒號跟一個空格。

處理與失蹤領域的問題,做所有提取的數據後綴有一個零(10 mutiplying吧)Calcs(計算),並在這一領域運作的結果時,由10

+0

謝謝!!!!!!!!!!!! – user3572760 2014-10-09 07:37:10

+1

+1,但我不明白爲什麼一個字段會丟失,所以不需要追加0和除以10.同時,由於在SET/A中,幀率不需要擴大。如果將時間碼值複製到具有冒號前綴的新變量,您可以將小時與其他字段相同處理。 – dbenham 2014-10-09 11:39:08

+0

@dbenham,我的錯在解釋它,缺少的字段可以存在,因爲用':0'代替只有一個零(壞的初始格式)的字段。由於幀速率值在解析時間是已知的,所以我放棄擴展,而不是等待'set'評估中的解析。我懷疑小時處理。最後,我決定採用另一種處理數據的方式。 – 2014-10-09 11:47:54

1
@ECHO Off 
SETLOCAL 
SET "timecode=01:32:21:05" 
IF DEFINED timecode (
SET /a result=((1%timecode:~0,2%-100^) * 90000^) + ((1%timecode:~3,2%-100^) * 1500^) + ((1%timecode:~6,2%-100^) * 25^) + (1%timecode:~-2%-100^) 
) ELSE (SET "result=NOT defined") 
ECHO result with timecode="%timecode%" is %result% 

SET "timecode=" 
IF DEFINED timecode (
SET /a result=((1%timecode:~0,2%-100^) * 90000^) + ((1%timecode:~3,2%-100^) * 1500^) + ((1%timecode:~6,2%-100^) * 25^) + (1%timecode:~-2%-100^) 
) ELSE (SET "result=NOT defined") 
ECHO result with timecode="%timecode%" is %result% 

GOTO :EOF 

這應該指向你的解決方案。

請注意,因爲set命令位於塊內,所以只需在)之前插入插入符號(^)。如果您選擇goto標籤,如果timecode未定義,則不需要插入符號。

我已選擇使用直接法計算總和;將1添加到這兩個數字中,然後減去100(這會處理08/09問題 - 前導0被定義爲八進制,而cmd將反對非八進制字符)通過使用magic numbers可以使該例程變得更簡單,但是這需要更多的解釋。