# SRT to Plain Text

Strip cue numbers and timestamps from SRT or WebVTT subtitles and return clean transcript text, with options for tags, sound effects, speaker labels and layout.

## Run it

- **CLI:** `gizza tool srt-to-plaintext "1
00:00:01,000 --> 00:00:04,000
Hello there.

2
00:00:05,500 --> 00:00:07,250
Second caption line."`
- **Web:** https://gizza.ai/tools/srt-to-plaintext/
- **Agents:** machine-readable descriptor (parameters JSON Schema) at https://gizza.ai/tools/srt-to-plaintext/tool.json

## Inputs

- `input` — SRT or WebVTT subtitles _(field)_
- `layout` — Output layout _(field)_
- `strip_tags` — Strip formatting tags _(field)_
- `remove_sound_effects` — Remove [sound effects] and music markers _(field)_
- `remove_speaker_labels` — Remove leading speaker labels _(field)_
- `dedupe` — Collapse consecutive duplicate captions _(field)_

## Output

- Transcript (text)

## Query parameters

Open the tool pre-filled and auto-run via URL:

- `input` — SRT or WebVTT subtitles
- `layout` — Output layout
- `strip_tags` — Strip formatting tags
- `remove_sound_effects` — Remove [sound effects] and music markers
- `remove_speaker_labels` — Remove leading speaker labels
- `dedupe` — Collapse consecutive duplicate captions

Example: `https://gizza.ai/tools/srt-to-plaintext/?input=1%0A00%3A00%3A01%2C000%20--%3E%2000%3A00%3A04%2C000%0AHello%20there.%0A%0A2%0A00%3A00%3A05%2C500%20--%3E%2000%3A00%3A07%2C250%0ASecond%20caption%20line.&layout=lines&strip_tags=true&remove_sound_effects=true&remove_speaker_labels=true&dedupe=true`

---

## About this tool

**SRT to Plain Text** turns subtitle files into readable transcript text. Paste a
SubRip (`.srt`) or WebVTT file and it removes the structural parts of each cue:
cue numbers, timestamp ranges such as `00:00:01,000 --> 00:00:04,000`, blank
separators, WebVTT headers and note/style blocks.

Use it to clean captions before editing a transcript, feeding text into a note
app, summarizing a video, translating dialogue, or removing timestamps from an
exported subtitle file.

### Options

- **Output layout**: one cleaned line per cue, preserve cue blocks, or one flowing
  paragraph.
- **Strip formatting tags**: removes `<i>`, `<b>`, `<font ...>` and ASS/SSA
  override blocks like `{\an8}`.
- **Remove sound effects**: drops bracketed non-speech cues like `[applause]`,
  `(door slams)`, and music-note markers.
- **Remove speaker labels**: strips leading labels such as `NARRATOR:` or
  `- JOHN:`. It is intentionally optional because some real dialogue starts with
  a colon.
- **Dedupe**: collapses consecutive duplicate captions from rolling auto-caption
  exports.

## Worked example

Input:

```srt
1
00:00:01,000 --> 00:00:04,000
<i>Hello there.</i>

2
00:00:05,500 --> 00:00:07,250
[applause] JOHN: Welcome back.
```

With tag stripping, sound-effect removal and speaker-label removal enabled:

```text
Hello there.
Welcome back.
```

## FAQ

<details>
<summary>Does this support WebVTT as well as SRT?</summary>

Yes. It recognizes WebVTT timing lines with dot milliseconds, skips a leading
`WEBVTT` signature, and drops `NOTE`/`STYLE` header blocks. It is not a full VTT
converter; it focuses on extracting transcript text.

</details>

<details>
<summary>Will it remove every timestamp in the file?</summary>

It removes subtitle timing lines shaped like `start --> end` where both sides are
SRT/WebVTT timestamps. Ordinary text that happens to contain a time is kept,
because only cue timing lines are considered structure.

</details>

<details>
<summary>Why are speaker labels optional?</summary>

A leading `NAME:` pattern is a heuristic. It is useful for captions such as
`NARRATOR: It begins`, but it can be wrong if the dialogue itself starts with a
colon-shaped phrase. Leave it off unless your subtitles consistently include
speaker labels.

</details>

<details>
<summary>Can it keep cue breaks instead of making one line per cue?</summary>

Yes. Choose **Preserve cue blocks** to keep the original line breaks inside each
caption and put a blank line between cues. Choose **One paragraph** to join the
whole transcript into a single flowing block.

</details>

## Limits

- This is a text cleaner, not OCR or speech recognition. It needs an existing
  subtitle file.
- It rejects input with no recognizable subtitle timing line instead of echoing a
  random text blob.
- It does not preserve style, positioning, cue IDs, chapter metadata, or VTT cue
  settings; only transcript text is returned.

## Related tools

- [Change Video Speed](https://gizza.ai/tools/change-speed/): Speed up or slow down a video right in your browser, keeping audio in sync — pick a speed factor (0.25x–4x). Re-encodes locally with ffmpeg, nothing is uploaded, free.
- [Extract Video Frames to a Contact Sheet](https://gizza.ai/tools/extract-frames/): Sample frames from a video by interval, fps or scene change and tile them into one contact-sheet image. Free, in your browser with ffmpeg, nothing is uploaded.
- [Gamma Correct an Image](https://gizza.ai/tools/gamma-correct/): Apply gamma correction to image midtones in your browser, with per-channel gamma, highlight protection and PNG/JPG/WebP output options.
- [GIF to MP4 / WebM](https://gizza.ai/tools/gif-to-mp4/): Convert an animated GIF into a much smaller MP4 or WebM video, right in your browser. Re-encodes locally with ffmpeg (H.264 / VP9), nothing is uploaded, free.
- [Loop a Video](https://gizza.ai/tools/loop-video/): Loop a video or GIF into one continuous file — repeat it N times or fill a target duration, free and in your browser with nothing uploaded.
