Subtitle Studio
Convert SRT, VTT, ASS and SBV; shift, re-sync, fix overlaps, wrap lines and check CPS.
Try an example: Clean an SRT: remove [music] tags, wrap at 42, fix overlaps, export WebVTT · Re-sync a drifting WebVTT by two points and save as SRT · Shift an SRT 1.5 s earlier
How it works
Parses SRT, WebVTT, ASS/SSA (basic) and YouTube SBV subtitles and converts between them. Shift all times, re-sync by two reference points (fixes drifting subtitles), fix overlaps with a minimum gap, wrap or merge lines, remove hearing-impaired tags like [music] or (sighs), and get a reading-speed (characters per second) report and validation errors with line numbers.
- The format is detected from the content (WEBVTT header, [Script Info]/Dialogue lines, "-->" timing lines, or SBV "start,end" lines). Files are decoded as UTF-8 or UTF-16 with BOM, falling back to Windows-1252.
- Each block is validated: missing or out-of-sequence numbers, malformed timing lines, end before start, empty cues, cues longer than 10 s and overlaps are reported with the line number in your file. Broken blocks are skipped, not guessed.
- Operations run in this order: remove hearing-impaired tags → merge lines → wrap/split long lines → two-point sync → shift → fix overlaps. Two-point sync maps time linearly: t′ = T₁ + (t − S₁) × (T₂ − T₁) ÷ (S₂ − S₁), where S are the current and T the wanted start times of the two reference cues; it corrects both offset and drift (frame-rate mismatch).
- Line wrapping first tries two balanced lines split near the middle, otherwise wraps greedily; cues needing more lines than allowed are split into consecutive cues with time shared by text length.
- Reading speed = visible characters (without markup and line breaks) ÷ display time in seconds. ASS output uses one default style; ASS input styles, positions and effects are dropped (italic/bold are kept as <i>/<b>). SRT keeps <i>, <b> and <u>.
Sources
- WebVTT: The Web Video Text Tracks Format (W3C)
- SubRip (.srt) format description (Wikipedia)
For scripts and AI agents
- JSON API:
POST https://subtitlestudio.usefulweb.site/api/v1/calculate(same calculation as this page) - Interface description: OpenAPI 3.1 · AI guide: llms.txt
- MCP server (Streamable HTTP):
https://subtitlestudio.usefulweb.site/mcp· tool namesubtitle_studio
Example request
curl -s -X POST https://subtitlestudio.usefulweb.site/api/v1/calculate \
-H 'content-type: application/json' \
-d '{"text":"1\n00:00:01,000 --> 00:00:03,200\n[MUSIC PLAYING]\nHello there!\n\n2\n00:00:03,000 --> 00:00:05,500\nJOHN: (sighs) This line is quite a bit longer than forty-two characters and needs wrapping.\n\n3\n00:00:06,000 --> 00:00:06,400\nToo fast to read comfortably.\n","outputFormat":"vtt","removeHi":true,"maxLineLength":42,"fixOverlaps":true,"minGapMs":80}'Related tools
- Universal Video Converter – Convert video to MP4, WebM, MOV or MKV: resize, set quality and fps, or remux losslessly.
- Video Cutter & Merger – Trim video, remove a section or join clips: lossless copy or frame-exact re-encode.