在批处理中,有一个名为 %timecode% 的环境变量,如果时间码存在并且已定义,则输出以下类型的字符串:
HH:MM:SS:FF
例如 01:32:21:05
在PAL模式下,25fps,我想将这个时间码转换为他对应的帧号,对于01:32:21:05的情况下的rxample是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
等等 我该怎么办?
最佳答案
@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%
此代码使用冒号作为分隔符来分割时间码变量内容。为了解决零前缀字段(以八进制形式考虑,并且在 08
或 09
的情况下存在问题)、丢失或格式错误的数据,使用了一些“技巧”。
为了更正小时部分,输入数据以 100
为前缀,并且该字段将以 100 为模进行处理。
为了处理有问题的零前缀字段,输入数据中的冒号后跟零将替换为相同的冒号后跟空格。
为了处理缺失字段的问题,在进行计算时,所有提取的数据都以零为后缀(乘以 10),并且该字段中的运算结果除以 10
关于windows - 将 TIMECODE 转换为帧编号的批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268335/