SubtitleEdit/subtitleedit · error · InvalidOperationException
No VobSub subtitle packets found in the input VOB(s). DVD au
Error message
No VobSub subtitle packets found in the input VOB(s). DVD audio-only chunks (VTS_xx_0.VOB) carry no subtitles — subtitles live in VTS_xx_1.VOB and later.
What it means
Thrown by VobSubExtractor.Extract after parsing every supplied VOB produced zero VobSubMergedPacks. The most common cause named in the message: the supplied file is the DVD's audio-only menu chunk (VTS_xx_0.VOB), which carries no subpictures. Subtitles live in VTS_xx_1.VOB and later.
Source
Thrown at src/seconv/Core/VobSubExtractor.cs:63
// here and the .idx ends up at the wrong path (e.g. movie → "vie"+"idx"
// = "vieidx"). Caller normalises, but assert just in case.
throw new ArgumentException("subOutputPath must end in '.sub'", nameof(subOutputPath));
}
// Parse every VOB into per-stream merged packs. DVDs assign continuous PTS
// across VOB chunks of the same title, so packs from later VOBs naturally
// land after earlier ones in playback time.
var allPacks = new List<VobSubMergedPack>();
foreach (var vob in vobFiles)
{
var parser = new VobSubParser(isPal);
parser.Open(vob);
allPacks.AddRange(parser.MergeVobSubPacks());
}
if (allPacks.Count == 0)
{
throw new InvalidOperationException(
"No VobSub subtitle packets found in the input VOB(s). "
+ "DVD audio-only chunks (VTS_xx_0.VOB) carry no subtitles — subtitles live in VTS_xx_1.VOB and later.");
}
// Group by DVD subpicture stream ID (one stream ≙ one subtitle language).
// Sorting by Key keeps the per-stream output indices stable across reruns.
var streams = allPacks
.GroupBy(p => p.StreamId)
.OrderBy(g => g.Key)
.ToList();
var outputs = new List<StreamOutput>(streams.Count);
for (var i = 0; i < streams.Count; i++)
{
var streamId = streams[i].Key;
var streamPacks = streams[i].OrderBy(p => p.StartTime.Ticks).ToList();
var outputPath = streams.Count == 1View on GitHub (pinned to 17a9f07487)
Solutions
- Supply VTS_xx_1.VOB through VTS_xx_n.VOB for the title (the subtitle-bearing chunks), not VTS_xx_0.VOB.
- If you only have a single concatenated VOB, make sure it is the movie title, not the menu.
- Verify with a tool like `vobsub2srt`/`mkvextract`/`lsdvd` that the title actually has subtitle streams; re-rip if stripped.
Example fix
// before seconv VTS_01_0.VOB vobsub ... // audio/menu chunk // after seconv VTS_01_1.VOB VTS_01_2.VOB vobsub ...
Defensive patterns
Strategy: validation
Validate before calling
// Quick pre-check: warn the user if they only passed VTS_xx_0.VOB
if (vobFiles.All(f => Regex.IsMatch(Path.GetFileName(f), @"VTS_[0-9]+_[0-9]0.VOB", RegexOptions.IgnoreCase)))
warnings.Add("Only VTS_xx_0.VOB supplied — these are audio/menu chunks. Use VTS_xx_1.VOB and later."); Type guard
null
Try / catch
null
Prevention
- Supply VTS_xx_1.VOB..VTS_xx_n.VOB for the movie title.
- Use lsdvd / MediaInfo to confirm a title has subtitle streams before ripping.
- Avoid pointing the extractor at menu (0) chunks.
When it happens
Trigger: All supplied VOBs were parsed by VobSubParser/MergeVobSubPacks and allPacks.Count == 0.
Common situations: User pointed the extractor at VTS_01_0.VOB (menu/audio) instead of VTS_01_1.VOB..VTS_01_n.VOB; the VOB is from a title with no subtitles; corrupt/incomplete rip with the subtitle stream stripped.
Related errors
- No VOB files supplied.
- No VobSub subtitle packs in: {subPath}
- Dvd language {code} not found!
- VobSub MKV track #{track.TrackNumber} is compressed (content
- No VobSub subtitles in MKV track #{track.TrackNumber}.
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/ebba712ec2b0fcc8.
Report an issue: GitHub.