DASH MPD Video Downloader: Save an MPEG-DASH Stream as MP4

A DASH manifest is a shopping list, not a video. Once you read it as one, saving the stream becomes ordinary file work.

Short answer: an MPD is an XML description of a programme: which periods it has, which video and audio representations exist, at what resolutions and bitrates, in what segments, and how they are addressed. Nothing in it is playable. To download DASH you select one video representation and one audio representation, fetch their segments in order, and mux the two into one container — normally MP4 — without re-encoding. The standard is maintained by the DASH Industry Forum.

Read the manifest before you fetch anything

Three things make MPD different from an HLS playlist, and each changes the download:

  • Tracks are separate by design. Video and audio live in their own AdaptationSets. A tool that grabs “the video” produces a silent file unless it also grabs an audio representation — the failure mode described in downloaded video has no audio.
  • Multiple periods. A programme can be split into periods (often where ad insertion happens). Segment numbering restarts per period, so ordering must follow the period sequence, not a single counter.
  • Two addressing models. Either a template with numbered segments, or an explicit list of segment URLs. The second behaves like the HLS case; the first requires you to expand the pattern correctly.

How to tell DASH from HLS in one glance

SignalDASHHLS
Manifest extension.mpd (XML).m3u8 (text playlists, per RFC 8216)
Typical segment containers.m4s (fMP4), sometimes .webm.ts or .m4s
AudioUsually a separate AdaptationSetOften multiplexed inside segments
Quality switchingRepresentation selectionRendition/variant selection

Why it matters: HLS often hands you one merged file after a simple merge step, while DASH almost always needs you to combine two streams. Doing the wrong one produces the classic “downloaded video has no sound”.

The workflow

1

Get the manifest from a working session

DASH is commonly used for content that expects a login. Open the page where the video plays and let the player request the MPD; then capture what the page asked for. Copying a page URL into a service that cannot hold your session is where most DASH attempts die.

2

Pick one video and one audio representation

Choose video by resolution then bitrate, and audio by bitrate and language if several are offered. The player's own pick reflects bandwidth estimation, not the ceiling of the source — the selection rules are in highest-quality downloading.

3

Fetch all segments of both

Complete means every segment, in period order. Partial sets mux into files that stop early or lose sync, and the error usually surfaces at the end of a long download rather than the start.

4

Mux with FFmpeg, no re-encode

With ordered inputs, FFmpeg concatenates and combines the elementary streams into a single MP4 by copying them — documented in its concatenation guide and formats reference:

ffmpeg -f concat -safe 0 -i video.txt -i audio.m4a -c copy -map 0:v -map 1:a out.mp4

where video.txt lists each video segment file in order. This is what “a DASH downloader with FFmpeg” actually means: the tool drives FFmpeg for repackaging, while FFmpeg does no lossy work at all.

5

Verify duration, sync and audio

ffprobe out.mp4 should show one video and at least one audio stream, with a duration matching the source. Then play three points — start, middle, end.

Where DASH downloads go wrong

SymptomCauseFix
Silent MP4Only the video AdaptationSet was fetchedFetch an audio representation too, then map both
File stops halfwaySegments from a second period were never fetchedFollow period order and confirm the count matches the manifest
Wrong scene orderAlphabetical sorting instead of manifest orderBuild the concat list from the MPD, not from directory listing
Audio drifts out of syncNon-zero start timestampsRegenerate PTS or apply an offset during mux
403 near the endSigned segment URLs expired mid-runRefresh the manifest and resume the remaining segments

Scope, stated plainly

DASH is also the carrier for DRM-protected delivery. Where a stream is encrypted with DRM, or gated behind a paywall, that is outside this page and outside VidBrowser's stated use: the workflow above assumes content you are entitled to watch in your own session, in clear. Saving such content for personal reference does not transfer rights — check the site's terms and the owner's licence before republishing anything.

FAQ

How do I download a DASH MPD video?

Read the MPD, choose one video and one audio representation, fetch every segment in period order, then mux them into MP4 with stream copy.

Can I use FFmpeg as a DASH downloader?

FFmpeg muxes and demuxes; it does not enumerate a site's manifest for you or hold your session. Pair it with a tool that does the capture.

Why is my DASH download missing audio?

Because DASH carries audio in a separate AdaptationSet. Fetch one audio representation and map it in the mux.

Is an MPD file a video?

No. It is XML describing periods, representations, segments and their addresses. Renaming it to .mp4 produces nothing playable.

Does muxing reduce quality?

No — stream copy repackages existing encoded data. Only re-encoding reduces quality.

Can I download DRM-protected DASH?

No, and not a method here attempts it. Encrypted delivery and paywalled access are out of scope.