windows - 将 TIMECODE 转换为帧编号的批处理

标签 windows batch-file

在批处理中,有一个名为 %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%

此代码使用冒号作为分隔符来分割时间码变量内容。为了解决零前缀字段(以八进制形式考虑,并且在 0809 的情况下存在问题)、丢失或格式错误的数据,使用了一些“技巧”。

为了更正小时部分,输入数据以 100 为前缀,并且该字段将以 100 为模进行处理。

为了处理有问题的零前缀字段,输入数据中的冒号后跟零将替换为相同的冒号后跟空格。

为了处理缺失字段的问题,在进行计算时,所有提取的数据都以零为后缀(乘以 10),并且该字段中的运算结果除以 10

关于windows - 将 TIMECODE 转换为帧编号的批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26268335/

相关文章:

visual-studio-2010 - PostBuildEvent 多脚本错误处理

c++ - 使用批处理文件使用 Cmake 和 Msbuild (vs2010) 单击一次构建我的项目

java - 保存时构建和部署

c++ - 2个函数中的不同条件锁定

windows - IF 中的转义字符

windows - 循环中的批处理脚本 "continue"?

windows - 交换文本文件中的部分字符串

python - 如何在 Windows cmd 中传递 *.txt 之类的通配符参数

c++ - 在 Qt 中释放和恢复嵌入窗口

windows - 管道输出时如何在批处理文件中显示消息?