SOURCE

console 命令行工具 X clear

                    
>
console
<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>.VTT to .ASS</title>
</head>

<body>
	<div id="result"></div>
	<script>
		// 示例VTT内容
    const vttContent = `
00:00:03.511 --> 00:00:04.394
My <00:00:03.612>name <00:00:03.772>is <00:00:03.872>Victor.

00:00:04.394 --> 00:00:06.020
I'm <00:00:04.495>the <00:00:04.595>creator <00:00:05.057>of <00:00:05.157>EDA <00:00:05.538>Playground.
`;

    // 额外ASS样式
    const style = `{\\shad1\\bord1\\blur2}`;

    // 变色过渡时间(ms)
    const interval = 5;

    // 初始颜色BBGGRR代码(是BGR不是RGB哈,不带#号)
    const SecondaryColour = '808080';

    const PrimaryColour = 'FFFFFF';

    // 输入VTT内容字符串,返回ASS内容字符串
    function convertVTTtoASS (vttContent) {
      // 用来存储转换后的ASS字幕内容
      let assContent = '';

      // 匹配时间戳和文本行的正则表达式
      const regex = /(\d{2}:\d{2}:\d{2}\.\d{3}) --> (\d{2}:\d{2}:\d{2}\.\d{3})\n(.*?)(?=\n\n|\n*$)/g;

      // 转换每一行VTT内容到ASS格式
      let match;
      while ((match = regex.exec(vttContent)) !== null) {
        // 开始和结束时间
        const startTime = match[1].replace('.', ',');
        const endTime = match[2].replace('.', ',');

        // 文本和颜色变化
        let textWithColorChange = match[3]
          // 匹配VTT内部时间戳
          .replace(/<(\d{2}:\d{2}:\d{2}\.\d{3})>(.*?)(?=<\d{2}:\d{2}:\d{2}\.\d{3}>|$)/g, (m, timestamp, text) => {
            // 计算相对时间
            const relativeStartMs = Math.max(0, timeToMs(timestamp) - timeToMs(startTime) - interval);
            return `{\\1c${SecondaryColour}\\t(${relativeStartMs},${relativeStartMs + interval},1,\\1c${PrimaryColour})}${text}`;
          });

        // 添加字幕行到ASS内容
        assContent += `${startTime} --> ${endTime}\n${style}${textWithColorChange}\n\n`;
      }

      return assContent;
    }

    // 将时间字符串转换为毫秒
    function timeToMs (timeStr) {
      const [hours, minutes, seconds] = timeStr.split(':');
      const totalSeconds = parseFloat(seconds.replace(',', '.')); // 转换为秒
      return (parseInt(hours) * 3600 + parseInt(minutes) * 60 + totalSeconds) * 1000; // 转换为毫秒
    }

    // 转换VTT到ASS格式
    const assContent = convertVTTtoASS(vttContent);

    // 在HTML中打印Text3
    document.getElementById("result").innerText = assContent;
	</script>
</body>

</html>