ASS to SRT
Or paste subtitle text
What this conversion changes
4 things are dropped or need a decision
- Styling
all styling (bold, italic, colour, outline, shadow)
- Positioning
on-screen positioning (every cue returns to the default position)
- Karaoke
karaoke timing (per-syllable highlighting)
- Format-specific content
content the source format keeps outside its cues (non-cue blocks, header text, per-cue settings, commented-out events) — the target format has no place for it
This list comes from the capability matrix for these two formats, not from the particular file you loaded. A specific file may lose more if it uses features the format allows but the matrix does not model.
This page flattens an Advanced SubStation Alpha script into plain SRT. ASS treats a subtitle as text drawn by a styling engine; SRT treats it as a line of text shown between two timestamps. Converting keeps the timeline, rewritten from ASS notation (0:00:01.00) into SRT notation (00:00:01,000), and keeps the words, and it translates the styling that SRT is able to express: an italic run in the script comes out as an italic tag, and a bold run as a bold tag.
What the script says about drawing has nowhere to go. A position on screen, a font, an outline, a shadow and the per-syllable timing of karaoke are all instructions to the renderer rather than text, and SRT has no renderer to instruct. They are dropped rather than smuggled into the cue text as fake markup, and each one is listed below the file box, so the cost is on screen before you commit a file to the conversion.
A whole season is fine: files are worked through one at a time, the run can be cancelled part-way, and everything comes down as a single ZIP. The conversion happens in your browser, so your script is never uploaded.
Examples
A typical ASS file, converted to SRT
Input
[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left
Output
1
00:00:01,000 --> 00:00:04,000
Hello there.
2
00:00:05,000 --> 00:00:08,500
<i>Italic</i> and <b>bold</b> text.
3
00:00:09,000 --> 00:00:12,000
Positioned
4
00:00:13,000 --> 00:00:16,000
<c>ka</c><c>ra</c><c>o</c><c>ke</c>
5
00:00:17,000 --> 00:00:20,000
Line one
Line two
6
00:00:21,000 --> 00:00:24,000
Top left
Dropped in this output: styling, positioning, karaoke and format-specific content. Everything else matches line for line.
The same conversion on an awkward input
Input
[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecodeOutput
1
00:00:01,000 --> 00:00:04,000
Hello, world
2
00:00:05,000 --> 00:00:08,000
{\fad(300,300)}Unmodelled override
3
00:00:09,000 --> 00:00:12,000
Both, wrong order
4
00:00:13,000 --> 00:00:16,500
One decimal centisecond
5
00:00:17,000 --> 00:00:20,000
Soft
break
This is the kind of damage real files have — mixed line endings, stray whitespace, fields left empty. Compare it with the tidy example above to see what the parser forgives.
Frequently asked questions
Where did the positioning go?
SRT has no way to place a cue anywhere on screen — the player decides where subtitles appear. A line carrying an explicit position therefore comes out as an ordinary cue, and the coordinates cannot appear in the output. That is one of the items in the list above.
What happened to my karaoke timing?
Per-syllable karaoke is a timing instruction, not text, and SRT has no matching instruction. The syllables themselves are kept, marked so you can find them, but the durations that made them light up one after another are gone: SRT shows the whole cue at once.
How are the timestamps converted?
ASS writes hours, minutes, seconds and hundredths; SRT writes hours, minutes, seconds and milliseconds. The hundredths are multiplied by ten and the separator changes, so the timeline is preserved to the hundredth of a second — as precisely as the source ever stored it.
What happens to the styles in the script?
They are read, and whatever SRT can express is carried over: the italic and bold settings that a cue's style turns on become tags in the output. Everything else a style carries — font, size, colours, outline, margins — is dropped, because there is no place in SRT for it.
Does it matter that my script uses several styles?
No. Each Dialogue line is read on its own and the style it references is looked up for that line, so a script with a dozen styles converts exactly like one with a single style.