VTT和SRT互转,其实就三步

在线工具、播放器软件、手动改文件,三种方法都给你列好了。看完这篇,以后再也不用来回搜教程。

一、什么时候需要把VTT转成SRT?

VTT是网页上用的标准字幕,但你一旦把视频下载到本地,情况就不一样了。

📥 从网上下载的字幕

YouTube、B站、Coursera这些网站,后台用的是VTT。如果你用插件下载字幕,下来的很可能就是.vtt文件。但你的本地播放器(比如PotPlayer、VLC)虽然能打开VTT,有时候会出现乱码或者时间轴错位。转成SRT最保险。

🎬 导入剪辑软件

Premiere、剪映、Final Cut Pro这些软件,对SRT支持最好。VTT虽然也能导入,但经常出现样式丢失或者时间轴识别错误的情况。先转成SRT再导入,省得折腾。

📱 发给别人

你做好一个字幕文件,要发给朋友或者同事。你不知道对方用什么播放器,给SRT是最安全的选择。给VTT的话,对方可能打不开,或者打开了显示不正常。

反过来,什么时候需要把SRT转成VTT?场景相对少一些,主要是在网页里嵌入视频时需要。比如你用HTML5的<video>标签,字幕必须用VTT格式,SRT浏览器不认。

二、方法一:在线工具,最快最省事

如果你只是偶尔转一两个文件,用在线工具最方便。打开网页,上传文件,点一下转换,下载,完事。

推荐这几个网站:

  • Subtitle Tools (subtitletools.com) - 界面干净,没有广告,支持批量转换,文件大小限制宽松。这是我最常用的。
  • Convertio (convertio.co) - 功能全面,但免费版每天只能转10分钟的视频字幕量。偶尔用用够。
  • Online-Convert (online-convert.com) - 老牌网站,稳定但广告多,需要关掉弹窗。
  • Happy Scribe - 转换质量不错,但需要注册账号,稍微麻烦一点。

操作步骤:

  1. 打开网站,找到VTT to SRT或SRT to VTT的转换入口。
  2. 上传你的字幕文件。
  3. 点击转换按钮,等待几秒钟。
  4. 下载转换好的文件。
注意:在线工具有隐私风险。如果你的字幕文件包含敏感内容(比如未公开的视频对话、商业会议记录),不建议上传到在线网站。用后面的本地软件或手动方法更安全。

三、方法二:用字幕编辑软件,功能最强

如果你经常做字幕,或者对转换精度有要求,用专业软件最靠谱。推荐两个:

Subtitle Edit(免费,Windows)

这是目前最好用的字幕编辑软件之一,开源免费,支持几十种字幕格式互转。

  • 下载安装Subtitle Edit(官网:nikse.dk/subtitleedit)
  • 打开软件,把VTT或SRT文件拖进去。
  • 点“文件” → “导出” → 选择目标格式(SRT或WebVTT)。
  • 设置一下编码(推荐UTF-8),点确定,保存。

Subtitle Edit的优点是:转换时你可以预览时间轴,如果发现偏移可以手动调整。而且它支持批量转换,一次处理几十个文件。

Aegisub(免费,Windows/Mac/Linux)

字幕组常用的工具,功能很强大,但界面有点老。

  • 打开Aegisub,把文件拖进去。
  • 点“文件” → “导出字幕”。
  • 在格式下拉菜单里选“SubRip(.srt)”或“WebVTT(.vtt)”。
  • 点确定,保存。

Aegisub的优点是跨平台,Mac和Linux也能用。缺点是转换VTT到SRT时,VTT里的注释和样式信息会丢失,Aegisub不会给你提示,直接丢掉了。

🎯 选哪个?

Windows用户首选Subtitle Edit,功能全且更新快。Mac用户用Aegisub或者在线工具。Linux用户也是Aegisub。

四、方法三:手动改,适合应急或少量文件

如果你手边没有网络,也装不了软件,可以用记事本手动改。VTT和SRT的区别其实很小,改起来不复杂。

VTT转SRT(手动步骤)

  1. 用记事本打开.vtt文件。
  2. 删掉第一行的“WEBVTT”(如果有注释和空行,也一起删掉)。
  3. 把所有的点号(.)替换成逗号(,)(时间轴里的毫秒分隔符)。
  4. 删掉所有以“NOTE”开头的行(这些是注释,不会显示)。
  5. 删掉时间轴后面跟着的样式定义,比如line:10% position:20%这些东西。
  6. 保存文件,把后缀名从.vtt改成.srt。

举个例子,原来的VTT文件:

WEBVTT NOTE 这是注释 00:00:15.200 --> 00:00:18.600 line:10% 你吃饭了吗?

手动改完之后:

1 00:00:15,200 --> 00:00:18,600 你吃饭了吗?

注意看,序号“1”需要自己加上去,SRT每段字幕必须有序号。如果你有几十句字幕,手动加序号会很累。所以手动改只适合字幕条数很少的情况(比如10句以内)。

SRT转VTT(手动步骤)

  1. 用记事本打开.srt文件。
  2. 在文件最开头加上一行“WEBVTT”,然后空一行。
  3. 把所有的逗号(,)替换成点号(.)
  4. 删掉所有的序号行(就是每段字幕开头的1、2、3这些数字)。
  5. 保存文件,把后缀名从.srt改成.vtt。

SRT转VTT稍微麻烦一点,因为要删掉所有序号。如果你的字幕有几百句,手动删会很痛苦。建议这种情况还是用在线工具或者软件。

小技巧:用记事本的“替换”功能可以批量替换逗号和点号。删序号可以用查找替换,把“数字+换行”替换成空,但容易误删,不推荐新手尝试。

五、进阶:用Python脚本批量转换

如果你有大量文件需要转换(比如几百个字幕),用手动或者在线工具都不现实。写个简单的脚本,一次跑完。

下面这个脚本可以批量把VTT转成SRT。你只需要把脚本和.vtt文件放在同一个文件夹里,运行一下就行。

import re import os def vtt_to_srt(vtt_content): lines = vtt_content.strip().split('\n') srt_lines = [] index = 1 skip_until_empty = False for line in lines: # 跳过WEBVTT头 if line.strip() == 'WEBVTT': continue # 跳过NOTE注释 if line.strip().startswith('NOTE'): continue # 跳过样式定义行 if re.search(r'line:\d+%|position:\d+%|align:', line): continue # 处理时间行 if '-->' in line: # 去掉时间行后面的样式定义 time_part = line.split('-->')[0].strip() time_part2 = line.split('-->')[1].strip().split(' ')[0] # 把点号换成逗号 time_part = time_part.replace('.', ',') time_part2 = time_part2.replace('.', ',') srt_lines.append(str(index)) srt_lines.append(f"{time_part} --> {time_part2}") index += 1 # 处理空行 elif line.strip() == '': srt_lines.append('') # 处理字幕文本 else: srt_lines.append(line) return '\n'.join(srt_lines) # 批量转换文件夹里所有.vtt文件 input_folder = './' for filename in os.listdir(input_folder): if filename.endswith('.vtt'): with open(filename, 'r', encoding='utf-8') as f: content = f.read() srt_content = vtt_to_srt(content) output_name = filename.replace('.vtt', '.srt') with open(output_name, 'w', encoding='utf-8') as f: f.write(srt_content) print(f'转换完成:{filename} -> {output_name}')

使用方法:

  1. 安装Python(如果电脑上没有的话)。
  2. 把上面的代码复制到一个文本文件里,保存为convert.py
  3. 把这个.py文件和你的.vtt文件放在同一个文件夹。
  4. 打开命令行,进入这个文件夹,运行python convert.py
  5. 等几秒钟,所有.vtt文件旁边就会生成对应的.srt文件。

📌 注意

这个脚本只处理了最基础的情况。如果你的VTT文件里有复杂的样式、多轨道、或者非标准的时间格式,脚本可能会出错。建议先用一两个文件测试一下,确认没问题再批量跑。

六、转换过程中常见的坑

🕐 时间轴错位

有时候转换完打开,字幕和声音对不上。这种情况通常是源文件的时间格式不规范导致的。比如VTT里用了00:00:15.2(毫秒只有一位),转成SRT的00:00:15,200就会变成200毫秒,偏差很大。

解决办法:用Subtitle Edit打开,手动调整时间轴,或者用它的“修复时间格式”功能。

🔤 中文乱码

转完之后打开,看到的是一堆问号或者乱码。这是因为编码不对。老一点的SRT文件是ANSI编码(GB2312),VTT标准要求UTF-8。

解决办法:转换时强制选UTF-8编码。如果已经乱码了,用记事本打开,点“另存为”,下面编码选UTF-8,覆盖保存。

🔢 字幕序号乱了

转换后的SRT文件,序号可能是1、1、2、2这样重复的,或者跳号。这是因为转换工具解析VTT时,把空行识别错了。

解决办法:用Subtitle Edit打开,点“工具” → “重新编号”,一键修复。

七、总结

VTT和SRT互转,本质上就是处理三个东西:第一行的WEBVTT、毫秒分隔符(点号还是逗号)、以及序号。搞清楚了这三点,你甚至可以用记事本手动改。

但实际工作中,建议按这个顺序选方法:

  • 偶尔转一两个文件 → 用在线工具(Subtitle Tools最快)。
  • 经常做字幕或者要求精度高 → 用Subtitle Edit(Windows)或Aegisub(Mac)。
  • 文件涉及隐私不想上传 → 用本地软件或者手动改。
  • 有几百个文件要批量转 → 写Python脚本,一劳永逸。
最后提醒:不管用什么方法,转完之后用播放器打开看一眼。时间轴对不对、中文乱没乱、字幕序号连不连续,这三项没问题,基本就稳了。