To remove <i> tags, {\an8} blocks, [music] descriptions or speaker names from a subtitle file, run it through a cleaner that edits only the cue text and copies every timing line unchanged. FindUtils Subtitle Cleaner does that for SubRip (.srt) and WebVTT (.vtt) files in your browser: the file is read and cleaned in the tab, not uploaded, and every start and end time comes out exactly as it went in.
This guide covers where the markup comes from, what each of the five options removes (with before and after snippets), why a cue with nothing left is dropped instead of kept blank, and when the problem is timing rather than text.
Where Subtitle Junk Comes From
Markup in a caption file is rarely typed by hand. It is carried in from the source the file was made from.
- Ripped and downloaded tracks. Subtitles extracted from discs, broadcasts or older fansub releases often use HTML-style tags for italics and colour:
<i>,<b>,<font color="#ffff00">. Many desktop players render them; many upload platforms and video editors print them as text. - ASS/SSA exports. Advanced SubStation Alpha scripts position and style lines with override blocks in curly braces.
{\an8}is the alignment override that moves a line to the top centre of the screen (the numbers follow a phone keypad, per the Aegisub ASS override tag reference). When an ASS script is saved as SRT by a tool that copies the text verbatim, those blocks stay in every line. - WebVTT from streaming sites. VTT has its own inline tags:
<c.yellow>for classes,<v Roger>for voices, and<00:00:01.000>timestamps for karaoke-style reveals. - SDH tracks. Subtitles for the deaf and hard of hearing describe sound and name speakers:
[DOOR SLAMS],(applause),♪,NARRATOR:. That is correct content for an SDH track, and clutter if you want plain dialogue captions.
How to Clean a Subtitle File
- Open Subtitle Cleaner and drop an
.srt,.vttor.txtfile on the input card, or paste the text. - Leave the three default options on (HTML tags, ASS overrides, whitespace). Turn on SDH brackets or speaker labels only if you want those words gone.
- Read the preview. The first 10 cues are shown before and after, with removed markup struck through and the timestamps printed as they are in the file.
- Download the result. The file keeps its name with
-cleanedadded, for exampleepisode-04-cleaned.srt, or you can copy the text.
The summary shows cues processed, tags removed, and empty cues dropped, so you can see what changed without diffing the files.
What Each Option Removes
Strip HTML tags (on by default)
Removes any tag that opens with a letter, plus WebVTT karaoke timestamps. The text between the tags stays.
Before: <i>Where were you?</i> After: Where were you? Before: <font color="#ffff00">Stay here.</font> After: Stay here.
A < that does not open a tag is left alone, so 3 < 5 and 7 > 2 survives unchanged.
Strip ASS overrides (on by default)
Removes every curly-brace block that starts with a backslash, including stacked ones such as {\pos(320,50)\fad(200,200)}. The ASS escapes are converted rather than deleted: \N and \n become a real line break and \h becomes a space.
Before: {\an8}{\i1}Previously on...{\i0}
After: Previously on...
Before: First line\NSecond line
After: First line
Second lineA plain {text} without a backslash is not an override and is kept.
Strip SDH brackets (off by default)
Removes anything in square or round brackets and the music notes ♪ and ♫.
Before: [music] Hello again After: Hello again Before: ♪ Sweet dreams are made of this ♪ After: Sweet dreams are made of this
Lyrics between music notes are kept; only the notes go. Because the rule is "anything in brackets", a parenthesis that is part of the dialogue is removed too. Check the preview on a track with a lot of (...) asides before downloading.
Strip speaker labels (off by default)
Removes a label at the very start of a line when it begins with a capital letter, runs to at most four words and ends in a colon followed by text. A dialogue dash is kept.
Before: JOHN: Hi
- MARY: Hey there
After: Hi
- Hey thereDr. Smith: matches; the time is 10:30 now does not, because the colon is not after a leading capitalised label.
Normalize whitespace (on by default)
Collapses repeated spaces and tabs, trims each line, and drops lines left holding nothing a viewer would read, such as a lone - after its speaker label and text were removed.
Why Empty Cues Are Dropped, Not Left Blank
Turn on SDH removal and a cue that held only [applause] has no text left. The cleaner drops that cue and counts it under Empty cues dropped; it never writes a timing line with an empty body.
The reason is structural. In both formats a blank line marks the end of a cue. The W3C WebVTT specification does not allow a cue payload to contain an empty line, and SubRip files use the blank line as the only separator between blocks. A cue written with an empty body, or a cue with a blank line in the middle, makes parsers merge, split or skip the blocks that follow. The same rule applies inside a cue: if <i></i> was the second line, that line is removed rather than left empty.
After a drop, SRT cues are renumbered from 1 so the sequence stays continuous:
Before After (SDH on) 1 1 00:00:01,000 --> 00:00:04,000 00:00:01,000 --> 00:00:04,000 hello hello 2 2 00:00:05,500 --> 00:00:08,250 00:00:05,500 --> 00:00:08,250 [music] Hello again Hello again 3 00:00:12,000 --> 00:00:13,000 [applause]
If the chosen options would empty every cue, as with a file that is all sound descriptions, the page warns you and offers no download instead of producing an empty file.
VTT Stays VTT
A WebVTT file is written back as WebVTT by default. Cue identifiers and cue settings such as line:90% are kept on the timing line:
WEBVTT
00:00:01.000 --> 00:00:04.000 line:90%
<v Roger>{\i1}Hello</v>becomes
WEBVTT 00:00:01.000 --> 00:00:04.000 line:90% Hello
Choose Force SRT to clean and convert in one pass; the cue settings are dropped because SubRip has no place for them. Two things to know: WebVTT NOTE, STYLE and REGION blocks are not copied to the cleaned file, and removing <v Roger> removes the voice information along with it. If you only need a format change with no cleaning, SRT to VTT is the direct route.
When the Problem Is Timing, Not Text
Subtitle Cleaner changes text only. Its timestamps pass through untouched, so it cannot fix a sync problem. Pick the tool by what is wrong:
| Symptom | Tool |
|---|---|
Tags, {\an8}, [music] or names show up as text | Subtitle Cleaner |
| Two lines on screen at once, or a cue flashes by | Subtitle Overlap Fixer |
| Every line is early or late by the same amount | Subtitle Shifter |
| Starts in sync, drifts further out over time | Subtitle FPS Converter |
The source is a full .ass script with styles | ASS to SRT first, then clean |
| You want a plain transcript with no timings at all | SRT to TXT |
When a file needs both a timing fix and cleaning, the order does not matter: cleaning keeps every timestamp, and the timing tools keep the text. For styled ASS sources, the ASS to SRT guide explains what survives the conversion.
Cleaning Through the API
The same cleaner is available as subtitle-clean on the FindUtils REST API and as subtitle_clean on the MCP server, with the same five options and an output_format of same or srt. The response includes counts for cues in, cues out, tags removed, labels removed and empty cues dropped. An API call sends the subtitle text to FindUtils over TLS; the browser page does not.
FAQ
Will cleaning change my subtitle timing?
No. Timing lines are copied exactly. The only structural change is SRT renumbering after a cue is dropped.
Why are SDH and speaker removal off by default?
Both remove words, not just markup. On an SDH track they are exactly what you want gone; on a normal track they can delete a bracketed aside that belongs to the dialogue.
The page says it could not read my file. What now?
One timing line is not in the expected form, and the message gives its line number. Each side needs hours, minutes, seconds and milliseconds, such as 00:00:09,000 --> 00:00:11,300. Fix that line in the paste area and the file is cleaned straight away.
Is my file uploaded?
The page reads and cleans the file in your browser tab and does not send the subtitle text to a server. Like other pages on the site, it loads analytics and ads.