Convert SBV to SUB

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.

  • Where it runs In your browser. The file is never uploaded.
  • Rebuilt SUB works differently from an SBV, so this is not the gradual degradation a lossy codec applies. What SUB can express is reproduced faithfully; what it has no equivalent for does not survive at all.
  • File size limit Up to 100 MB per file, free, without an account.

Up to 100 files at once. Mixed formats are fine.

YouTube captions on hardware that predates YouTube

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.

This page writes 25 frames per second and offers no control

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.

You still have the video, which an archive subtitle file never does

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.

Re-encoding the offline copy at 25 fps

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.

Stretching the SBV timings so a 25 fps write comes out right

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.

What a wrong rate looks like, and why it is obvious here

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.

A 40 millisecond grid, and what the rounding costs

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.

No frame-rate line is written into the SUB

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.

YouTube automatic captions in a one-line-at-a-time format

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.

Whether the device really needs a SUB at all

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.

How to turn YouTube captions into a MicroDVD SUB file

  1. Read your video’s frame rate with ffprobe before converting anything.
  2. Either re-encode the video at 25 fps, or stretch the SBV times by fps ÷ 25.
  3. Drop the .sbv here, then test the first thirty seconds on the device itself.

SBV against SUB: milliseconds becoming frame numbers

SBV compared with SUB
SBVSUB
Full nameYouTube SubtitleMicroDVD Subtitle
File extension.sbv.sub
Media typetext/plaintext/plain
First published20081998
Published byGoogle
LicensingPublished, not standardisedPublished, not standardised
Standing todayNicheLegacy, still read everywhere
Opens in a browserNo browserNo browser
Considered insteadSRT, VTTSRT, VTT

Opening the result

Subtitle Edit reads both SBV and SUB, so there is a way to check the result against the original without a second tool.

What each format is for

SUB dates from 1998. VLC and Subtitle Edit all read it.

SBV to SUB: frame rate, drift and fixes

Are my SBV files uploaded anywhere?

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.

Can I choose the frame rate?

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.

How wrong is 25 against a 30 fps video?

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.

What is the easiest fix?

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.

And if I cannot re-encode the video?

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.

Is any text lost?

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.

Does the file get a frame-rate declaration line?

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.

More about these formats