Subtitle Converter
Convert between SubRip (.srt), WebVTT (.vtt), Advanced SubStation (.ass/.ssa) and a plain transcript — and see exactly what is wrong with the file before you deliver it. Broken encodings are repaired, tags are handled the way you choose, and nothing leaves your machine.
Which subtitle format do you actually need
Four formats cover essentially all subtitle work, and the choice is usually made for you by whatever has to read the file. The last column is what this tool can do with each one, computed from the parser rather than typed out — so it cannot claim a capability the code does not have.
| Format | Where it works | What it carries | Here |
|---|---|---|---|
| SubRip .srt | Everything. VLC, mpv, Premiere, Resolve, YouTube, Vimeo, every TV and every phone. | Timing and text. Italics and bold in practice, positioning rarely. | Read and write |
| WebVTT .vtt | The web: HTML <track>, HLS and DASH streams, YouTube, most JS players. | Timing, text, cue positioning and alignment, plus CSS styling most players ignore. | Read and write |
| Advanced SubStation Alpha .ass | VLC, mpv, MKV containers, fansub and anime workflows, Aegisub. | Everything: named styles, fonts, colours, absolute positioning, karaoke word timing, animation. | Read and write |
| SubStation Alpha .ssa | Older players and archives. Superseded by ASS almost everywhere. | The same idea as ASS with fewer style fields and no v4+ tags. | Read only |
| Plain transcript .txt | Documents, translation briefs, show notes, anything that wants words rather than captions. | The words. No timing at all, which is why it cannot be read back. | Write only |
A plain transcript is a one-way street. It has no timecodes, so once the words are separated from their timings there is nothing to read back — which is why it appears as a target and never as a source.
Why your subtitles look like привет
A subtitle file is plain text and carries no declaration of its own character set. Nothing inside .srt says "this is Windows-1251". So every program that opens one has to guess, and the modern guess is UTF-8.
When the file really is UTF-8 that works. When it is not — and Cyrillic, Western European and Japanese subtitles from before about 2015 usually are not — each byte of the original is read as a separate character, and one letter becomes two. That is mojibake, and it is not damage: the bytes are intact and the file is perfectly repairable by reading it again with the right table.
This tool tries strict UTF-8 first, because a legacy codepage almost never forms a valid multi-byte UTF-8 sequence — so if strict decoding succeeds, it is right. Only when that fails does it score the candidates below by counting implausible characters, and it always says which one it picked and offers you the others.
| Encoding | Where it comes from | What you see instead |
|---|---|---|
| UTF-8 | Anything made this decade, and everything this tool writes. | None — this is the one that is already right. |
| windows-1251 | Russian, Ukrainian, Bulgarian and Serbian subtitles from fansub sites and older TV rips. | привет — Cyrillic read as two Latin characters each. |
| windows-1252 | French, German, Spanish and Portuguese files written on Windows before UTF-8 was the default. | café — one accented letter read as two. |
| shift-jis | Japanese subtitles from Windows-era software and DVD rips. | Question marks, boxes, or a run of unrelated kanji. |
Checked August 2026 — the codepages listed here are exactly the ones the decoder scores, so this table cannot promise a repair the tool does not perform.
What is lost converting ASS to SRT
ASS is a styling language; SRT is timings and text. Converting down is lossy by definition, and the honest thing to do is name the loss rather than let it be discovered on delivery.
| From | To | Kept | Lost |
|---|---|---|---|
| ASS / SSA | SRT | Every cue's timing and text; italics and bold; the {\an} corner a cue sits in. | Named styles, fonts and sizes, colours as styles, absolute {\pos} placement, karaoke word timing, animation. |
| ASS / SSA | WebVTT | Timing, text, italics and bold, and the corner as a line/align cue setting. | The same as above. WebVTT can carry CSS, but almost no player applies it. |
| SRT | ASS | Everything the SRT had. The output declares one Default style at 1920×1080. | Nothing — but it is a minimal valid subset, not a full ASS project. |
| SRT / VTT | WebVTT / SRT | Everything. The two formats differ by a header, a separator and a numbering scheme. | Nothing. |
| Any | Plain text | The words, one paragraph per cue, with repeated rolling-caption lines collapsed. | All timing, and it cannot be read back — a transcript has no timecodes. |
Writing ASS is a minimal valid subset: a [Script Info] header, one [V4+ Styles] entry at 1920 × 1080, and Dialogue: lines. It opens in VLC, mpv and Aegisub, and it is not a round trip — an ASS project with a dozen named styles will not come back out the way it went in, and this tool says so rather than implying otherwise.
Tags: keep, convert or strip
Subtitle text carries two kinds of markup. HTML-style tags — <i>, <b>, <u>, <font color> — come from the SRT and WebVTT world. Brace tags — {\i1}, {\an8}, {\pos(x,y)} — come from ASS, and turn up inside SRT files constantly because players honour them.
{\an8} means "top centre". A converter that treats cue text as an opaque string copies it straight through and it renders as five literal characters in front of the dialogue. That is the single most visible bug in this category, and it is why this parser reads the tags out into the cue's own alignment instead.
| Policy | To SRT | To WebVTT | To ASS |
|---|---|---|---|
| Keep | <i>, <b>, <u>, <font color> and {\an} positioning, as the source had them. | The same tags, plus positioning as line: and align: cue settings. | Rewritten as ASS overrides: {\i1}, {\b1}, {\c&H…&}, {\an}. |
| Convert | Styling tags only. {\an} positioning is dropped, since SRT does not define it. | <i>, <b>, <u> and cue settings. <font color> is dropped — it is not in the spec. | The same as Keep. ASS defines all of it natively. |
| Strip | Nothing but the words. | Nothing but the words. | Nothing but the words. |
Positioning that cannot be expressed as one of nine anchored corners — {\pos}, {\move}, {\clip} — is removed and reported, never approximated. Those coordinates are measured against a virtual canvas declared in the file's own header, and inventing a position from them would be a guess presented as a fact.
Frequently asked questions
What is the difference between SRT and VTT?
Almost nothing. WebVTT starts with a WEBVTT header, separates seconds from milliseconds with a full stop instead of a comma, and drops the numbered index in front of each cue. It also defines cue positioning and CSS styling that SRT has no syntax for. SRT plays in every player ever made; VTT is what the web's <track> element, HLS and DASH expect.
Why is my subtitle text garbled, and what does the encoding picker do?
A subtitle file is plain text with no header saying which character set it uses, so a player that guesses UTF-8 on a file written in Windows-1251, Windows-1252, Shift-JIS shows every accented or Cyrillic letter as two wrong ones. This tool tries strict UTF-8 first, and when that fails it scores the likely codepages and picks the least implausible one. The picker lets you overrule it, and re-reads the original bytes each time rather than guessing again from a bad guess.
Does styling survive converting ASS to SRT?
Italics, bold and the corner a cue sits in survive. Named styles, fonts, sizes, colours, absolute {\pos} placement and karaoke word timing do not — SRT has no syntax for any of them. The converter reports every tag it dropped rather than removing them quietly, so you know what changed before you deliver the file.
Is my subtitle file uploaded anywhere?
No. The file is read, decoded, parsed and written entirely inside your browser tab. There is no upload, no server round trip and no account. You can open the network tab and watch nothing happen, or disconnect from the internet after the page loads and it will still work.
What is {\an8} and why does it show up as text in other converters?
It is an ASS override tag meaning 'put this cue at the top centre of the frame'. It is common inside SRT files too, because players honour it. A converter that treats a cue's text as opaque copies the tag straight through, and it appears on screen as literal characters. Here it is parsed out and turned into the cue's alignment, then rewritten in whatever syntax the target format uses — or dropped, if you pick Strip.
How large a subtitle file can this handle?
Up to 5 MB and 20,000 cues, which is far beyond any real subtitle file — a feature-length SRT is well under a megabyte and runs to two or three thousand cues. The limits exist to catch a video file dropped in by mistake, not to ration the tool.
A warning appeared but the file still converted. Should I worry?
Usually not. Warnings describe things worth knowing about your source — overlapping cues, cues written out of order, a guessed encoding, a dropped tag — and none of them stop the conversion. They exist because a converter that silently 'fixes' your file is worse than one that tells you what it found and lets you decide.