Start a project →

Is my SRT or VTT file right for YouTube? Free subtitle checker

YouTube accepts both SubRip (.srt) and WebVTT (.vtt). For .srt, YouTube Help says only basic files are supported, no style markup is recognized and the file must be plain UTF-8. Open or paste your file below: the checker lists broken timecodes, overlaps, cues out of order and empty cues with their line numbers, flags captions that are too fast to read (over 17 characters per second by default), and can shift the timings, fix overlaps and convert SRT to VTT. Nothing is uploaded.

Updated · Built by Kevin Tabares, long-form YouTube editor at Umbrella Creators. Caption formats from YouTube Help, read October 19, 2026.

Check a subtitle file

Your captions stay on your device. The file is read and checked in this tab. Nothing is uploaded or saved.

Example file: made up, with a few problems on purpose
Reading speed limit
Characters per second. 17 and 20 are Netflix's English limits for children's and adult programs; 15 is a stricter choice.
Result
cues
covered
over the limit
worst cue

    Fix and save

    ms (negative = earlier)

    Fix overlaps ends the earlier cue 2 frames before the next one starts. Saving writes plain UTF-8 without a byte order mark, keeps your line endings and numbers SRT cues 1, 2, 3 in order.

    How to use the subtitle checker

    1. Open your .srt or .vtt file, or paste it into the box. The file that loads first is a made-up example with a few problems on purpose, so you can see what the results look like.
    2. Read the result. Errors are timings that are broken or contradict each other. Warnings are reading speed and layout guidelines.
    3. Click a problem to jump to its line in the box, and fix it there. The check runs again as you type.
    4. Use the fixes if they help: shift every timing by a number of milliseconds, trim overlapping cues, or sort the cues by time and renumber them. Undo takes back the last fix.
    5. Save as .srt or .vtt. Saving in the other format converts the file: SRT to VTT adds the WEBVTT header and dots in the timecodes, VTT to SRT drops the cue settings and keeps only the <b>, <i> and <u> tags.

    What the checker looks for

    CheckFlagged whenTypeBased on
    Timecode can't be readThe line has --> but the times are not in a time formatErrorSubRip and WebVTT formats
    End before startA cue ends before, or at the same moment, it startsErrorW3C WebVTT: the end time must be greater than the start time
    Cues out of orderA cue starts before the cue above itErrorW3C WebVTT: cues are ordered by start time
    OverlapA cue starts before an earlier cue has endedErrorTwo cues timed for the same moment
    Empty cueA cue has a timecode but no textErrorNothing to show
    Not UTF-8The file bytes are not valid UTF-8 (opened files only)ErrorYouTube Help: .srt must be plain UTF-8
    Too fast to readMore than 17 characters per second (or the 15 or 20 you pick)WarningNetflix English (USA): up to 17 for children's programs, 20 for adult programs
    Line too longA line has more than 42 charactersWarningNetflix English (USA): 42 characters per line
    Too many linesA cue has more than 2 linesWarningNetflix English (USA): maximum two lines
    Too shortOn screen less than 5/6 of a second (0.83 s)WarningNetflix General Requirements: minimum 5/6 of a second
    Too longOn screen more than 7 secondsWarningNetflix General Requirements: maximum 7 seconds
    Gap under 2 framesA cue starts less than 2 frames after the previous one endsWarningNetflix Subtitle Timing Guidelines: minimum of 2 frames between subtitles

    The reading speed and layout numbers come from Netflix's timed text style guides for English (USA). They are guidelines for subtitles, not YouTube rules: YouTube Help lists the caption formats it accepts but does not set a reading speed or a line length. Characters are counted with spaces and punctuation, without line breaks and without tags such as <i>; other tools may count slightly differently.

    How I check a caption file as an editor

    When captions come with a video I edit, I check them after the cut is locked, not before. If the cut changes after the captions were made, every caption after the change is off by the length of what was added or removed. One shift for the whole file fixes captions that are all early or late by the same amount. A file that drifts more and more along the video was timed to a different cut or frame rate, so I go back to the final export instead of shifting.

    Next I look at reading speed. Fast talk turns into captions with a lot of text in very little time: 60 characters in 2 seconds is 30 characters per second, close to twice the 17 this checker uses by default. I split those into two cues at a natural pause instead of squeezing them. Then the layout: two lines at most and no line over 42 characters.

    Last, the small things that stop a file from reading cleanly: a dot instead of a comma in SRT timecodes, a missing blank line between cues, or a file saved in a Windows encoding instead of UTF-8. The checker points to the exact line of each one. If the captions are for a narrated video, my script length calculator tells you how long the read will be before you record.

    Step-by-step guide

    For the whole process around this tool, read How to add SRT subtitles to a YouTube video: how to time them, check them and upload them in YouTube Studio.

    FAQ

    What subtitle file formats does YouTube accept?
    YouTube Help lists basic formats (SubRip .srt, SubViewer .sbv or .sub, MPsub, LRC and Videotron Lambda .cap), advanced formats (SAMI, RealText, WebVTT .vtt, TTML and DFXP) and broadcast formats such as Scenarist .scc, which it calls its preferred format. If you are new to caption files, YouTube suggests SubRip (.srt) or SubViewer (.sbv).
    Why is my SRT file not working on YouTube?
    Check three things first: the file is plain UTF-8 (YouTube Help asks for that in .srt files), every timecode follows the SubRip pattern 00:00:00,599 --> 00:00:04,160, and each cue is separated from the next by a blank line. This checker flags all three, plus overlaps, cues out of order and empty cues, with the line number of each.
    How many characters per second should subtitles be?
    YouTube does not set a reading speed. A common guideline is Netflix's English (USA) Timed Text Style Guide: up to 20 characters per second for adult programs and up to 17 for children's programs, with at most 42 characters per line and two lines. The checker uses 17 by default; you can switch to 20 or to a stricter 15.
    What is the difference between SRT and VTT?
    Both are plain text with a start and end time for each caption. SubRip numbers each cue and uses a comma before the milliseconds (00:00:04,160). WebVTT starts with the line WEBVTT, uses a dot (00:00:04.160) and can carry cue settings such as position. YouTube Help says no style markup is recognized in .srt files, while .vtt supports positioning and the <b>, <i> and <u> tags.
    How do I fix subtitles that are out of sync?
    If every caption is early or late by the same amount, type the offset in milliseconds in Shift all timings (a negative number makes the captions appear earlier), apply it and save. If the gap grows along the video, the captions were timed to a different cut or frame rate, and one shift will not fix it.
    Is my caption file uploaded anywhere?
    No. The file is read and checked in your browser, on your own device. Nothing is sent to a server and nothing is saved.

    Sources

    Who made this

    I'm Kevin Tabares. I've edited long-form YouTube videos since 2015 (1,277 videos and 152.2M+ views tracked on YT Jobs), mostly Roblox and Minecraft gaming, plus narrated documentaries. A caption file is a small part of a video and an easy one to get wrong, so I built a checker that points to the exact line and fixes the common problems in one click. If you want an editor for your channel, get in touch.

    More free tools

    A silence detector, a script length calculator, an export settings calculator, a thumbnail preview, a frame grabber, a LUFS meter and more, all free and without signup.

    See all tools →