opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

Download DASH streams from the command line, subtitles included
GitHub RepoImpressions2

Project Description

View on GitHub

Downloading DASH Streams Without the Browser

You've probably encountered a video you'd like to keep offline—maybe a catch-up TV episode, a lecture, or something from a streaming service—only to find it's delivered as a DASH stream with no obvious download button. The manifest is XML, the media is chopped into segments, and the audio and video live in separate tracks. That's where dash-mpd-cli comes in: a command-line tool written in Rust that fetches DASH content and muxes it back together on your local machine.

What It Does

dash-mpd-cli is a command-line application for downloading media from a DASH MPD file. DASH (dynamic adaptive streaming over HTTP, also called MPEG-DASH) is the technology behind a lot of video-on-demand and replay TV services. The MPD is an XML manifest that lists the resources forming the stream, and a DASH client reads it to figure out which assets to request.

The tool picks the encoding that makes the most sense—based on bitrate, codec, and similar factors—then fetches the media segments over HTTP or HTTPS and muxes the audio and video back together. It builds on the dash-mpd Rust crate and handles content across a range of codecs (H264, HEVC, AV1, AAC, VP9, MP4A, MP3) and containers (MP4, WebM, Matroska, AVI). Worth noting up front: it's for DASH only. If you're dealing with HLS streams, this isn't the tool for you.

Why It's Cool

  • Subtitles are a first-class feature, not an afterthought. A lot of downloaders treat captions as optional extras you have to fight for. This one supports WebVTT, TTML, SRT, tx3g, SMIL, and wvtt streams, including both sidecar subtitle files and—based on the truncated README—embedded variants. If you care about accessibility or just watching with captions, that matters.

  • Multi-period content is handled properly. Some streams are split into multiple periods, and the tool will save them into a single container when the formats are compatible (same resolution, codecs, bitrate, and so on), unless you pass --no-period-concatenation. Otherwise you get separate containers. That's a sensible default that respects the reality of how these manifests are built.

  • It takes authentication seriously. HTTP Basic auth is supported via --auth-username and --auth-password, and Bearer auth via --auth-bearer. Crucially, the credentials go to both the server hosting the manifest and the CDN hosting the segments—which is exactly where things usually break in naive implementations.

  • Proxies work the way you'd expect. You can set one with --proxy, or rely on the standard environment variables (HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, and their lowercase forms). There's a --no-proxy flag to disable system-level settings when you need to.

  • Bandwidth throttling. The --limit-rate argument lets you cap download speed, which is handy if you don't want to saturate your connection or you're working within a metered link.

The overall design is straightforward: one binary, a set of flags that map to real-world streaming scenarios, and no GUI to get in the way. It's the kind of tool that fits naturally into a script or a cron job.

How to Try It

The project is on GitHub and is published on crates.io. If you have a Rust toolchain installed, the usual route applies:

cargo install dash-mpd-cli

There's also a container image available (linked from the README badges), which is useful if you'd rather not install Rust. Once it's installed, the basic invocation is a URL to the MPD manifest:

dash-mpd-cli "https://example.com/stream/manifest.mpd"

From there you can layer on options—proxy settings, authentication, rate limiting, subtitle handling—as your particular stream requires. The user manual is the place to look for the full flag reference and worked examples, and it's worth reading before you start guessing at arguments.

Final Thoughts

dash-mpd-cli is a focused tool for people who already know they're dealing with DASH and want a reliable way to pull that content down from the terminal. It's not trying to be a universal media downloader—no HLS support, as the README makes clear—and that narrowness is a feature. The attention to subtitles, multi-period streams, and authentication to both manifest and segment servers suggests the author has actually dealt with the messy parts of real streaming services. If your use case matches, it's a solid, no-nonsense option.


Follow @githubprojects for more developer tools and open source projects.

Back to Projects
Project ID: 97f82c2c-5b41-4d0d-9afc-034551445346Last updated: October 26, 2026 at 08:36 AM