AIStacker
媒体新上线

概览

WebVTT ⇔ SRT 字幕互转工具

在浏览器内双向转换 WebVTT(.vtt)与 SubRip(.srt)字幕文件。自动剥离 VTT 的 cue settings、说话人标签和内联样式。

分类 hub

媒体

问题

5

FAQ

3

WebVTT ↔ SRT 字幕格式转换

在 WebVTT (.vtt) 和 SubRip (.srt) 格式之间互转。自动去除 cue 设置、说话人标签和内联样式,完全在浏览器本地处理。

粘贴或上传文件开始转换

可以解决的问题

I downloaded captions from YouTube as .vtt — how do I get a clean .srt?

YouTube exports VTT with timestamp markers, color classes, and speaker tags that most SRT editors choke on. Paste the VTT into this tool with VTT → SRT mode; the output is plain SRT with all <c>, <v>, and timing-marker tags removed. Save as .srt and import into Subtitle Edit or Aegisub.

I put an SRT file in <track src="..."> but the captions don't show — why?

HTML5 <track> elements only support WebVTT. Browsers ignore .srt files even if the path is correct. Convert your SRT to VTT here, save with a .vtt extension, and update the src. The captions will load on next page reload.

Why does my VTT file say timestamps are invalid even though the format looks right?

WebVTT requires period decimals (00:00:01.000), while SRT requires commas (00:00:01,000). Mixing them silently breaks parsers. Convert through this tool to normalize the decimal separator instead of fixing it by hand and missing one.

How do I strip <v Speaker> speaker tags from a VTT file?

Convert the VTT to SRT through this tool — <v> blocks are stripped automatically while the inner text is preserved. If you need to keep the file as VTT but without speaker tags, convert VTT → SRT and then SRT → VTT in two passes.

My VTT has NOTE comments — will they appear in the SRT output?

No. NOTE, STYLE, and REGION blocks are dropped during VTT → SRT conversion because SRT has no equivalent. If you rely on NOTE blocks for editorial review, keep a copy of the original VTT alongside the SRT export.

该工作流相关指南

Supporting guides that connect this tool to the broader category workflow.

打开分类 hub

是什么

WebVTT ⇔ SRT 字幕互转工具 是什么

WebVTT and SRT look almost identical at a glance, but they are not interchangeable in practice. VTT supports cue settings (line:90%, vertical:rl), inline tags (<v Speaker>, <c.classname>), NOTE and STYLE blocks, and uses period decimal separators. SRT supports none of that — it expects pure cue blocks with comma decimals.

This converter handles both directions cleanly. Going VTT → SRT, it strips the WEBVTT header, drops NOTE/STYLE/REGION blocks, removes cue identifiers and settings, and rewrites every timestamp from period to comma. Going SRT → VTT, it prepends the WEBVTT header and rewrites the decimal separators. The output stays cue-accurate so downstream tools can consume it directly.

如何使用

如何使用WebVTT ⇔ SRT 字幕互转工具

1. Pick a direction: VTT → SRT or SRT → VTT.

2. Paste subtitle text into the left pane, or upload a .vtt / .srt file.

3. Output is generated instantly on the right.

4. Copy or download with the correct extension.

使用示例

使用示例

VTT input:
00:00:01.000 --> 00:00:03.500 line:90%
<v Speaker>Hello world</v>

SRT output:
1
00:00:01,000 --> 00:00:03,500
Hello world

常见使用场景

常见使用场景

1. Convert YouTube auto-caption downloads (VTT) to SRT for editing in a desktop subtitle tool.

2. Convert SRT released by translators to VTT for HTML5 video embedding via <track src=…>.

3. Strip VTT cue settings before feeding a translation memory tool that does not understand them.

4. Prepare clean SRT for upload to platforms that reject the VTT speaker/style tags.

常见问题

常见问题

What happens to VTT cue settings like line:90% or vertical:rl?v
They are dropped. SRT does not support positioning hints. If you need positioning preserved, target an ASS workflow instead — ASS supports per-cue positioning natively.
Will my SRT cue numbers be preserved when converting to VTT?v
VTT cue identifiers are optional, and your SRT numbers are not carried over by default. VTT renderers do not require them, and adding them can confuse some HLS muxers. If you need stable cue IDs, add them manually after conversion.
Does this support VTT files with multiple cues sharing the same timestamp?v
Yes. Each cue block is parsed independently and emitted as its own SRT entry with sequential numbering, regardless of timestamp collisions.