The Video Subtitle Extractor reads a video file directly in your browser, finds every text subtitle stream inside it, and writes those cues out as a clean subtitle file. Drop in an MKV, WebM, MP4, M4V or MOV and you get back SRT, WebVTT, ASS, plain text, JSON, CSV or LRC, with the original timings preserved to the millisecond.
Most videos that ship with subtitles keep them inside the container as a separate stream, alongside the video and audio. That is convenient for playback and awkward for everything else: you cannot edit them, translate them, feed them to a search index, or upload them to YouTube without first getting them out. The usual answer is to install ffmpeg and learn its stream-mapping syntax, or to upload a private video to a website you do not control. This tool is the third option, and it is the one most people actually want.
Under the hood it implements the container formats properly rather than guessing. For Matroska it walks the EBML tree - Segment, Info, Tracks, then each Cluster - reads the TimecodeScale, and decodes SimpleBlock and BlockGroup entries to recover each cue with its start time and duration. For MP4 and MOV it parses the ISO base media box structure down through moov, trak, mdia and stbl, rebuilds the sample table from stts, stsc, stsz and stco, then decodes tx3g or WebVTT samples. Track language and name come from the container metadata, so multi-language releases arrive properly labelled.
Everything runs locally. The file is streamed through the File API in 128 KB slices and never held in memory as a whole, so the size you can handle is not capped by available RAM. Only the subtitle bytes are decoded; video and audio payloads are stepped over. MP4 and MOV are the quicker of the two, because the sample table gives exact byte offsets, while Matroska requires one sequential pass over the file to walk its clusters. Either way the practical limit is disk read speed.