|
|
@ -22,12 +22,10 @@ yt-dlp is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on t
|
|
|
|
<!-- MANPAGE: MOVE "USAGE AND OPTIONS" SECTION HERE -->
|
|
|
|
<!-- MANPAGE: MOVE "USAGE AND OPTIONS" SECTION HERE -->
|
|
|
|
|
|
|
|
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
|
* [NEW FEATURES](#new-features)
|
|
|
|
|
|
|
|
* [Differences in default behavior](#differences-in-default-behavior)
|
|
|
|
|
|
|
|
* [INSTALLATION](#installation)
|
|
|
|
* [INSTALLATION](#installation)
|
|
|
|
* [Detailed instructions](https://github.com/yt-dlp/yt-dlp/wiki/Installation)
|
|
|
|
* [Detailed instructions](https://github.com/yt-dlp/yt-dlp/wiki/Installation)
|
|
|
|
* [Update](#update)
|
|
|
|
|
|
|
|
* [Release Files](#release-files)
|
|
|
|
* [Release Files](#release-files)
|
|
|
|
|
|
|
|
* [Update](#update)
|
|
|
|
* [Dependencies](#dependencies)
|
|
|
|
* [Dependencies](#dependencies)
|
|
|
|
* [Compile](#compile)
|
|
|
|
* [Compile](#compile)
|
|
|
|
* [USAGE AND OPTIONS](#usage-and-options)
|
|
|
|
* [USAGE AND OPTIONS](#usage-and-options)
|
|
|
@ -65,7 +63,10 @@ yt-dlp is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on t
|
|
|
|
* [Developing Plugins](#developing-plugins)
|
|
|
|
* [Developing Plugins](#developing-plugins)
|
|
|
|
* [EMBEDDING YT-DLP](#embedding-yt-dlp)
|
|
|
|
* [EMBEDDING YT-DLP](#embedding-yt-dlp)
|
|
|
|
* [Embedding examples](#embedding-examples)
|
|
|
|
* [Embedding examples](#embedding-examples)
|
|
|
|
* [DEPRECATED OPTIONS](#deprecated-options)
|
|
|
|
* [CHANGES FROM YOUTUBE-DL](#changes-from-youtube-dl)
|
|
|
|
|
|
|
|
* [New features](#new-features)
|
|
|
|
|
|
|
|
* [Differences in default behavior](#differences-in-default-behavior)
|
|
|
|
|
|
|
|
* [Deprecated options](#deprecated-options)
|
|
|
|
* [CONTRIBUTING](CONTRIBUTING.md#contributing-to-yt-dlp)
|
|
|
|
* [CONTRIBUTING](CONTRIBUTING.md#contributing-to-yt-dlp)
|
|
|
|
* [Opening an Issue](CONTRIBUTING.md#opening-an-issue)
|
|
|
|
* [Opening an Issue](CONTRIBUTING.md#opening-an-issue)
|
|
|
|
* [Developer Instructions](CONTRIBUTING.md#developer-instructions)
|
|
|
|
* [Developer Instructions](CONTRIBUTING.md#developer-instructions)
|
|
|
@ -74,103 +75,6 @@ yt-dlp is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on t
|
|
|
|
<!-- MANPAGE: END EXCLUDED SECTION -->
|
|
|
|
<!-- MANPAGE: END EXCLUDED SECTION -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# NEW FEATURES
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* Forked from [**yt-dlc@f9401f2**](https://github.com/blackjack4494/yt-dlc/commit/f9401f2a91987068139c5f757b12fc711d4c0cee) and merged with [**youtube-dl@be008e6**](https://github.com/ytdl-org/youtube-dl/commit/be008e657d79832642e2158557c899249c9e31cd) ([exceptions](https://github.com/yt-dlp/yt-dlp/issues/21))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **[SponsorBlock Integration](#sponsorblock-options)**: You can mark/remove sponsor sections in YouTube videos by utilizing the [SponsorBlock](https://sponsor.ajay.app) API
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **[Format Sorting](#sorting-formats)**: The default format sorting options have been changed so that higher resolution and better codecs will be now preferred instead of simply using larger bitrate. Furthermore, you can now specify the sort order using `-S`. This allows for much easier format selection than what is possible by simply using `--format` ([examples](#format-selection-examples))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Merged with animelover1984/youtube-dl**: You get most of the features and improvements from [animelover1984/youtube-dl](https://github.com/animelover1984/youtube-dl) including `--write-comments`, `BiliBiliSearch`, `BilibiliChannel`, Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. Note that NicoNico livestreams are not available. See [#31](https://github.com/yt-dlp/yt-dlp/pull/31) for details.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **YouTube improvements**:
|
|
|
|
|
|
|
|
* Supports Clips, Stories (`ytstories:<channel UCID>`), Search (including filters)**\***, YouTube Music Search, Channel-specific search, Search prefixes (`ytsearch:`, `ytsearchdate:`)**\***, Mixes, and Feeds (`:ytfav`, `:ytwatchlater`, `:ytsubs`, `:ythistory`, `:ytrec`, `:ytnotif`)
|
|
|
|
|
|
|
|
* Fix for [n-sig based throttling](https://github.com/ytdl-org/youtube-dl/issues/29326) **\***
|
|
|
|
|
|
|
|
* Supports some (but not all) age-gated content without cookies
|
|
|
|
|
|
|
|
* Download livestreams from the start using `--live-from-start` (*experimental*)
|
|
|
|
|
|
|
|
* Channel URLs download all uploads of the channel, including shorts and live
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Cookies from browser**: Cookies can be automatically extracted from all major web browsers using `--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Download time range**: Videos can be downloaded partially based on either timestamps or chapters using `--download-sections`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Split video by chapters**: Videos can be split into multiple files based on chapters using `--split-chapters`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Multi-threaded fragment downloads**: Download multiple fragments of m3u8/mpd videos in parallel. Use `--concurrent-fragments` (`-N`) option to set the number of threads used
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Aria2c with HLS/DASH**: You can use `aria2c` as the external downloader for DASH(mpd) and HLS(m3u8) formats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **New and fixed extractors**: Many new extractors have been added and a lot of existing ones have been fixed. See the [changelog](Changelog.md) or the [list of supported sites](supportedsites.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **New MSOs**: Philo, Spectrum, SlingTV, Cablevision, RCN etc.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Subtitle extraction from manifests**: Subtitles can be extracted from streaming media manifests. See [commit/be6202f](https://github.com/yt-dlp/yt-dlp/commit/be6202f12b97858b9d716e608394b51065d0419f) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Multiple paths and output templates**: You can give different [output templates](#output-template) and download paths for different types of files. You can also set a temporary path where intermediary files are downloaded to using `--paths` (`-P`)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Portable Configuration**: Configuration files are automatically loaded from the home and root directories. See [CONFIGURATION](#configuration) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Output template improvements**: Output templates can now have date-time formatting, numeric offsets, object traversal etc. See [output template](#output-template) for details. Even more advanced operations can also be done with the help of `--parse-metadata` and `--replace-in-metadata`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Other new options**: Many new options have been added such as `--alias`, `--print`, `--concat-playlist`, `--wait-for-video`, `--retry-sleep`, `--sleep-requests`, `--convert-thumbnails`, `--force-download-archive`, `--force-overwrites`, `--break-match-filter` etc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Improvements**: Regex and other operators in `--format`/`--match-filter`, multiple `--postprocessor-args` and `--downloader-args`, faster archive checking, more [format selection options](#format-selection), merge multi-video/audio, multiple `--config-locations`, `--exec` at different stages, etc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Plugins**: Extractors and PostProcessors can be loaded from an external file. See [plugins](#plugins) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Self updater**: The releases can be updated using `yt-dlp -U`, and downgraded using `--update-to` if required
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Automated builds**: [Nightly/master builds](#update-channels) can be used with `--update-to nightly` and `--update-to master`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See [changelog](Changelog.md) or [commits](https://github.com/yt-dlp/yt-dlp/commits) for the full list of changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Features marked with a **\*** have been back-ported to youtube-dl
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Differences in default behavior
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Some of yt-dlp's default options are different from that of youtube-dl and youtube-dlc:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* yt-dlp supports only [Python 3.8+](## "Windows 7"), and *may* remove support for more versions as they [become EOL](https://devguide.python.org/versions/#python-release-cycle); while [youtube-dl still supports Python 2.6+ and 3.2+](https://github.com/ytdl-org/youtube-dl/issues/30568#issue-1118238743)
|
|
|
|
|
|
|
|
* The options `--auto-number` (`-A`), `--title` (`-t`) and `--literal` (`-l`), no longer work. See [removed options](#Removed) for details
|
|
|
|
|
|
|
|
* `avconv` is not supported as an alternative to `ffmpeg`
|
|
|
|
|
|
|
|
* yt-dlp stores config files in slightly different locations to youtube-dl. See [CONFIGURATION](#configuration) for a list of correct locations
|
|
|
|
|
|
|
|
* The default [output template](#output-template) is `%(title)s [%(id)s].%(ext)s`. There is no real reason for this change. This was changed before yt-dlp was ever made public and now there are no plans to change it back to `%(title)s-%(id)s.%(ext)s`. Instead, you may use `--compat-options filename`
|
|
|
|
|
|
|
|
* The default [format sorting](#sorting-formats) is different from youtube-dl and prefers higher resolution and better codecs rather than higher bitrates. You can use the `--format-sort` option to change this to any order you prefer, or use `--compat-options format-sort` to use youtube-dl's sorting order
|
|
|
|
|
|
|
|
* The default format selector is `bv*+ba/b`. This means that if a combined video + audio format that is better than the best video-only format is found, the former will be preferred. Use `-f bv+ba/b` or `--compat-options format-spec` to revert this
|
|
|
|
|
|
|
|
* Unlike youtube-dlc, yt-dlp does not allow merging multiple audio/video streams into one file by default (since this conflicts with the use of `-f bv*+ba`). If needed, this feature must be enabled using `--audio-multistreams` and `--video-multistreams`. You can also use `--compat-options multistreams` to enable both
|
|
|
|
|
|
|
|
* `--no-abort-on-error` is enabled by default. Use `--abort-on-error` or `--compat-options abort-on-error` to abort on errors instead
|
|
|
|
|
|
|
|
* When writing metadata files such as thumbnails, description or infojson, the same information (if available) is also written for playlists. Use `--no-write-playlist-metafiles` or `--compat-options no-playlist-metafiles` to not write these files
|
|
|
|
|
|
|
|
* `--add-metadata` attaches the `infojson` to `mkv` files in addition to writing the metadata when used with `--write-info-json`. Use `--no-embed-info-json` or `--compat-options no-attach-info-json` to revert this
|
|
|
|
|
|
|
|
* Some metadata are embedded into different fields when using `--add-metadata` as compared to youtube-dl. Most notably, `comment` field contains the `webpage_url` and `synopsis` contains the `description`. You can [use `--parse-metadata`](#modifying-metadata) to modify this to your liking or use `--compat-options embed-metadata` to revert this
|
|
|
|
|
|
|
|
* `playlist_index` behaves differently when used with options like `--playlist-reverse` and `--playlist-items`. See [#302](https://github.com/yt-dlp/yt-dlp/issues/302) for details. You can use `--compat-options playlist-index` if you want to keep the earlier behavior
|
|
|
|
|
|
|
|
* The output of `-F` is listed in a new format. Use `--compat-options list-formats` to revert this
|
|
|
|
|
|
|
|
* Live chats (if available) are considered as subtitles. Use `--sub-langs all,-live_chat` to download all subtitles except live chat. You can also use `--compat-options no-live-chat` to prevent any live chat/danmaku from downloading
|
|
|
|
|
|
|
|
* YouTube channel URLs download all uploads of the channel. To download only the videos in a specific tab, pass the tab's URL. If the channel does not show the requested tab, an error will be raised. Also, `/live` URLs raise an error if there are no live videos instead of silently downloading the entire channel. You may use `--compat-options no-youtube-channel-redirect` to revert all these redirections
|
|
|
|
|
|
|
|
* Unavailable videos are also listed for YouTube playlists. Use `--compat-options no-youtube-unavailable-videos` to remove this
|
|
|
|
|
|
|
|
* The upload dates extracted from YouTube are in UTC [when available](https://github.com/yt-dlp/yt-dlp/blob/89e4d86171c7b7c997c77d4714542e0383bf0db0/yt_dlp/extractor/youtube.py#L3898-L3900). Use `--compat-options no-youtube-prefer-utc-upload-date` to prefer the non-UTC upload date.
|
|
|
|
|
|
|
|
* If `ffmpeg` is used as the downloader, the downloading and merging of formats happen in a single step when possible. Use `--compat-options no-direct-merge` to revert this
|
|
|
|
|
|
|
|
* Thumbnail embedding in `mp4` is done with mutagen if possible. Use `--compat-options embed-thumbnail-atomicparsley` to force the use of AtomicParsley instead
|
|
|
|
|
|
|
|
* Some internal metadata such as filenames are removed by default from the infojson. Use `--no-clean-infojson` or `--compat-options no-clean-infojson` to revert this
|
|
|
|
|
|
|
|
* When `--embed-subs` and `--write-subs` are used together, the subtitles are written to disk and also embedded in the media file. You can use just `--embed-subs` to embed the subs and automatically delete the separate file. See [#630 (comment)](https://github.com/yt-dlp/yt-dlp/issues/630#issuecomment-893659460) for more info. `--compat-options no-keep-subs` can be used to revert this
|
|
|
|
|
|
|
|
* `certifi` will be used for SSL root certificates, if installed. If you want to use system certificates (e.g. self-signed), use `--compat-options no-certifi`
|
|
|
|
|
|
|
|
* yt-dlp's sanitization of invalid characters in filenames is different/smarter than in youtube-dl. You can use `--compat-options filename-sanitization` to revert to youtube-dl's behavior
|
|
|
|
|
|
|
|
* yt-dlp tries to parse the external downloader outputs into the standard progress output if possible (Currently implemented: [~~aria2c~~](https://github.com/yt-dlp/yt-dlp/issues/5931)). You can use `--compat-options no-external-downloader-progress` to get the downloader output as-is
|
|
|
|
|
|
|
|
* yt-dlp versions between 2021.09.01 and 2023.01.02 applies `--match-filter` to nested playlists. This was an unintentional side-effect of [8f18ac](https://github.com/yt-dlp/yt-dlp/commit/8f18aca8717bb0dd49054555af8d386e5eda3a88) and is fixed in [d7b460](https://github.com/yt-dlp/yt-dlp/commit/d7b460d0e5fc710950582baed2e3fc616ed98a80). Use `--compat-options playlist-match-filter` to revert this
|
|
|
|
|
|
|
|
* yt-dlp versions between 2021.11.10 and 2023.06.21 estimated `filesize_approx` values for fragmented/manifest formats. This was added for convenience in [f2fe69](https://github.com/yt-dlp/yt-dlp/commit/f2fe69c7b0d208bdb1f6292b4ae92bc1e1a7444a), but was reverted in [0dff8e](https://github.com/yt-dlp/yt-dlp/commit/0dff8e4d1e6e9fb938f4256ea9af7d81f42fd54f) due to the potentially extreme inaccuracy of the estimated values. Use `--compat-options manifest-filesize-approx` to keep extracting the estimated values
|
|
|
|
|
|
|
|
* yt-dlp uses modern http client backends such as `requests`. Use `--compat-options prefer-legacy-http-handler` to prefer the legacy http handler (`urllib`) to be used for standard http requests.
|
|
|
|
|
|
|
|
* The sub-module `swfinterp` is removed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For ease of use, a few more compat options are available:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `--compat-options all`: Use all compat options (Do NOT use)
|
|
|
|
|
|
|
|
* `--compat-options youtube-dl`: Same as `--compat-options all,-multistreams,-playlist-match-filter,-manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options youtube-dlc`: Same as `--compat-options all,-no-live-chat,-no-youtube-channel-redirect,-playlist-match-filter,-manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options 2021`: Same as `--compat-options 2022,no-certifi,filename-sanitization,no-youtube-prefer-utc-upload-date`
|
|
|
|
|
|
|
|
* `--compat-options 2022`: Same as `--compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options 2023`: Currently does nothing. Use this to enable all future compat options
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# INSTALLATION
|
|
|
|
# INSTALLATION
|
|
|
|
|
|
|
|
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
@ -186,41 +90,6 @@ For ease of use, a few more compat options are available:
|
|
|
|
You can install yt-dlp using [the binaries](#release-files), [pip](https://pypi.org/project/yt-dlp) or one using a third-party package manager. See [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation) for detailed instructions
|
|
|
|
You can install yt-dlp using [the binaries](#release-files), [pip](https://pypi.org/project/yt-dlp) or one using a third-party package manager. See [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation) for detailed instructions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## UPDATE
|
|
|
|
|
|
|
|
You can use `yt-dlp -U` to update if you are using the [release binaries](#release-files)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If you [installed with pip](https://github.com/yt-dlp/yt-dlp/wiki/Installation#with-pip), simply re-run the same command that was used to install the program
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For other third-party package managers, see [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation#third-party-package-managers) or refer their documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="update-channels"/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
There are currently three release channels for binaries: `stable`, `nightly` and `master`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `stable` is the default channel, and many of its changes have been tested by users of the `nightly` and `master` channels.
|
|
|
|
|
|
|
|
* The `nightly` channel has releases scheduled to build every day around midnight UTC, for a snapshot of the project's new patches and changes. This is the **recommended channel for regular users** of yt-dlp. The `nightly` releases are available from [yt-dlp/yt-dlp-nightly-builds](https://github.com/yt-dlp/yt-dlp-nightly-builds/releases) or as development releases of the `yt-dlp` PyPI package (which can be installed with pip's `--pre` flag).
|
|
|
|
|
|
|
|
* The `master` channel features releases that are built after each push to the master branch, and these will have the very latest fixes and additions, but may also be more prone to regressions. They are available from [yt-dlp/yt-dlp-master-builds](https://github.com/yt-dlp/yt-dlp-master-builds/releases).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When using `--update`/`-U`, a release binary will only update to its current channel.
|
|
|
|
|
|
|
|
`--update-to CHANNEL` can be used to switch to a different channel when a newer version is available. `--update-to [CHANNEL@]TAG` can also be used to upgrade or downgrade to specific tags from a channel.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You may also use `--update-to <repository>` (`<owner>/<repository>`) to update to a channel on a completely different repository. Be careful with what repository you are updating to though, there is no verification done for binaries from different repositories.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example usage:
|
|
|
|
|
|
|
|
* `yt-dlp --update-to master` switch to the `master` channel and update to its latest release
|
|
|
|
|
|
|
|
* `yt-dlp --update-to stable@2023.07.06` upgrade/downgrade to release to `stable` channel tag `2023.07.06`
|
|
|
|
|
|
|
|
* `yt-dlp --update-to 2023.10.07` upgrade/downgrade to tag `2023.10.07` if it exists on the current channel
|
|
|
|
|
|
|
|
* `yt-dlp --update-to example/yt-dlp@2023.09.24` upgrade/downgrade to the release from the `example/yt-dlp` repository, tag `2023.09.24`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Important**: Any user experiencing an issue with the `stable` release should install or update to the `nightly` release before submitting a bug report:
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
# To update to nightly from stable executable/binary:
|
|
|
|
|
|
|
|
yt-dlp --update-to nightly
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# To install nightly with pip:
|
|
|
|
|
|
|
|
python -m pip install -U --pre yt-dlp[default]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
|
<!-- MANPAGE: BEGIN EXCLUDED SECTION -->
|
|
|
|
## RELEASE FILES
|
|
|
|
## RELEASE FILES
|
|
|
|
|
|
|
|
|
|
|
@ -236,7 +105,7 @@ File|Description
|
|
|
|
|
|
|
|
|
|
|
|
File|Description
|
|
|
|
File|Description
|
|
|
|
:---|:---
|
|
|
|
:---|:---
|
|
|
|
[yt-dlp_x86.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_x86.exe)|Windows (Vista SP2+) standalone x86 (32-bit) binary
|
|
|
|
[yt-dlp_x86.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_x86.exe)|Windows (Win7 SP1+) standalone x86 (32-bit) binary
|
|
|
|
[yt-dlp_min.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_min.exe)|Windows (Win7 SP1+) standalone x64 binary built with `py2exe`<br/> ([Not recommended](#standalone-py2exe-builds-windows))
|
|
|
|
[yt-dlp_min.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_min.exe)|Windows (Win7 SP1+) standalone x64 binary built with `py2exe`<br/> ([Not recommended](#standalone-py2exe-builds-windows))
|
|
|
|
[yt-dlp_linux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux)|Linux standalone x64 binary
|
|
|
|
[yt-dlp_linux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux)|Linux standalone x64 binary
|
|
|
|
[yt-dlp_linux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux.zip)|Unpackaged Linux executable (no auto-update)
|
|
|
|
[yt-dlp_linux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux.zip)|Unpackaged Linux executable (no auto-update)
|
|
|
@ -267,6 +136,42 @@ gpg --verify SHA2-512SUMS.sig SHA2-512SUMS
|
|
|
|
|
|
|
|
|
|
|
|
**Note**: The manpages, shell completion (autocomplete) files etc. are available inside the [source tarball](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.tar.gz)
|
|
|
|
**Note**: The manpages, shell completion (autocomplete) files etc. are available inside the [source tarball](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.tar.gz)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## UPDATE
|
|
|
|
|
|
|
|
You can use `yt-dlp -U` to update if you are using the [release binaries](#release-files)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If you [installed with pip](https://github.com/yt-dlp/yt-dlp/wiki/Installation#with-pip), simply re-run the same command that was used to install the program
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For other third-party package managers, see [the wiki](https://github.com/yt-dlp/yt-dlp/wiki/Installation#third-party-package-managers) or refer their documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="update-channels"></a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
There are currently three release channels for binaries: `stable`, `nightly` and `master`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `stable` is the default channel, and many of its changes have been tested by users of the `nightly` and `master` channels.
|
|
|
|
|
|
|
|
* The `nightly` channel has releases scheduled to build every day around midnight UTC, for a snapshot of the project's new patches and changes. This is the **recommended channel for regular users** of yt-dlp. The `nightly` releases are available from [yt-dlp/yt-dlp-nightly-builds](https://github.com/yt-dlp/yt-dlp-nightly-builds/releases) or as development releases of the `yt-dlp` PyPI package (which can be installed with pip's `--pre` flag).
|
|
|
|
|
|
|
|
* The `master` channel features releases that are built after each push to the master branch, and these will have the very latest fixes and additions, but may also be more prone to regressions. They are available from [yt-dlp/yt-dlp-master-builds](https://github.com/yt-dlp/yt-dlp-master-builds/releases).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When using `--update`/`-U`, a release binary will only update to its current channel.
|
|
|
|
|
|
|
|
`--update-to CHANNEL` can be used to switch to a different channel when a newer version is available. `--update-to [CHANNEL@]TAG` can also be used to upgrade or downgrade to specific tags from a channel.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You may also use `--update-to <repository>` (`<owner>/<repository>`) to update to a channel on a completely different repository. Be careful with what repository you are updating to though, there is no verification done for binaries from different repositories.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example usage:
|
|
|
|
|
|
|
|
* `yt-dlp --update-to master` switch to the `master` channel and update to its latest release
|
|
|
|
|
|
|
|
* `yt-dlp --update-to stable@2023.07.06` upgrade/downgrade to release to `stable` channel tag `2023.07.06`
|
|
|
|
|
|
|
|
* `yt-dlp --update-to 2023.10.07` upgrade/downgrade to tag `2023.10.07` if it exists on the current channel
|
|
|
|
|
|
|
|
* `yt-dlp --update-to example/yt-dlp@2023.09.24` upgrade/downgrade to the release from the `example/yt-dlp` repository, tag `2023.09.24`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**Important**: Any user experiencing an issue with the `stable` release should install or update to the `nightly` release before submitting a bug report:
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
# To update to nightly from stable executable/binary:
|
|
|
|
|
|
|
|
yt-dlp --update-to nightly
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# To install nightly with pip:
|
|
|
|
|
|
|
|
python3 -m pip install -U --pre yt-dlp[default]
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## DEPENDENCIES
|
|
|
|
## DEPENDENCIES
|
|
|
|
Python versions 3.8+ (CPython and PyPy) are supported. Other versions and implementations may or may not work correctly.
|
|
|
|
Python versions 3.8+ (CPython and PyPy) are supported. Other versions and implementations may or may not work correctly.
|
|
|
|
|
|
|
|
|
|
|
@ -283,7 +188,7 @@ While all the other dependencies are optional, `ffmpeg` and `ffprobe` are highly
|
|
|
|
|
|
|
|
|
|
|
|
There are bugs in ffmpeg that cause various issues when used alongside yt-dlp. Since ffmpeg is such an important dependency, we provide [custom builds](https://github.com/yt-dlp/FFmpeg-Builds#ffmpeg-static-auto-builds) with patches for some of these issues at [yt-dlp/FFmpeg-Builds](https://github.com/yt-dlp/FFmpeg-Builds). See [the readme](https://github.com/yt-dlp/FFmpeg-Builds#patches-applied) for details on the specific issues solved by these builds
|
|
|
|
There are bugs in ffmpeg that cause various issues when used alongside yt-dlp. Since ffmpeg is such an important dependency, we provide [custom builds](https://github.com/yt-dlp/FFmpeg-Builds#ffmpeg-static-auto-builds) with patches for some of these issues at [yt-dlp/FFmpeg-Builds](https://github.com/yt-dlp/FFmpeg-Builds). See [the readme](https://github.com/yt-dlp/FFmpeg-Builds#patches-applied) for details on the specific issues solved by these builds
|
|
|
|
|
|
|
|
|
|
|
|
**Important**: What you need is ffmpeg *binary*, **NOT** [the python package of the same name](https://pypi.org/project/ffmpeg)
|
|
|
|
**Important**: What you need is ffmpeg *binary*, **NOT** [the Python package of the same name](https://pypi.org/project/ffmpeg)
|
|
|
|
|
|
|
|
|
|
|
|
### Networking
|
|
|
|
### Networking
|
|
|
|
* [**certifi**](https://github.com/certifi/python-certifi)\* - Provides Mozilla's root certificate bundle. Licensed under [MPLv2](https://github.com/certifi/python-certifi/blob/master/LICENSE)
|
|
|
|
* [**certifi**](https://github.com/certifi/python-certifi)\* - Provides Mozilla's root certificate bundle. Licensed under [MPLv2](https://github.com/certifi/python-certifi/blob/master/LICENSE)
|
|
|
@ -321,7 +226,9 @@ If you do not have the necessary dependencies for a task you are attempting, yt-
|
|
|
|
## COMPILE
|
|
|
|
## COMPILE
|
|
|
|
|
|
|
|
|
|
|
|
### Standalone PyInstaller Builds
|
|
|
|
### Standalone PyInstaller Builds
|
|
|
|
To build the standalone executable, you must have Python and `pyinstaller` (plus any of yt-dlp's [optional dependencies](#dependencies) if needed). The executable will be built for the same architecture (x86/ARM, 32/64 bit) as the Python used. You can run the following commands:
|
|
|
|
To build the standalone executable, you must have Python and `pyinstaller` (plus any of yt-dlp's [optional dependencies](#dependencies) if needed). The executable will be built for the same CPU architecture as the Python used.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You can run the following commands:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
```
|
|
|
|
python3 devscripts/install_deps.py --include pyinstaller
|
|
|
|
python3 devscripts/install_deps.py --include pyinstaller
|
|
|
@ -331,11 +238,11 @@ python3 -m bundle.pyinstaller
|
|
|
|
|
|
|
|
|
|
|
|
On some systems, you may need to use `py` or `python` instead of `python3`.
|
|
|
|
On some systems, you may need to use `py` or `python` instead of `python3`.
|
|
|
|
|
|
|
|
|
|
|
|
`bundle/pyinstaller.py` accepts any arguments that can be passed to `pyinstaller`, such as `--onefile/-F` or `--onedir/-D`, which is further [documented here](https://pyinstaller.org/en/stable/usage.html#what-to-generate).
|
|
|
|
`python -m bundle.pyinstaller` accepts any arguments that can be passed to `pyinstaller`, such as `--onefile/-F` or `--onedir/-D`, which is further [documented here](https://pyinstaller.org/en/stable/usage.html#what-to-generate).
|
|
|
|
|
|
|
|
|
|
|
|
**Note**: Pyinstaller versions below 4.4 [do not support](https://github.com/pyinstaller/pyinstaller#requirements-and-tested-platforms) Python installed from the Windows store without using a virtual environment.
|
|
|
|
**Note**: Pyinstaller versions below 4.4 [do not support](https://github.com/pyinstaller/pyinstaller#requirements-and-tested-platforms) Python installed from the Windows store without using a virtual environment.
|
|
|
|
|
|
|
|
|
|
|
|
**Important**: Running `pyinstaller` directly **without** using `bundle/pyinstaller.py` is **not** officially supported. This may or may not work correctly.
|
|
|
|
**Important**: Running `pyinstaller` directly **instead of** using `python -m bundle.pyinstaller` is **not** officially supported. This may or may not work correctly.
|
|
|
|
|
|
|
|
|
|
|
|
### Platform-independent Binary (UNIX)
|
|
|
|
### Platform-independent Binary (UNIX)
|
|
|
|
You will need the build tools `python` (3.8+), `zip`, `make` (GNU), `pandoc`\* and `pytest`\*.
|
|
|
|
You will need the build tools `python` (3.8+), `zip`, `make` (GNU), `pandoc`\* and `pytest`\*.
|
|
|
@ -418,7 +325,7 @@ If you fork the project on GitHub, you can run your fork's [build workflow](.git
|
|
|
|
URLs, but emits an error if this is not
|
|
|
|
URLs, but emits an error if this is not
|
|
|
|
possible instead of searching
|
|
|
|
possible instead of searching
|
|
|
|
--ignore-config Don't load any more configuration files
|
|
|
|
--ignore-config Don't load any more configuration files
|
|
|
|
except those given by --config-locations.
|
|
|
|
except those given to --config-locations.
|
|
|
|
For backward compatibility, if this option
|
|
|
|
For backward compatibility, if this option
|
|
|
|
is found inside the system configuration
|
|
|
|
is found inside the system configuration
|
|
|
|
file, the user configuration is not loaded.
|
|
|
|
file, the user configuration is not loaded.
|
|
|
@ -683,7 +590,7 @@ If you fork the project on GitHub, you can run your fork's [build workflow](.git
|
|
|
|
-o, --output [TYPES:]TEMPLATE Output filename template; see "OUTPUT
|
|
|
|
-o, --output [TYPES:]TEMPLATE Output filename template; see "OUTPUT
|
|
|
|
TEMPLATE" for details
|
|
|
|
TEMPLATE" for details
|
|
|
|
--output-na-placeholder TEXT Placeholder for unavailable fields in
|
|
|
|
--output-na-placeholder TEXT Placeholder for unavailable fields in
|
|
|
|
"OUTPUT TEMPLATE" (default: "NA")
|
|
|
|
--output (default: "NA")
|
|
|
|
--restrict-filenames Restrict filenames to only ASCII characters,
|
|
|
|
--restrict-filenames Restrict filenames to only ASCII characters,
|
|
|
|
and avoid "&" and spaces in filenames
|
|
|
|
and avoid "&" and spaces in filenames
|
|
|
|
--no-restrict-filenames Allow Unicode characters, "&" and spaces in
|
|
|
|
--no-restrict-filenames Allow Unicode characters, "&" and spaces in
|
|
|
@ -1172,12 +1079,12 @@ Make chapter entries for, or remove various segments (sponsor,
|
|
|
|
You can configure yt-dlp by placing any supported command line option to a configuration file. The configuration is loaded from the following locations:
|
|
|
|
You can configure yt-dlp by placing any supported command line option to a configuration file. The configuration is loaded from the following locations:
|
|
|
|
|
|
|
|
|
|
|
|
1. **Main Configuration**:
|
|
|
|
1. **Main Configuration**:
|
|
|
|
* The file given by `--config-location`
|
|
|
|
* The file given to `--config-location`
|
|
|
|
1. **Portable Configuration**: (Recommended for portable installations)
|
|
|
|
1. **Portable Configuration**: (Recommended for portable installations)
|
|
|
|
* If using a binary, `yt-dlp.conf` in the same directory as the binary
|
|
|
|
* If using a binary, `yt-dlp.conf` in the same directory as the binary
|
|
|
|
* If running from source-code, `yt-dlp.conf` in the parent directory of `yt_dlp`
|
|
|
|
* If running from source-code, `yt-dlp.conf` in the parent directory of `yt_dlp`
|
|
|
|
1. **Home Configuration**:
|
|
|
|
1. **Home Configuration**:
|
|
|
|
* `yt-dlp.conf` in the home path given by `-P`
|
|
|
|
* `yt-dlp.conf` in the home path given to `-P`
|
|
|
|
* If `-P` is not given, the current directory is searched
|
|
|
|
* If `-P` is not given, the current directory is searched
|
|
|
|
1. **User Configuration**:
|
|
|
|
1. **User Configuration**:
|
|
|
|
* `${XDG_CONFIG_HOME}/yt-dlp.conf`
|
|
|
|
* `${XDG_CONFIG_HOME}/yt-dlp.conf`
|
|
|
@ -1296,7 +1203,7 @@ To summarize, the general syntax for a field is:
|
|
|
|
|
|
|
|
|
|
|
|
Additionally, you can set different output templates for the various metadata files separately from the general output template by specifying the type of file followed by the template separated by a colon `:`. The different file types supported are `subtitle`, `thumbnail`, `description`, `annotation` (deprecated), `infojson`, `link`, `pl_thumbnail`, `pl_description`, `pl_infojson`, `chapter`, `pl_video`. E.g. `-o "%(title)s.%(ext)s" -o "thumbnail:%(title)s\%(title)s.%(ext)s"` will put the thumbnails in a folder with the same name as the video. If any of the templates is empty, that type of file will not be written. E.g. `--write-thumbnail -o "thumbnail:"` will write thumbnails only for playlists and not for video.
|
|
|
|
Additionally, you can set different output templates for the various metadata files separately from the general output template by specifying the type of file followed by the template separated by a colon `:`. The different file types supported are `subtitle`, `thumbnail`, `description`, `annotation` (deprecated), `infojson`, `link`, `pl_thumbnail`, `pl_description`, `pl_infojson`, `chapter`, `pl_video`. E.g. `-o "%(title)s.%(ext)s" -o "thumbnail:%(title)s\%(title)s.%(ext)s"` will put the thumbnails in a folder with the same name as the video. If any of the templates is empty, that type of file will not be written. E.g. `--write-thumbnail -o "thumbnail:"` will write thumbnails only for playlists and not for video.
|
|
|
|
|
|
|
|
|
|
|
|
<a id="outtmpl-postprocess-note"/>
|
|
|
|
<a id="outtmpl-postprocess-note"></a>
|
|
|
|
|
|
|
|
|
|
|
|
**Note**: Due to post-processing (i.e. merging etc.), the actual output filename might differ. Use `--print after_move:filepath` to get the name after all post-processing is complete.
|
|
|
|
**Note**: Due to post-processing (i.e. merging etc.), the actual output filename might differ. Use `--print after_move:filepath` to get the name after all post-processing is complete.
|
|
|
|
|
|
|
|
|
|
|
@ -1756,9 +1663,9 @@ $ yt-dlp -S "+res:480,codec,br"
|
|
|
|
|
|
|
|
|
|
|
|
The metadata obtained by the extractors can be modified by using `--parse-metadata` and `--replace-in-metadata`
|
|
|
|
The metadata obtained by the extractors can be modified by using `--parse-metadata` and `--replace-in-metadata`
|
|
|
|
|
|
|
|
|
|
|
|
`--replace-in-metadata FIELDS REGEX REPLACE` is used to replace text in any metadata field using [python regular expression](https://docs.python.org/3/library/re.html#regular-expression-syntax). [Backreferences](https://docs.python.org/3/library/re.html?highlight=backreferences#re.sub) can be used in the replace string for advanced use.
|
|
|
|
`--replace-in-metadata FIELDS REGEX REPLACE` is used to replace text in any metadata field using [Python regular expression](https://docs.python.org/3/library/re.html#regular-expression-syntax). [Backreferences](https://docs.python.org/3/library/re.html?highlight=backreferences#re.sub) can be used in the replace string for advanced use.
|
|
|
|
|
|
|
|
|
|
|
|
The general syntax of `--parse-metadata FROM:TO` is to give the name of a field or an [output template](#output-template) to extract data from, and the format to interpret it as, separated by a colon `:`. Either a [python regular expression](https://docs.python.org/3/library/re.html#regular-expression-syntax) with named capture groups, a single field name, or a similar syntax to the [output template](#output-template) (only `%(field)s` formatting is supported) can be used for `TO`. The option can be used multiple times to parse and modify various fields.
|
|
|
|
The general syntax of `--parse-metadata FROM:TO` is to give the name of a field or an [output template](#output-template) to extract data from, and the format to interpret it as, separated by a colon `:`. Either a [Python regular expression](https://docs.python.org/3/library/re.html#regular-expression-syntax) with named capture groups, a single field name, or a similar syntax to the [output template](#output-template) (only `%(field)s` formatting is supported) can be used for `TO`. The option can be used multiple times to parse and modify various fields.
|
|
|
|
|
|
|
|
|
|
|
|
Note that these options preserve their relative order, allowing replacements to be made in parsed fields and viceversa. Also, any field thus created can be used in the [output template](#output-template) and will also affect the media file's metadata added when using `--embed-metadata`.
|
|
|
|
Note that these options preserve their relative order, allowing replacements to be made in parsed fields and viceversa. Also, any field thus created can be used in the [output template](#output-template) and will also affect the media file's metadata added when using `--embed-metadata`.
|
|
|
|
|
|
|
|
|
|
|
@ -2180,9 +2087,106 @@ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
|
|
|
ydl.download(URLS)
|
|
|
|
ydl.download(URLS)
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
<!-- MANPAGE: MOVE "NEW FEATURES" SECTION HERE -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# DEPRECATED OPTIONS
|
|
|
|
# CHANGES FROM YOUTUBE-DL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### New features
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* Forked from [**yt-dlc@f9401f2**](https://github.com/blackjack4494/yt-dlc/commit/f9401f2a91987068139c5f757b12fc711d4c0cee) and merged with [**youtube-dl@be008e6**](https://github.com/ytdl-org/youtube-dl/commit/be008e657d79832642e2158557c899249c9e31cd) ([exceptions](https://github.com/yt-dlp/yt-dlp/issues/21))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **[SponsorBlock Integration](#sponsorblock-options)**: You can mark/remove sponsor sections in YouTube videos by utilizing the [SponsorBlock](https://sponsor.ajay.app) API
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **[Format Sorting](#sorting-formats)**: The default format sorting options have been changed so that higher resolution and better codecs will be now preferred instead of simply using larger bitrate. Furthermore, you can now specify the sort order using `-S`. This allows for much easier format selection than what is possible by simply using `--format` ([examples](#format-selection-examples))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Merged with animelover1984/youtube-dl**: You get most of the features and improvements from [animelover1984/youtube-dl](https://github.com/animelover1984/youtube-dl) including `--write-comments`, `BiliBiliSearch`, `BilibiliChannel`, Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. Note that NicoNico livestreams are not available. See [#31](https://github.com/yt-dlp/yt-dlp/pull/31) for details.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **YouTube improvements**:
|
|
|
|
|
|
|
|
* Supports Clips, Stories (`ytstories:<channel UCID>`), Search (including filters)**\***, YouTube Music Search, Channel-specific search, Search prefixes (`ytsearch:`, `ytsearchdate:`)**\***, Mixes, and Feeds (`:ytfav`, `:ytwatchlater`, `:ytsubs`, `:ythistory`, `:ytrec`, `:ytnotif`)
|
|
|
|
|
|
|
|
* Fix for [n-sig based throttling](https://github.com/ytdl-org/youtube-dl/issues/29326) **\***
|
|
|
|
|
|
|
|
* Supports some (but not all) age-gated content without cookies
|
|
|
|
|
|
|
|
* Download livestreams from the start using `--live-from-start` (*experimental*)
|
|
|
|
|
|
|
|
* Channel URLs download all uploads of the channel, including shorts and live
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Cookies from browser**: Cookies can be automatically extracted from all major web browsers using `--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Download time range**: Videos can be downloaded partially based on either timestamps or chapters using `--download-sections`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Split video by chapters**: Videos can be split into multiple files based on chapters using `--split-chapters`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Multi-threaded fragment downloads**: Download multiple fragments of m3u8/mpd videos in parallel. Use `--concurrent-fragments` (`-N`) option to set the number of threads used
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Aria2c with HLS/DASH**: You can use `aria2c` as the external downloader for DASH(mpd) and HLS(m3u8) formats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **New and fixed extractors**: Many new extractors have been added and a lot of existing ones have been fixed. See the [changelog](Changelog.md) or the [list of supported sites](supportedsites.md)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **New MSOs**: Philo, Spectrum, SlingTV, Cablevision, RCN etc.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Subtitle extraction from manifests**: Subtitles can be extracted from streaming media manifests. See [commit/be6202f](https://github.com/yt-dlp/yt-dlp/commit/be6202f12b97858b9d716e608394b51065d0419f) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Multiple paths and output templates**: You can give different [output templates](#output-template) and download paths for different types of files. You can also set a temporary path where intermediary files are downloaded to using `--paths` (`-P`)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Portable Configuration**: Configuration files are automatically loaded from the home and root directories. See [CONFIGURATION](#configuration) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Output template improvements**: Output templates can now have date-time formatting, numeric offsets, object traversal etc. See [output template](#output-template) for details. Even more advanced operations can also be done with the help of `--parse-metadata` and `--replace-in-metadata`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Other new options**: Many new options have been added such as `--alias`, `--print`, `--concat-playlist`, `--wait-for-video`, `--retry-sleep`, `--sleep-requests`, `--convert-thumbnails`, `--force-download-archive`, `--force-overwrites`, `--break-match-filter` etc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Improvements**: Regex and other operators in `--format`/`--match-filter`, multiple `--postprocessor-args` and `--downloader-args`, faster archive checking, more [format selection options](#format-selection), merge multi-video/audio, multiple `--config-locations`, `--exec` at different stages, etc
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Plugins**: Extractors and PostProcessors can be loaded from an external file. See [plugins](#plugins) for details
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Self updater**: The releases can be updated using `yt-dlp -U`, and downgraded using `--update-to` if required
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* **Automated builds**: [Nightly/master builds](#update-channels) can be used with `--update-to nightly` and `--update-to master`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See [changelog](Changelog.md) or [commits](https://github.com/yt-dlp/yt-dlp/commits) for the full list of changes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Features marked with a **\*** have been back-ported to youtube-dl
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Differences in default behavior
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Some of yt-dlp's default options are different from that of youtube-dl and youtube-dlc:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* yt-dlp supports only [Python 3.8+](## "Windows 7"), and *may* remove support for more versions as they [become EOL](https://devguide.python.org/versions/#python-release-cycle); while [youtube-dl still supports Python 2.6+ and 3.2+](https://github.com/ytdl-org/youtube-dl/issues/30568#issue-1118238743)
|
|
|
|
|
|
|
|
* The options `--auto-number` (`-A`), `--title` (`-t`) and `--literal` (`-l`), no longer work. See [removed options](#Removed) for details
|
|
|
|
|
|
|
|
* `avconv` is not supported as an alternative to `ffmpeg`
|
|
|
|
|
|
|
|
* yt-dlp stores config files in slightly different locations to youtube-dl. See [CONFIGURATION](#configuration) for a list of correct locations
|
|
|
|
|
|
|
|
* The default [output template](#output-template) is `%(title)s [%(id)s].%(ext)s`. There is no real reason for this change. This was changed before yt-dlp was ever made public and now there are no plans to change it back to `%(title)s-%(id)s.%(ext)s`. Instead, you may use `--compat-options filename`
|
|
|
|
|
|
|
|
* The default [format sorting](#sorting-formats) is different from youtube-dl and prefers higher resolution and better codecs rather than higher bitrates. You can use the `--format-sort` option to change this to any order you prefer, or use `--compat-options format-sort` to use youtube-dl's sorting order
|
|
|
|
|
|
|
|
* The default format selector is `bv*+ba/b`. This means that if a combined video + audio format that is better than the best video-only format is found, the former will be preferred. Use `-f bv+ba/b` or `--compat-options format-spec` to revert this
|
|
|
|
|
|
|
|
* Unlike youtube-dlc, yt-dlp does not allow merging multiple audio/video streams into one file by default (since this conflicts with the use of `-f bv*+ba`). If needed, this feature must be enabled using `--audio-multistreams` and `--video-multistreams`. You can also use `--compat-options multistreams` to enable both
|
|
|
|
|
|
|
|
* `--no-abort-on-error` is enabled by default. Use `--abort-on-error` or `--compat-options abort-on-error` to abort on errors instead
|
|
|
|
|
|
|
|
* When writing metadata files such as thumbnails, description or infojson, the same information (if available) is also written for playlists. Use `--no-write-playlist-metafiles` or `--compat-options no-playlist-metafiles` to not write these files
|
|
|
|
|
|
|
|
* `--add-metadata` attaches the `infojson` to `mkv` files in addition to writing the metadata when used with `--write-info-json`. Use `--no-embed-info-json` or `--compat-options no-attach-info-json` to revert this
|
|
|
|
|
|
|
|
* Some metadata are embedded into different fields when using `--add-metadata` as compared to youtube-dl. Most notably, `comment` field contains the `webpage_url` and `synopsis` contains the `description`. You can [use `--parse-metadata`](#modifying-metadata) to modify this to your liking or use `--compat-options embed-metadata` to revert this
|
|
|
|
|
|
|
|
* `playlist_index` behaves differently when used with options like `--playlist-reverse` and `--playlist-items`. See [#302](https://github.com/yt-dlp/yt-dlp/issues/302) for details. You can use `--compat-options playlist-index` if you want to keep the earlier behavior
|
|
|
|
|
|
|
|
* The output of `-F` is listed in a new format. Use `--compat-options list-formats` to revert this
|
|
|
|
|
|
|
|
* Live chats (if available) are considered as subtitles. Use `--sub-langs all,-live_chat` to download all subtitles except live chat. You can also use `--compat-options no-live-chat` to prevent any live chat/danmaku from downloading
|
|
|
|
|
|
|
|
* YouTube channel URLs download all uploads of the channel. To download only the videos in a specific tab, pass the tab's URL. If the channel does not show the requested tab, an error will be raised. Also, `/live` URLs raise an error if there are no live videos instead of silently downloading the entire channel. You may use `--compat-options no-youtube-channel-redirect` to revert all these redirections
|
|
|
|
|
|
|
|
* Unavailable videos are also listed for YouTube playlists. Use `--compat-options no-youtube-unavailable-videos` to remove this
|
|
|
|
|
|
|
|
* The upload dates extracted from YouTube are in UTC [when available](https://github.com/yt-dlp/yt-dlp/blob/89e4d86171c7b7c997c77d4714542e0383bf0db0/yt_dlp/extractor/youtube.py#L3898-L3900). Use `--compat-options no-youtube-prefer-utc-upload-date` to prefer the non-UTC upload date.
|
|
|
|
|
|
|
|
* If `ffmpeg` is used as the downloader, the downloading and merging of formats happen in a single step when possible. Use `--compat-options no-direct-merge` to revert this
|
|
|
|
|
|
|
|
* Thumbnail embedding in `mp4` is done with mutagen if possible. Use `--compat-options embed-thumbnail-atomicparsley` to force the use of AtomicParsley instead
|
|
|
|
|
|
|
|
* Some internal metadata such as filenames are removed by default from the infojson. Use `--no-clean-infojson` or `--compat-options no-clean-infojson` to revert this
|
|
|
|
|
|
|
|
* When `--embed-subs` and `--write-subs` are used together, the subtitles are written to disk and also embedded in the media file. You can use just `--embed-subs` to embed the subs and automatically delete the separate file. See [#630 (comment)](https://github.com/yt-dlp/yt-dlp/issues/630#issuecomment-893659460) for more info. `--compat-options no-keep-subs` can be used to revert this
|
|
|
|
|
|
|
|
* `certifi` will be used for SSL root certificates, if installed. If you want to use system certificates (e.g. self-signed), use `--compat-options no-certifi`
|
|
|
|
|
|
|
|
* yt-dlp's sanitization of invalid characters in filenames is different/smarter than in youtube-dl. You can use `--compat-options filename-sanitization` to revert to youtube-dl's behavior
|
|
|
|
|
|
|
|
* ~~yt-dlp tries to parse the external downloader outputs into the standard progress output if possible (Currently implemented: [aria2c](https://github.com/yt-dlp/yt-dlp/issues/5931)). You can use `--compat-options no-external-downloader-progress` to get the downloader output as-is~~
|
|
|
|
|
|
|
|
* yt-dlp versions between 2021.09.01 and 2023.01.02 applies `--match-filter` to nested playlists. This was an unintentional side-effect of [8f18ac](https://github.com/yt-dlp/yt-dlp/commit/8f18aca8717bb0dd49054555af8d386e5eda3a88) and is fixed in [d7b460](https://github.com/yt-dlp/yt-dlp/commit/d7b460d0e5fc710950582baed2e3fc616ed98a80). Use `--compat-options playlist-match-filter` to revert this
|
|
|
|
|
|
|
|
* yt-dlp versions between 2021.11.10 and 2023.06.21 estimated `filesize_approx` values for fragmented/manifest formats. This was added for convenience in [f2fe69](https://github.com/yt-dlp/yt-dlp/commit/f2fe69c7b0d208bdb1f6292b4ae92bc1e1a7444a), but was reverted in [0dff8e](https://github.com/yt-dlp/yt-dlp/commit/0dff8e4d1e6e9fb938f4256ea9af7d81f42fd54f) due to the potentially extreme inaccuracy of the estimated values. Use `--compat-options manifest-filesize-approx` to keep extracting the estimated values
|
|
|
|
|
|
|
|
* yt-dlp uses modern http client backends such as `requests`. Use `--compat-options prefer-legacy-http-handler` to prefer the legacy http handler (`urllib`) to be used for standard http requests.
|
|
|
|
|
|
|
|
* The sub-modules `swfinterp` is removed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For ease of use, a few more compat options are available:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* `--compat-options all`: Use all compat options (Do NOT use)
|
|
|
|
|
|
|
|
* `--compat-options youtube-dl`: Same as `--compat-options all,-multistreams,-playlist-match-filter,-manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options youtube-dlc`: Same as `--compat-options all,-no-live-chat,-no-youtube-channel-redirect,-playlist-match-filter,-manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options 2021`: Same as `--compat-options 2022,no-certifi,filename-sanitization,no-youtube-prefer-utc-upload-date`
|
|
|
|
|
|
|
|
* `--compat-options 2022`: Same as `--compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx`
|
|
|
|
|
|
|
|
* `--compat-options 2023`: Currently does nothing. Use this to enable all future compat options
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Deprecated options
|
|
|
|
|
|
|
|
|
|
|
|
These are all the deprecated options and the current alternative to achieve the same effect
|
|
|
|
These are all the deprecated options and the current alternative to achieve the same effect
|
|
|
|
|
|
|
|
|
|
|
@ -2218,7 +2222,6 @@ While these options are redundant, they are still expected to be used due to the
|
|
|
|
--no-playlist-reverse Default
|
|
|
|
--no-playlist-reverse Default
|
|
|
|
--no-colors --color no_color
|
|
|
|
--no-colors --color no_color
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Not recommended
|
|
|
|
#### Not recommended
|
|
|
|
While these options still work, their use is not recommended since there are other alternatives to achieve the same
|
|
|
|
While these options still work, their use is not recommended since there are other alternatives to achieve the same
|
|
|
|
|
|
|
|
|
|
|
@ -2245,7 +2248,6 @@ While these options still work, their use is not recommended since there are oth
|
|
|
|
--geo-bypass-country CODE --xff CODE
|
|
|
|
--geo-bypass-country CODE --xff CODE
|
|
|
|
--geo-bypass-ip-block IP_BLOCK --xff IP_BLOCK
|
|
|
|
--geo-bypass-ip-block IP_BLOCK --xff IP_BLOCK
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Developer options
|
|
|
|
#### Developer options
|
|
|
|
These options are not intended to be used by the end-user
|
|
|
|
These options are not intended to be used by the end-user
|
|
|
|
|
|
|
|
|
|
|
@ -2255,7 +2257,6 @@ These options are not intended to be used by the end-user
|
|
|
|
--allow-unplayable-formats List unplayable formats also
|
|
|
|
--allow-unplayable-formats List unplayable formats also
|
|
|
|
--no-allow-unplayable-formats Default
|
|
|
|
--no-allow-unplayable-formats Default
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Old aliases
|
|
|
|
#### Old aliases
|
|
|
|
These are aliases that are no longer documented for various reasons
|
|
|
|
These are aliases that are no longer documented for various reasons
|
|
|
|
|
|
|
|
|
|
|
@ -2308,6 +2309,7 @@ These options were deprecated since 2014 and have now been entirely removed
|
|
|
|
-A, --auto-number -o "%(autonumber)s-%(id)s.%(ext)s"
|
|
|
|
-A, --auto-number -o "%(autonumber)s-%(id)s.%(ext)s"
|
|
|
|
-t, -l, --title, --literal -o "%(title)s-%(id)s.%(ext)s"
|
|
|
|
-t, -l, --title, --literal -o "%(title)s-%(id)s.%(ext)s"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# CONTRIBUTING
|
|
|
|
# CONTRIBUTING
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md#contributing-to-yt-dlp) for instructions on [Opening an Issue](CONTRIBUTING.md#opening-an-issue) and [Contributing code to the project](CONTRIBUTING.md#developer-instructions)
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md#contributing-to-yt-dlp) for instructions on [Opening an Issue](CONTRIBUTING.md#opening-an-issue) and [Contributing code to the project](CONTRIBUTING.md#developer-instructions)
|
|
|
|
|
|
|
|
|
|
|
|