SubtitleEdit/subtitleedit · error · InvalidOperationException

No subtitles recognised in VobSub file: {subPath}

Error message

No subtitles recognised in VobSub file: {subPath}

What it means

Thrown by LoadVobSub when ImageOcrLoader.LoadVobSub(subPath, idxPath, options) returned a Subtitle with zero paragraphs. The .sub was opened but no renderable/decodable subpicture events were produced, so conversion cannot proceed.

Source

Thrown at src/seconv/Core/ContainerSubtitleLoader.cs:411

        return [new LoadedTrack(subtitle, mcc, string.Empty, null)];
    }

    private static List<LoadedTrack> LoadBluRaySup(string filePath, ConversionOptions options)
    {
        var subtitle = ImageOcrLoader.LoadBluRaySup(filePath, options);
        if (subtitle.Paragraphs.Count == 0)
        {
            throw new InvalidOperationException($"No subtitles recognised in Blu-Ray sup file: {filePath}");
        }
        return [new LoadedTrack(subtitle, new SubRip(), string.Empty, null)];
    }

    private static List<LoadedTrack> LoadVobSub(string subPath, string idxPath, ConversionOptions options)
    {
        var subtitle = ImageOcrLoader.LoadVobSub(subPath, idxPath, options);
        if (subtitle.Paragraphs.Count == 0)
        {
            throw new InvalidOperationException($"No subtitles recognised in VobSub file: {subPath}");
        }
        return [new LoadedTrack(subtitle, new SubRip(), string.Empty, null)];
    }

    private static List<LoadedTrack> LoadTransportStream(string filePath, ConversionOptions options)
    {
        var tracks = new List<LoadedTrack>();

        // 1. Teletext — already text, no OCR needed
        if (!options.SkipTeletext)
        {
            var parser = new TransportStreamParser();
            parser.Parse(filePath, null);
            foreach (var pidEntry in parser.TeletextSubtitlesLookup)
            {
                foreach (var pageEntry in pidEntry.Value)
                {
                    if (options.TeletextOnlyPage.HasValue && pageEntry.Key != options.TeletextOnlyPage.Value)

View on GitHub (pinned to 17a9f07487)

Solutions

  1. Verify the .sub/.idx pair opens in a VobSub-capable player or BDSup2Sub.
  2. Re-extract the VobSub from the original DVD/VOB with a reliable tool.
  3. Ensure the .idx and .sub basenames match and are in the same directory.
Defensive patterns

Strategy: try-catch

Validate before calling

// Confirm the .sub/.idx pair is readable before OCR.
if (!BitmapSubtitleLoader.IsBinaryVobSub(subPath))
    return Error($"Not a binary VobSub .sub: {subPath}");

Try / catch

try { tracks = ContainerSubtitleLoader.TryLoadTracks(filePath, options); }
catch (InvalidOperationException ex) when (ex.Message.Contains("VobSub file"))
{ Console.Error.WriteLine(ex.Message); return; }

Prevention

When it happens

Trigger: Passing a .sub (with or without .idx) where the MPEG-PS subpicture stream has no usable packs, or OCR/timecode extraction yielded no paragraphs (ContainerSubtitleLoader.cs:409). Reached via the .sub route (line 79) or the .idx route (line 117).

Common situations: A truncated .sub; a .sub whose .idx timing is missing/mismatched; an MPEG-PS .sub with corrupt subpicture payloads; an empty placeholder file.

Related errors


AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13). Data as JSON: /api/errors/0100fdb1a0527f9b. Report an issue: GitHub.