Cookies for analytics and advertising
We use cookies for analytics and advertising, both sent to Google. Refusing changes nothing you can see.Read the privacy page
Converting SBV to SUB turns a caption file downloaded from YouTube Studio into the frame-numbered format an old disc player or media box will read. The words cross intact. The timing does not, unless the video runs at 25 frames per second, because that is the rate this conversion writes and there is no setting to change it.
Up to 100 files at once. Mixed formats are fine.
They convert one after another and download together as a ZIP.
SBV to SUB
The situation is specific and it recurs: a video is downloaded for offline keeping — a lecture series, a talk, a documentary, a channel being archived — and the thing that will actually play it is not a computer. It is a disc player with a USB socket, a media box bought in 2010, or a television whose subtitle support was written for the DivX era. Those devices read MicroDVD, and several read nothing else that a text editor can produce.
The captions come from YouTube Studio, which exports SBV, a format Google invented and essentially nobody else uses. So the file you have and the file the device wants are separated by fifteen years of subtitle history, and the whole of the gap is one question: how many frames per second.
Be clear about it before anything else. MicroDVD stores when a line appears as a frame number rather than as a time, so writing one requires a rate, and the rate used here is always 25. There is no field on this page to change it — the site asks for a rate only where MicroDVD is the source, because that is the direction where a wrong guess is silently unrecoverable.
Twenty-five is the European broadcast rate and it is a reasonable default for archive material. It is a poor default for YouTube, where 30000/1001, 24, 50 and 60000/1001 are all common and 25 is the minority case. If your video is 25, this conversion is exact and you can stop reading two sections early. If it is not, the two sections below are the whole job.
This is the advantage of an SBV over a subtitle file found in a folder. The captions came from a specific video on a specific channel, and you are converting them because you are keeping a copy of that same video — so the frame rate is not a guess, it is a fact sitting on your disk.
`ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 video.mp4` prints it exactly, as a fraction: `30000/1001` for what everybody calls 29.97, `25/1` for European material, `24000/1001` for film-rate uploads. VLC shows the same figure under Tools, Codec Information. Get that number before converting and the rest of this page is arithmetic rather than diagnosis.
If you are already re-encoding — and an archive copy for an old player usually is, because the device will not accept the original codec or container — then setting the frame rate is one more argument and the cheapest possible fix. `ffmpeg -i input.mkv -r 25 -c:v mpeg4 -c:a mp3 output.avi` produces a file the device likes at a rate that matches the SUB exactly.
Frame-rate conversion is not free: going from 29.97 to 25 drops roughly one frame in six, which is visible as slight judder on horizontal pans and invisible on a lecture or an interview. For archive material intended for a television across a room, the trade is almost always worth taking, and it removes the subtitle problem completely rather than approximating around it.
If the video cannot be re-encoded, the other route is to lie to the converter. The frame number written for each cue is the cue’s time in seconds multiplied by 25 and rounded. If you multiply every timestamp in the SBV by the video’s real rate divided by 25 first, the multiplication that follows produces the frame number the player will actually want.
The factor is `fps ÷ 25`: 1.1988 for a 29.97 fps video, 0.96 for 24, 2.4 for 60. A short script over the SBV file — the timing line is the first line of each block, two `H:MM:SS.mmm` values separated by a comma — applies it in a few lines of Python. The converted SUB then carries frame numbers that a player assuming 29.97 turns back into the right times. It is a hack, it is exact, and it beats hand-nudging a hundred cues.
The usual MicroDVD frame-rate story is the near-miss: 25 against 23.976 is a 4.3 per cent error, which is imperceptible in the first thirty seconds and about twenty-six seconds out after ten minutes. It creeps up on you.
The YouTube case is not like that. Twenty-five against 29.97 is a twenty per cent error, so the subtitles run a fifth fast: the line for the two-minute mark appears at one minute forty, and by ten minutes the file is a minute and forty seconds ahead. Nobody watches that for long wondering whether it is right. The upside of a large error is that you find it in the first minute rather than in the third act, so test the first thirty seconds on the actual device before copying a whole archive across.
At 25 frames per second each frame is forty milliseconds. SBV counts in milliseconds, so every cue time is rounded to the nearest frame on the way out, moving it by up to twenty milliseconds in either direction.
That is inaudible and invisible and it is worth knowing about for one case: a very short cue can round to zero length. A caption of thirty milliseconds — which automatic captioning occasionally produces on a single interjected word — becomes a start and an end frame that are the same number, and players differ on whether they show such an entry at all. If a word goes missing on playback and everything around it is correct, that is the reason.
There is a widely followed convention for declaring the rate inside a MicroDVD file: a first entry with both frame numbers set to one, whose text is the rate itself, which players read as a declaration rather than displaying. It is a convention rather than part of any specification, and this conversion does not write one.
Players that find no declaration assume something, usually the video’s own rate, which is the right assumption if the subtitles were made for that video and is exactly the assumption that produces the twenty per cent error above. Adding the line by hand takes seconds — open the SUB in a text editor and put `{1}{1}25.000` at the top — and it is worth doing if you are handing the file to somebody else, because it records what the file was written for.
If the SBV came from YouTube’s automatic captioning rather than from a human, expect two problems the format cannot help with. The text has no punctuation and no capitalisation, which reads badly on a television. And the cues are short and dense — automatic captioning emits a few words at a time so that the on-screen text can roll — which becomes a rapid flicker on a player that draws each entry as a separate block.
Fixing that is editing rather than converting, and it is much easier to do while the file is still an SBV: merge adjacent cues into sentence-length lines, add punctuation, and only then convert. MicroDVD also has no styling and no positioning, so a line appears wherever the player puts it, which is the bottom. Hard line breaks in the SBV text become a pipe character in the MicroDVD entry, which is that format’s line separator, and players show them as two lines.
Try an SRT first. Support for SubRip is far broader than the MicroDVD era suggests — plenty of hardware from that period reads both, and anything made after about 2008 almost certainly does. An SRT states times, so no frame rate is involved and none of this page applies.
MicroDVD is worth producing when the device has been documented or observed to want it, which usually means an SRT has already been tried and ignored. If you get there, keep the SBV as the master: it holds real times, it can be re-converted for a different encode at a different rate, and it is the file YouTube will accept back if the captions are ever re-uploaded. The SUB is a copy made for one device, not a replacement.
| SBV | SUB | |
|---|---|---|
| Full name | YouTube Subtitle | MicroDVD Subtitle |
| File extension | .sbv | .sub |
| Media type | text/plain | text/plain |
| First published | 2008 | 1998 |
| Published by | — | |
| Licensing | Published, not standardised | Published, not standardised |
| Standing today | Niche | Legacy, still read everywhere |
| Opens in a browser | No browser | No browser |
| Considered instead | SRT, VTT | SRT, VTT |
Subtitle Edit reads both SBV and SUB, so there is a way to check the result against the original without a second tool.
SUB dates from 1998. VLC and Subtitle Edit all read it.
No. This conversion runs entirely inside your browser, so the file never leaves your device. You can confirm it yourself: open the network tab of your browser's developer tools and convert something. You will see the page load, plus the analytics and advertising the site is paid for with — and nothing carrying your file.
Not on this page. The SUB is written at 25 frames per second and there is no control for it, because the rate option only appears where MicroDVD is the source. If your video is not 25 fps, one of the two workarounds below is needed.
By a fifth. A player assuming 29.97 for a file written at 25 runs the subtitles about twenty per cent fast, so a line due at ten minutes appears at eight minutes twenty — obvious within the first minute rather than subtly drifting.
Encode the offline copy at 25 frames per second while you are re-encoding it anyway. The SUB is then exactly right and nothing else has to change. ffmpeg does it with a single -r 25 argument.
Stretch the caption times before converting. Multiply every timestamp in the SBV by the video’s frame rate divided by 25 — 1.1988 for a 29.97 fps video — and the frame numbers this page writes will land where the player expects them.
No. SBV holds times and words and nothing else, so nothing about the captions is discarded. The only thing that changes is that time becomes a frame count, and that is where all the risk in this conversion sits.
No. There is a convention for one — a first entry numbered one to one whose text is the rate — and it is not written here. If the player needs it, adding the line by hand in a text editor takes seconds.