众所周知,有些奥术魔刃的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。