兼容双行文本和标题含有特殊字符的将VTT格式转为LRC格式的批处理脚本
小铃菜
编辑于 2025年08月25日 20:20

众所周知,有些奥术魔刃的vtt文本是双行的,网上有人写的脚本处理不了。

比如:

4.

00:00:xx.xxx --> 00:00:xx.xxx

文本1

文本2

5.

00:00:xx.xxx --> 00:00:xx.xxx

文本3

……

于是把原脚本改写了一下,这样就能做到兼容双行文本了。

把下面的内容复制到txt文本,然后改后缀为bat,放入同一目录下运行即可。


@echo off

chcp 65001

setlocal EnableDelayedExpansion

:: 遍历当前目录下的所有 .vtt 文件

for %%f in (*.vtt) do (

echo Converting: %%f

:: 获取不含扩展名的文件基本名,并移除可能的后缀,这部分可自行进行增添

set "base_name=%%~nf"

set "base_name=!base_name:.mp3=!"

set "base_name=!base_name:.vtt=!"

set "base_name=!base_name:.wav=!"

:: 创建对应的 .lrc 文件名

set "lrc_file=!base_name!.lrc"

echo. > "!lrc_file!"

set "counter=0"

:: 读取并转换每一行,兼容双行文本(unix文本也可,兼容了部分特殊字符如音符)

for /f "tokens=1* delims=:" %%i in ('type "%%f" ^| findstr /n "^"') do (

set /a counter+=1

if !counter! geq 4 (

if !counter!==4 (

set "ttt=%%j"

)

if !counter!==5 (

set "fff=%%j"

)

if !counter!==6 (

if "%%j"=="" (

echo [!ttt:~3,8!]!fff!>>"!lrc_file!"

set "counter=2"

) else (

echo [!ttt:~3,8!]!fff!>>"!lrc_file!"

echo [!ttt:~3,8!]%%j>>"!lrc_file!"

set "counter=1"

)

)

)

)

if !counter!==5 (

echo [!ttt:~3,8!]!fff!>>"!lrc_file!

)

)

pause

endlocal


按需调整:

VTT中所有空行也被视为计数行。

脚本中从上到下三个计数器(counter)分别控制:初始时间与顶部间隔的行数(即开始行数,默认第4行开始);单行字幕与后方字幕间隔的行数(默认间隔2行);双行字幕与后方间隔的行数(默认间隔2行)。

计数器值+1表示间隔减少1行。

其实就是一些VTT文件没有序列行,如1,2,3……这样的行,此时三个计数器值全部+1,分别设为1、3、2。