| Crates.io | vsd |
| lib.rs | vsd |
| version | 0.4.3 |
| created_at | 2022-06-22 05:33:46.813902+00 |
| updated_at | 2025-08-16 08:32:28.417123+00 |
| description | Download video streams served over HTTP from websites, DASH (.mpd) and HLS (.m3u8) playlists. |
| homepage | |
| repository | https://github.com/clitic/vsd/tree/main/vsd |
| max_upload_size | |
| id | 610670 |
| size | 301,190 |
Video Stream Downloader is a powerful command-line utility that enables users to download video content streamed over HTTP from websites. It supports both DASH (Dynamic Adaptive Streaming over HTTP) using .mpd manifest files and HLS (HTTP Live Streaming) using .m3u8 playlists. The tool is designed to handle adaptive bitrate streams, fetch individual video and audio segments, and optionally mux them into a single playable file, making it ideal for offline viewing, archival, or analysis of online video content.
AES-128, SAMPLE-AES, CENC, CBCS, CENS and CBC1.Visit the releases page for pre-built binaries or grab the latest CI builds.
Download and extract the archive, then copy the vsd binary to a directory of your choice.
Finally, add that directory to your system's PATH environment variable.
| Host | Architecture | Download |
|---|---|---|
| Android 7+ (Termux) | aarch64 | .tar.xz |
| Linux | aarch64 | .tar.xz |
| MacOS | aarch64 | .tar.xz |
| Windows | aarch64 | .zip |
| Linux | x86_64 | .tar.xz |
| MacOS | x86_64 | .tar.xz |
| Windows | x86_64 | .zip |
You can also install vsd using cargo.
$ cargo install vsd
$ vsd capture <url> --save-cookies
The saved cookies can be used as
--cookies cookies.jsonwithsavesub-command later on.
$ vsd save <url> -o video.mp4
Use
-i, --interactiveflag to open an interactive session.
$ vsd save https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd \
--keys "eb676abbcb345e96bbcf616630f1a3da:100b6c20940f779a4589152b57d2dacb" \
-o video.mp4
$ vsd save <url> --list-streams
$ vsd save <url> --select-streams "v=1,2:a=3" -o video.mp4
$ vsd save <url> --select-streams "a=en,fr:s=en,fr" -o video.mp4
$ vsd save <url> --parse > parsed-playlist.json
$ vsd --help
Download video streams served over HTTP from websites, DASH (.mpd) and HLS (.m3u8) playlists.
Usage: vsd [OPTIONS] <COMMAND>
Commands:
capture Capture playlists and subtitles from a website
extract Extract subtitles from mp4 boxes
merge Merge multiple segments to a single file
save Download DASH and HLS playlists
help Print this message or the help of the given subcommand(s)
Options:
--color <COLOR> When to output colored text [default: auto] [possible values: auto, always, never]
-h, --help Print help
-V, --version Print version
$ vsd save --help
Download DASH and HLS playlists
Usage: vsd save [OPTIONS] <INPUT>
Arguments:
<INPUT>
http(s):// | .mpd | .xml | .m3u8
Options:
--base-url <BASE_URL>
Base url to be used for building absolute url to segment. This flag is usually needed for local input files. By default redirected
playlist url is used
-d, --directory <DIRECTORY>
Change directory path for temporarily downloaded files. By default current working directory is used
-o, --output <OUTPUT>
Mux all downloaded streams to a video container (.mp4, .mkv, etc.) using ffmpeg. Note that existing files will be overwritten and
downloaded streams will be deleted
--parse
Parse playlist and returns it in json format. Note that --output flag is ignored when this flag is used
--color <COLOR>
When to output colored text
[default: auto]
[possible values: auto, always, never]
--subs-codec <SUBS_CODEC>
Force some specific subtitle codec when muxing through ffmpeg. By default `mov_text` is used for .mp4 and `copy` for others
[default: copy]
-h, --help
Print help (see a summary with '-h')
Automation Options:
-i, --interactive
Prompt for custom streams selection with modern style input prompts. By default proceed with defaults
--interactive-raw
Prompt for custom streams selection with raw style input prompts. By default proceed with defaults
-l, --list-streams
List all the streams present inside the playlist
-s, --select-streams <SELECT_STREAMS>
Filters to be applied for automatic stream selection.
SYNTAX: `v={}:a={}:s={}` where `{}` (in priority order) can contain
|> all: select all streams.
|> skip: skip all streams or select inverter.
|> 1,2: ids obtained by --list-streams flag.
|> 1080p,1280x720: stream resolution.
|> en,fr: stream language.
EXAMPLES:
|> v=skip:a=skip:s=all (download all sub streams)
|> a:en:s=en (prefer en lang)
|> v=1080p:a=all:s=skip (1080p with all audio streams)
[default: v=best:s=en]
Client Options:
--cookies <COOKIES>
Fill request client with some existing cookies value. Cookies value can be same as document.cookie or in json format same as puppeteer
--header <KEY> <VALUE>
Custom headers for requests. This option can be used multiple times
--no-certificate-checks
Skip checking and validation of site certificates
--proxy <PROXY>
Set http(s) / socks proxy address for requests
--query <QUERY>
Set query parameters for requests
--set-cookie <SET_COOKIE> <URL>
Fill request client with some existing cookies per domain. First value for this option is set-cookie header and second value is url
which was requested to send this set-cookie header. EXAMPLE: --set-cookie "foo=bar; Domain=yolo.local" https://yolo.local. This option
can be used multiple times
--user-agent <USER_AGENT>
Update and set user agent header for requests
[default: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"]
Decrypt Options:
--keys <KID:KEY;...>
Keys for decrypting encrypted streams. KID:KEY should be specified in hex format
--no-decrypt
Download encrypted streams without decrypting them. Note that --output flag is ignored if this flag is used
Download Options:
--retries <RETRIES>
Maximum number of retries to download an individual segment
[default: 15]
--no-merge
Download streams without merging them. Note that --output flag is ignored if this flag is used
-t, --threads <THREADS>
Total number of threads for parllel downloading of segments. Number of threads should be in range 1-16 (inclusive)
[default: 5]
$ pkg update
$ pkg upgrade
$ pkg install ffmpeg
$ ln -s /storage/emulated/0/Download Download
curl -L https://github.com/clitic/vsd/releases/download/vsd-0.4.3/vsd-0.4.3-aarch64-linux-android.tar.xz | tar xJC $PREFIX/bin
Use third party browsers like Kiwi Browser (developer tools) paired with Get cookies.txt LOCALLY extension or Via Browser (tools > resource sniffer) to find playlists within websites.
Now you can run vsd as usual. The streams would be directly downloaded in your android downloads folder.
$ cd Download
$ vsd save <url> -o video.mp4
List of alternatives to vsd:
Dual Licensed