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
- Relax or correct the --vf/--af/--sf filter expressions so at least one stream matches
- Omit --sub-only when subtitle-only output is not intended, or verify the source actually contains subtitles
- Drop --drop/--select options that exclude all streams
- 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
- Inspect the stream table the tool prints before applying aggressive filters
- Test filters on a small stream first
- Avoid combining --sub-only with sources known to lack subtitle tracks
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)