You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Batch脚本如何计算两个时间变量差值自动获取ffmpeg处理时长

解决方案

原生Windows批处理不支持浮点数运算,可以通过将HH:MM:SS.sss格式时间统一转换为毫秒做整数运算,再拼接为带小数的秒数传入ffmpeg,全程不需要依赖第三方工具,可直接替换原有脚本。

修改后可直接运行的完整脚本

@echo off
:: #################### 仅需修改此处配置即可 ####################
set "start=00:01:52.000"
set "finish=00:02:16.000"
set /A resolution=1080
set /A framerate=60
set /A filesizeinMB=8
:: ###########################################################

:: 自动计算剪辑时长
call :time_to_ms %start% start_ms
call :time_to_ms %finish% finish_ms
set /A duration_ms=finish_ms - start_ms
set /A duration_sec_int=duration_ms / 1000
set /A duration_ms_part=duration_ms %% 1000
:: 毫秒部分补前导零,保证3位长度
if %duration_ms_part% lss 100 set "duration_ms_part=0%duration_ms_part%"
if %duration_ms_part% lss 10 set "duration_ms_part=0%duration_ms_part%"
set "duration=%duration_sec_int%.%duration_ms_part%"

:: 按原逻辑计算码率
set /A bitrate=(%filesizeinMB%*8192)/%duration_sec_int%

:: VP9两遍编码
"%~dp0ffmpeg.exe" -ss %start% -i "%~1" -c:v libvpx-vp9 -an -pass 1 ^
-t %duration% -b:v %bitrate%k -crf 12 -vf fps=%framerate%,scale=-1:%resolution% ^
-auto-alt-ref 1 -lag-in-frames 25 -row-mt 1 -map_metadata -1 ^
-f null NUL

"%~dp0ffmpeg.exe" -ss %start% -i "%~1" -c:v libvpx-vp9 -an -pass 2 ^
-t %duration% -b:v %bitrate%k -crf 12 -vf fps=%framerate%,scale=-1:%resolution% ^
-auto-alt-ref 1 -lag-in-frames 25 -row-mt 1 -map_metadata -1 ^
-f webm "%~dp0%~n1.webm"

pause
exit /b

:: 子函数:将HH:MM:SS.sss格式时间转换为毫秒值
:time_to_ms
for /f "tokens=1-4 delims=:." %%h in ("%~1") do (
    set /a h=%%h, m=%%i, s=%%j, ms=%%k
)
:: 毫秒不足3位时补前导零,避免计算错误
if %ms% lss 100 set "ms=0%ms%"
if %ms% lss 10 set "ms=0%ms%"
set /a %~2=h*3600000 + m*60000 + s*1000 + ms
exit /b

核心逻辑说明

  • 利用for /f的分隔符解析能力,以:和.作为分割标记,把输入的时间字符串拆分为小时、分钟、秒、毫秒4个独立整数值
  • 所有时间统一转换为毫秒做减法,完全规避批处理不支持浮点数运算的缺陷,计算精度和输入时间的毫秒级精度对齐
  • 最终把毫秒差值拆分为整数秒和小数毫秒两部分,拼接为ffmpeg支持的小数格式时长参数,和原有脚本的参数逻辑完全兼容

使用注意事项

  • 输入的start和finish必须严格遵循HH:MM:SS.sss格式,不足位数的部分补前导零,例如5分3秒25毫秒需写为00:05:03.025
  • 修正了原脚本中变量赋值把引号写入变量值的写法问题,避免ffmpeg识别参数时报错
  • 码率计算沿用原脚本的整数运算逻辑,使用时长整数部分计算,不会出现码率偏差

内容的提问来源于stack exchange,提问作者Youcef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:48:23