nilaoda/N_m3u8DL-RE · error · Exception

ResString.noStreamsToDownload

Error message

ResString.noStreamsToDownload

What it means

Stream-selection step of DoWorkAsync: after applying --sub-only, stream filters (--vf/--af/--sf), or interactive selection, the selectedStreams list is empty, meaning no stream survived selection. This is a generic sentinel guard that treats 'nothing selected' as a fatal condition because the downloader has no media to process.

Solutions

  1. Relax or correct the --vf/--af/--sf filter expressions so at least one stream matches
  2. Omit --sub-only when subtitle-only output is not intended, or verify the source actually contains subtitles
  3. Drop --drop/--select options that exclude all streams
  4. Check the parsed stream list printed by the tool and re-run with correct language/codec filters

Example fix

If using --vf lang=en on a source with only zh streams, either remove the filter or change it: --vf lang=zh. For --sub-only on a manifest without subtitles, run without --sub-only.
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: Filter expressions exclude every stream (e.g. --vf 'lang=en' on a source without English video); --sub-only is used on a manifest with no subtitle tracks; the user aborts/cancels interactive selection resulting in zero selected streams.

Common situations: Typo or wrong syntax in filter expressions; assumptions about stream languages/quality that do not match the manifest; picking only subtitles from an audio/video-only manifest.


AI-assisted analysis of nilaoda/N_m3u8DL-RE@e113dee70c (2026-09-13). Data as JSON: /api/errors/0e5c4dab07b84d7f. Report an issue: GitHub.

Appendix: source

Thrown at src/N_m3u8DL-RE/Program.cs:319

else if (option.SubOnly)
{
    selectedStreams.AddRange(subs);
}
else if (option.VideoFilter != null || option.AudioFilter != null || option.SubtitleFilter != null)
{
    basicStreams = FilterUtil.DoFilterKeep(basicStreams, option.VideoFilter);
    audios = FilterUtil.DoFilterKeep(audios, option.AudioFilter);
    subs = FilterUtil.DoFilterKeep(subs, option.SubtitleFilter);
    selectedStreams = basicStreams.Concat(audios).Concat(subs).ToList();
}
else
{
    // 展示交互式选择框
    selectedStreams = FilterUtil.SelectStreams(lists);
}

if (selectedStreams.Count == 0)
    throw new Exception(ResString.noStreamsToDownload);

View on GitHub (pinned to e113dee70c)