Turn WebVTT (.vtt) subtitles into Advanced SubStation Alpha (.ass) in a few clicks—right in your browser.
.vtt (WebVTT) file from your device. You can also paste cue text directly. Batch upload is supported — drop a folder of episode captions and convert them in one pass..ass). The converter rewrites VTT cues into an ASS [Events] block with a default Style: Default entry — Arial 20pt, white primary with a black outline — so the file opens cleanly in Aegisub, mpv, VLC, and any libass-backed player.HH:MM:SS.mmm while ASS uses H:MM:SS.cc (centiseconds, one less digit of precision). Re-check any cue that ended on a sub-10 ms boundary. VTT <b>, <i>, and <u> tags are mapped to ASS override tags {\b1}, {\i1}, and {\u1}; cue settings like line: and position: become \an alignment plus \pos(x,y) overrides..ass file is generated in your browser session — nothing is uploaded to a server. No sign-up, no watermark, no email gating.WebVTT is the web's native caption format — it's what HTML5 <track> elements expect and what YouTube exports — but it tops out at basic italics/bold and CSS-driven positioning that few players honour outside the browser. Advanced SubStation Alpha, evolved from SSA (SubStation Alpha), created by CS Low ("Kotus") in 1996, and now the de-facto standard in the Aegisub/libass ecosystem, gives you per-cue font choices, ARGB colours, drop shadows, karaoke timing, fade animations, and pixel-accurate \pos(x,y) placement. Converting VTT to ASS unlocks all of that without retiming a single cue.
.ass natively but cannot edit .vtt directly; convert first, then style.subtitles filter and HandBrake's "Burn In" option render ASS overrides (colour, outline, position, animation) onto pixels. VTT loaded into the same filter chain renders flat white text with no styling..ass since the early 2000s. If you're contributing to a release thread or remuxing into an MKV, ASS is the expected track format.<v Alice> speaker cues from VTT into separate ASS Style: entries (e.g., Alice in yellow, Bob in cyan) so dialogue is instantly readable in multi-character scenes.line:90%, position:50% maps to ASS {\an2\pos(640,648)}, giving you pixel-level control that survives transcodes into MKV/MP4 muxed subtitle tracks.Need the reverse direction or a different starting point? Try ASS to VTT to ship Aegisub output back to the web, VTT to SRT for the broadest player compatibility, VTT to SSA for legacy SubStation Alpha targets, or SRT to ASS if you start from YouTube downloads.
| Property | VTT (WebVTT) | ASS (Advanced SubStation Alpha) |
|---|---|---|
| File extension | .vtt |
.ass |
| MIME type | text/vtt |
text/x-ssa (de facto) |
| Standard / origin | W3C Candidate Recommendation Draft, originated as WebSRT at WHATWG ~2010 | Community spec, evolved from SSA (SubStation Alpha), created by CS Low ("Kotus") in 1996 |
| Timestamp format | HH:MM:SS.mmm (millisecond precision) |
H:MM:SS.cc (centisecond precision, ~10 ms) |
| Native styling | Italic, bold, underline, ruby; CSS via <style> blocks |
Fonts, sizes, ARGB colours, outline, shadow, bold/italic/underline, rotation, scale, fade |
| Positioning | Cue settings: line, position, align, size |
\an1–\an9 alignment plus \pos(x,y), \move, \org |
| Animation / karaoke | None natively | Fades (\fad), movement (\move), syllable karaoke (\k, \kf, \ko) |
| Drawing primitives | None | Vector drawing commands (\p1) for masks and shapes |
| Designed for | Web <track> element, HTML5 captions |
Fansub typesetting, hardcoded subtitle burning, MKV/MP4 soft subs |
| Typical players | Chrome, Firefox, Safari 14.1+, Edge | mpv, VLC, MPC-HC, Aegisub, anything linking libass |
| Editor of choice | Subtitle Edit, web text editor | Aegisub |
| VTT input | ASS output | Notes |
|---|---|---|
<i>, <b>, <u> inline tags |
{\i1}…{\i0}, {\b1}…{\b0}, {\u1}…{\u0} |
Inline italics/bold/underline carry over cleanly |
<c.classname> colour classes |
Default style; mapped to Style: if a matching name exists |
CSS-defined colours don't carry unless you provide an ASS style block |
<v Speaker> voice tags |
Speaker label prefix or named Style: (one per voice) |
Pick whether you want each speaker as their own style |
Cue line: / position: |
\an alignment + \pos(x,y) override |
VTT percentages translate against PlayResX/PlayResY in the ASS header |
<ruby> ruby annotations |
Inline parenthesised text | ASS has no native ruby — closest is parentheses or paired styles |
NOTE blocks |
Comment: events |
Preserved but ignored at playback |
REGION blocks |
Mapped to a Style: with margins |
Region IDs become style names |
STYLE CSS blocks |
Lost unless mapped manually | ASS uses its own [V4+ Styles] section, not CSS |
Inline <b>, <i>, and <u> tags map directly to ASS override tags {\b1}, {\i1}, and {\u1} and survive 1:1. VTT cue positioning (line:, position:, align:) is translated to ASS \an alignment plus \pos(x,y) overrides using PlayResX/PlayResY from the ASS header. Custom CSS defined in VTT STYLE blocks does not carry over — ASS uses its own [V4+ Styles] section instead, so plan to add styles in Aegisub after conversion.
The original SubStation Alpha format from the late 1990s used H:MM:SS.cc (centiseconds, two-digit precision after the dot) and ASS inherited it for backward compatibility. WebVTT uses HH:MM:SS.mmm (milliseconds). The converter rounds to the nearest centisecond, so a cue ending at 00:00:05.123 becomes 0:00:05.12. For frame-accurate work above 100 fps you may want to re-time inside Aegisub.
Yes. The output includes a valid [Script Info] header (with ScriptType: v4.00+, default PlayResX: 1920, PlayResY: 1080), a [V4+ Styles] section with a Default style (Arial 20pt, white primary, black outline) and an [Events] section with one Dialogue: line per VTT cue. Aegisub 3.x and 4.x both load this without conversion prompts.
VTT was designed for the web — players like Chrome and Safari render it inside the <video> element with limited styling. The moment you want to typeset karaoke, position a caption to dodge a lower-third, animate a fade, change fonts mid-line, or burn the result into the video pixels with FFmpeg or HandBrake, ASS is the only mainstream format that exposes those primitives. Aegisub and other typesetting tools also work natively in ASS.
mpv and VLC both render ASS via libass, the same underlying library, so styling, positioning, fonts (when the fonts are installed), karaoke, and animations look essentially identical. Plex supports ASS playback in direct play and in transcoded streams that keep the subtitle as a soft track, but some Plex client apps (older Roku, some smart TVs) cannot render ASS and will fall back to a stripped SRT representation — burn the subs in with FFmpeg if you need styling everywhere.
Yes for MKV — mkvtoolnix muxes ASS tracks natively and most players honour the styling. MP4 is trickier: the MP4 spec only standardises 3GPP timed text and tx3g, so muxing ASS into MP4 is non-standard and many players (including QuickTime and most smart TVs) won't render it. For MP4 distribution, either burn the ASS into the video, or convert to ASS to VTT and use the VTT as a sidecar.
YouTube re-processes uploaded captions and strips most styling, so the .vtt you download from YouTube is essentially plain text + timestamps. The converter can only map what's present — if the source has no colour or position cues, the ASS output will be plain Default style. Add styling afterwards in Aegisub if you want coloured speaker labels or positioned signs.
Yes. Drop every .vtt file onto the uploader, click "+ Add Files" to append more, and convert in a single pass. Files process in your browser session and download as a ZIP. Filenames are preserved so s01e01.en.vtt becomes s01e01.en.ass, which is the convention mpv, Jellyfin, and Plex look for when picking up sidecar subtitles.
No. This converter is browser-only (CLIENT_ONLY in our config) — parsing, mapping, and .ass generation all happen in JavaScript inside your tab. Nothing is sent to xconvert servers, so it's safe to use with unreleased episode scripts, contractual NDA material, or unpublished translations.