How to Download

How to Download Long Vimeo Videos (DASH Streams) with yt-dlp

Vimeo streams video in two possible ways:

Devin Schumacher
3 min read

How to Download Long Vimeo Videos (DASH Streams) with yt-dlp

Vimeo streams video in two possible ways:

  • HLS β†’ uses .m3u8 playlists and .ts/fragmented MP4 segments.
  • DASH β†’ uses a playlist.json manifest and .m4s segments.

πŸ” Step 1 β€” Identify What You’re Dealing With

  • Open DevTools β†’ Network.
  • If you filter for m3u8 and see manifests β†’ that video is using HLS.
  • If you only see playlist.json and .m4s segment requests β†’ that video is using DASH.

πŸ‘‰ In my case:

  • I didn’t see any .m3u8 in the Network tab.
  • I did see playlist.json and lots of .m4s segments.
  • That means the embed is DASH-only.
  • ffmpeg can’t parse Vimeo’s JSON directly, but yt-dlp can (it knows how to read the DASH JSON and reassemble the streams).

πŸ”‘ Step 2 β€” Get the Player Page URL

  • Filter for config in DevTools.

  • You’ll find a request like:

    https://player.vimeo.com/video/519981982/config?...
    
  • The video ID here is 519981982.

  • Strip the /config?... part β†’ the stable player URL is:

    https://player.vimeo.com/video/519981982
    

This URL doesn’t expire, unlike the signed segment URLs.

Screenshot 2025-09-26 at 09 58 01

πŸ›  Step 3 β€” Download with yt-dlp

Run yt-dlp against the player page with a referer and concurrency:

yt-dlp --referer "https://player.vimeo.com/video/519981982" \
  -N 15 -S "codec:avc,res,ext" \
  --merge-output-format mp4 --remux-video mp4 \
  --postprocessor-args "ffmpeg:-movflags +faststart" \
  "https://player.vimeo.com/video/519981982"

βš™οΈ Step 4 β€” What Each Flag Does

  • --referer β†’ Vimeo requires this header.
  • -N 15 β†’ download 15 fragments in parallel (much faster for long videos).
  • -S "codec:avc,res,ext" β†’ prefer AVC (MP4) over VP9/WebM.
  • --merge-output-format mp4 β†’ final file will always be MP4.
  • --remux-video mp4 β†’ repackage without re-encoding.
  • --postprocessor-args "ffmpeg:-movflags +faststart" β†’ optimize MP4 for instant playback.

⚑ Tips

  • If it fails: signed URLs (exp=...) expired β†’ reload and grab a fresh /video/<ID>/config.

  • Private videos: use your browser cookies:

    yt-dlp --cookies-from-browser chrome "https://player.vimeo.com/video/<ID>"
    
  • Maximum speed: install aria2c and run with:

    yt-dlp --downloader aria2c \
      --downloader-args "aria2c:-x 16 -s 16 -k 1M" \
      "https://player.vimeo.com/video/<ID>"
    

βœ… Summary:

  • Filter for config in DevTools to get the video ID.
  • Build the stable /video/<ID> URL.
  • Since no .m3u8 appears, this is DASH (playlist.json + .m4s).
  • Use yt-dlp with concurrency to fetch and merge into MP4.

ARIA 2 πŸ”₯

brew install aria2

That gives you the aria2c binary, which yt-dlp can use as an external downloader.

Then you can run your Vimeo command with aria2c for maximum speed:

yt-dlp --referer "https://player.vimeo.com/video/519981982" \
  --downloader aria2c \
  --downloader-args "aria2c:-x 16 -s 16 -k 1M" \
  -S "codec:avc,res,ext" \
  --merge-output-format mp4 --remux-video mp4 \
  --postprocessor-args "ffmpeg:-movflags +faststart" \
  "https://player.vimeo.com/video/519981982"

What those args mean:

  • -x 16 β†’ up to 16 connections per download
  • -s 16 β†’ split into 16 segments
  • -k 1M β†’ segment size (1 MB)

⚑ This will usually max out your bandwidth on long Vimeo videos.

ytdlp

vs.

aria2c

πŸ‘‰ Try the Vimeo Video Downloader