Skip to content
Novus Examples
sbv253 B

SBV — YouTube Timing Without Cue Indices

SubViewer/SBV as YouTube exports it: no cue indices, a comma rather than an arrow between start and end, and single-digit hours. Superficially similar enough to SubRip that format detection by eye fails, which makes it a good test of sniffing logic — a parser that guesses SubRip from the timestamps then trips on the missing index.

Preview, first 12 linessbv
0:00:01.000,0:00:03.000
SBV has no cue numbers at all

0:00:03.500,0:00:06.000
Times use a comma separator, not an arrow

0:00:06.500,0:00:09.000
Single-digit hours, three-decimal seconds

0:00:09.500,0:00:12.000
[Sound effects use square brackets too]

Specifications

Cues
4
Separator
comma between start and end
Indices
none
Hour Format
single digit
Origin
YouTube caption export

Testing contract

Expected to pass
Scenario
Parse the file as SBV (YouTube caption export) and read its timings.
Expected result
4 cues using a comma between start and end rather than an arrow, no cue indices at all, and single-digit hours. Every one of those differs from SubRip, so a parser that dispatches on extension and hands `.sbv` to an SRT reader finds zero cues rather than erroring.

What is a .sbv file?

SBV (.sbv) is the simple caption format used by YouTube's Studio. Each cue is a start,end timestamp line (H:MM:SS.mmm) followed by the caption text, with a blank line between cues. It has no styling, just timings and text.

How to use this file

Use an example .sbv file to test caption parsers, YouTube caption import, and conversion between SBV, SRT, and VTT.

How to use this file for testing

“SBV — YouTube Timing Without Cue Indices” is a deterministic Novus Examples fixture for Subtitle parsing, Video QA. The same captions written out across SubRip, WebVTT, ASS/SSA, SBV, TTML and a synced LRC lyric file, with known timings, for exercising subtitle parsers, format converters and burn-in tools against every serialisation.

Documented properties for this file: 4 cues. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such, expect parsers to fail loudly rather than silently accept them.

Media fixtures are short and synthetic by design. Prefer waveform or transcript ground truth in the same group when measuring ASR, trim, upscale, or sync tools; do not assume broadcast-quality masters.

Parse the cues and check timings against the documented count; the same captions ship across subtitle formats so you can diff a converter against a known target.

Code examples

<video controls src="clip.mp4">
  <track kind="captions" srclang="en" label="English" src="frame-timecode.sbv" default>
</video>

Generated by generation/video_timedtext.py. Free for any use, no attribution required, license.