Skip to content

Commit f7548f5

Browse files
committed
release vsd-0.4.2
1 parent fc87bc1 commit f7548f5

4 files changed

Lines changed: 109 additions & 74 deletions

File tree

build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ RELEASE_DIR="/mnt/c/Users/apoor/Downloads"
66
ANDROID_NDK_VERSION="r27c" # https://developer.android.com/ndk/downloads
77
MACOS_SDK_VERSION="15.4" # https://github.com/joseluisq/macosx-sdks/releases
88
PROTOC_VERSION="31.1" # https://github.com/protocolbuffers/protobuf/releases
9-
VSD_VERSION="0.4.1" # vsd/Cargo.toml
9+
VSD_VERSION="0.4.2" # vsd/Cargo.toml
1010
ZIG_VERSION="0.14.1" # https://ziglang.org/download
1111

1212
. "$HOME/.cargo/env"

vsd/CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.4.2] - 2025-08-12
11+
1012
### Changed
1113

1214
- `save`
@@ -197,7 +199,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
197199

198200
## [0.1.0] - 2022-06-22
199201

200-
[Unreleased]: https://github.com/clitic/vsd/compare/vsd-0.4.`...HEAD
202+
[Unreleased]: https://github.com/clitic/vsd/compare/vsd-0.4.2...HEAD
203+
[0.4.2]: https://github.com/clitic/vsd/compare/vsd-0.4.1...vsd-0.4.2
201204
[0.4.1]: https://github.com/clitic/vsd/compare/vsd-0.4.0...vsd-0.4.1
202205
[0.4.0]: https://github.com/clitic/vsd/compare/0.3.3...vsd-0.4.0
203206
[0.3.3]: https://github.com/clitic/vsd/compare/0.3.2...0.3.3

vsd/README.md

Lines changed: 102 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ Finally, add that directory to your system's `PATH` environment variable.
7272

7373
| Host | Architecture | Download |
7474
|---------------------|--------------|--------------------------------------------------------------------------------------------------------------|
75-
| Android 7+ (Termux) | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-aarch64-linux-android.tar.xz) |
76-
| Linux | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-aarch64-unknown-linux-musl.tar.xz) |
77-
| MacOS | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-aarch64-apple-darwin.tar.xz) |
78-
| Windows | aarch64 | [.zip](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-aarch64-pc-windows-msvc.zip) |
79-
| Linux | x86_64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-x86_64-unknown-linux-musl.tar.xz) |
80-
| MacOS | x86_64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-x86_64-apple-darwin.tar.xz) |
81-
| Windows | x86_64 | [.zip](https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-x86_64-pc-windows-msvc.zip) |
75+
| Android 7+ (Termux) | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-aarch64-linux-android.tar.xz) |
76+
| Linux | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-aarch64-unknown-linux-musl.tar.xz) |
77+
| MacOS | aarch64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-aarch64-apple-darwin.tar.xz) |
78+
| Windows | aarch64 | [.zip](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-aarch64-pc-windows-msvc.zip) |
79+
| Linux | x86_64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-x86_64-unknown-linux-musl.tar.xz) |
80+
| MacOS | x86_64 | [.tar.xz](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-x86_64-apple-darwin.tar.xz) |
81+
| Windows | x86_64 | [.zip](https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-x86_64-pc-windows-msvc.zip) |
8282

8383
### Install via Cargo
8484

@@ -123,13 +123,13 @@ $ vsd save https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.
123123

124124
```bash
125125
$ vsd save <url> --list-streams
126-
$ vsd save <url> --select-streams "1,2" -o video.mp4
126+
$ vsd save <url> --select-streams "v=1,2:a=3" -o video.mp4
127127
```
128128

129129
- Prefer some specific languages when downloading audio/subtitles.
130130

131131
```bash
132-
$ vsd save <url> --audio-lang "en,fr" --subs-lang "en,fr" -o video.mp4
132+
$ vsd save <url> --select-streams "a=en,fr:s=en,fr" -o video.mp4
133133
```
134134

135135
- Use as a playlist parser. ([json schema](https://github.com/clitic/vsd/blob/main/vsd/src/playlist.rs))
@@ -147,7 +147,7 @@ $ vsd --help
147147
```
148148
Download video streams served over HTTP from websites, DASH (.mpd) and HLS (.m3u8) playlists.
149149
150-
Usage: vsd.exe [OPTIONS] <COMMAND>
150+
Usage: vsd [OPTIONS] <COMMAND>
151151
152152
Commands:
153153
capture Capture playlists and subtitles from a website
@@ -169,77 +169,109 @@ $ vsd save --help
169169
```
170170
Download DASH and HLS playlists
171171
172-
Usage: vsd.exe save [OPTIONS] <INPUT>
172+
Usage: vsd save [OPTIONS] <INPUT>
173173
174174
Arguments:
175-
<INPUT> http(s):// | .mpd | .xml | .m3u8
175+
<INPUT>
176+
http(s):// | .mpd | .xml | .m3u8
176177
177178
Options:
178-
--base-url <BASE_URL> Base url to be used for building absolute url to segment. This flag is usually needed for
179-
local input files. By default redirected playlist url is used
180-
-d, --directory <DIRECTORY> Change directory path for temporarily downloaded files. By default current working
181-
directory is used
182-
-o, --output <OUTPUT> Mux all downloaded streams to a video container (.mp4, .mkv, etc.) using ffmpeg. Note
183-
that existing files will be overwritten and downloaded streams will be deleted
184-
--parse Parse playlist and returns it in json format. Note that --output flag is ignored when
185-
this flag is used
186-
--color <COLOR> When to output colored text [default: auto] [possible values: auto, always, never]
187-
-h, --help Print help
179+
--base-url <BASE_URL>
180+
Base url to be used for building absolute url to segment. This flag is usually needed for local input files. By default redirected
181+
playlist url is used
182+
183+
-d, --directory <DIRECTORY>
184+
Change directory path for temporarily downloaded files. By default current working directory is used
185+
186+
-o, --output <OUTPUT>
187+
Mux all downloaded streams to a video container (.mp4, .mkv, etc.) using ffmpeg. Note that existing files will be overwritten and
188+
downloaded streams will be deleted
189+
190+
--parse
191+
Parse playlist and returns it in json format. Note that --output flag is ignored when this flag is used
192+
193+
--color <COLOR>
194+
When to output colored text
195+
196+
[default: auto]
197+
[possible values: auto, always, never]
198+
199+
-h, --help
200+
Print help (see a summary with '-h')
188201
189202
Automation Options:
190-
--all-streams Download all streams with --skip-audio, --skip-video and --skip-subs filters
191-
kept in mind
192-
--audio-lang <AUDIO_LANG> Preferred languages when multiple audio streams with different languages are
193-
available. Must be in RFC 5646 format (eg. fr or en-AU). If a preference is not
194-
specified and multiple audio streams are present, the first one listed in the
195-
manifest will be downloaded. The values should be seperated by comma
196-
-i, --interactive Prompt for custom streams selection with modern style input prompts. By default
197-
proceed with defaults
198-
--interactive-raw Prompt for custom streams selection with raw style input prompts. By default
199-
proceed with defaults
200-
-l, --list-streams List all the streams present inside the playlist
201-
--quality <WIDTHxHEIGHT|HEIGHTp> Automatic selection of some standard resolution video stream with highest
202-
bandwidth stream variant from playlist. If matching resolution of WIDTHxHEIGHT
203-
is not found then only resolution HEIGHT would be considered for selection.
204-
comman values: [lowest, min, 144p, 240p, 360p, 480p, 720p, hd, 1080p, fhd, 2k,
205-
1440p, qhd, 4k, 8k, highest, max] [default: highest]
206-
-s, --select-streams <SELECT_STREAMS> Select streams to download by their ids obtained by --list-streams flag. It has
207-
the highest priority among the rest of filters. The values should be seperated
208-
by comma
209-
--skip-audio Skip default audio stream selection
210-
--skip-subs Skip default subtitle stream selection
211-
--skip-video Skip default video stream selection
212-
--subs-lang <SUBS_LANG> Preferred languages when multiple subtitles streams with different languages
213-
are available. Must be in RFC 5646 format (eg. fr or en-AU). If a preference is
214-
not specified and multiple subtitles streams are present, the first one listed
215-
in the manifest will be downloaded. The values should be seperated by comma
203+
-i, --interactive
204+
Prompt for custom streams selection with modern style input prompts. By default proceed with defaults
205+
206+
--interactive-raw
207+
Prompt for custom streams selection with raw style input prompts. By default proceed with defaults
208+
209+
-l, --list-streams
210+
List all the streams present inside the playlist
211+
212+
-s, --select-streams <SELECT_STREAMS>
213+
Filters to be applied for automatic stream selection.
214+
215+
SYNTAX: `v={}:s={}:a={}` where `{}` (in priority order) can contain
216+
|> all: select all streams.
217+
|> skip: skip all streams or select inverter.
218+
|> 1,2: ids obtained by --list-streams flag.
219+
|> 1080p,1280x720: stream resolution.
220+
|> en,fr: stream language.
221+
222+
EXAMPLES:
223+
|> v=skip:a=skip:s=all (download all sub streems)
224+
|> a:en:s=en (prefer en lang)
225+
|> v=1080p:a=all:s=skip (1080p with all audio streams)
226+
227+
[default: v=best:s=en]
216228
217229
Client Options:
218-
--cookies <COOKIES> Fill request client with some existing cookies value. Cookies value can be same
219-
as document.cookie or in json format same as puppeteer
220-
--header <KEY> <VALUE> Custom headers for requests. This option can be used multiple times
221-
--no-certificate-checks Skip checking and validation of site certificates
222-
--proxy <PROXY> Set http(s) / socks proxy address for requests
223-
--query <QUERY> Set query parameters for requests
224-
--set-cookie <SET_COOKIE> <URL> Fill request client with some existing cookies per domain. First value for this
225-
option is set-cookie header and second value is url which was requested to send
226-
this set-cookie header. Example: --set-cookie "foo=bar; Domain=yolo.local"
227-
https://yolo.local. This option can be used multiple times
228-
--user-agent <USER_AGENT> Update and set user agent header for requests [default: "Mozilla/5.0 (Windows NT
229-
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0
230-
Safari/537.36"]
230+
--cookies <COOKIES>
231+
Fill request client with some existing cookies value. Cookies value can be same as document.cookie or in json format same as puppeteer
232+
233+
--header <KEY> <VALUE>
234+
Custom headers for requests. This option can be used multiple times
235+
236+
--no-certificate-checks
237+
Skip checking and validation of site certificates
238+
239+
--proxy <PROXY>
240+
Set http(s) / socks proxy address for requests
241+
242+
--query <QUERY>
243+
Set query parameters for requests
244+
245+
--set-cookie <SET_COOKIE> <URL>
246+
Fill request client with some existing cookies per domain. First value for this option is set-cookie header and second value is url
247+
which was requested to send this set-cookie header. EXAMPLE: --set-cookie "foo=bar; Domain=yolo.local" https://yolo.local. This option
248+
can be used multiple times
249+
250+
--user-agent <USER_AGENT>
251+
Update and set user agent header for requests
252+
253+
[default: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"]
231254
232255
Decrypt Options:
233-
--keys <KID:KEY;...> Keys for decrypting encrypted streams. KID:KEY should be specified in hex format
234-
--no-decrypt Download encrypted streams without decrypting them. Note that --output flag is ignored if
235-
this flag is used
256+
--keys <KID:KEY;...>
257+
Keys for decrypting encrypted streams. KID:KEY should be specified in hex format
258+
259+
--no-decrypt
260+
Download encrypted streams without decrypting them. Note that --output flag is ignored if this flag is used
236261
237262
Download Options:
238-
--retries <RETRIES> Maximum number of retries to download an individual segment [default: 15]
239-
--no-merge Download streams without merging them. Note that --output flag is ignored if this flag is
240-
used
241-
-t, --threads <THREADS> Maximum number of threads for parllel downloading of segments. Number of threads should be in
242-
range 1-16 (inclusive) [default: 5]
263+
--retries <RETRIES>
264+
Maximum number of retries to download an individual segment
265+
266+
[default: 15]
267+
268+
--no-merge
269+
Download streams without merging them. Note that --output flag is ignored if this flag is used
270+
271+
-t, --threads <THREADS>
272+
Maximum number of threads for parllel downloading of segments. Number of threads should be in range 1-16 (inclusive)
273+
274+
[default: 5]
243275
```
244276

245277
## Running on Android
@@ -256,7 +288,7 @@ $ ln -s /storage/emulated/0/Download Download
256288
2. Install [vsd on termux](https://github.com/clitic/vsd/blob/main/vsd/BUILD.md#android-on-termux). Currently, only *arm64-v8a* binaries pre-builts are available which can be installed using the following command.
257289

258290
```bash
259-
curl -L https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-aarch64-linux-android.tar.xz | tar xJC $PREFIX/bin
291+
curl -L https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-aarch64-linux-android.tar.xz | tar xJC $PREFIX/bin
260292
```
261293

262294
3. Use third party browsers like [Kiwi Browser](https://github.com/kiwibrowser/src.next) (*developer tools*) paired with [Get cookies.txt LOCALLY](https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc) extension or [Via Browser](https://play.google.com/store/apps/details?id=mark.via.gp) (*tools > resource sniffer*) to find playlists within websites.

vsd/vsd-on-colab.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@
3434
},
3535
"outputs": [],
3636
"source": [
37-
"#@title vsd 0.4.1\n",
37+
"#@title vsd 0.4.2\n",
3838
"\n",
3939
"import shutil\n",
4040
"import os\n",
4141
"\n",
4242
"if shutil.which(\"vsd\") is None:\n",
43-
" !curl -L https://github.com/clitic/vsd/releases/download/vsd-0.4.1/vsd-0.4.1-x86_64-unknown-linux-musl.tar.xz | tar xJC /usr/local/bin\n",
43+
" !curl -L https://github.com/clitic/vsd/releases/download/vsd-0.4.2/vsd-0.4.2-x86_64-unknown-linux-musl.tar.xz | tar xJC /usr/local/bin\n",
4444
"\n",
4545
"url = \"https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8\" #@param {type:\"string\"}\n",
4646
"output = \"/content/downloads/test-stream.mp4\" #@param {type:\"string\"}\n",

0 commit comments

Comments
 (0)