diff --git a/Changelog.md b/Changelog.md index ad48b1aa9..a8279721b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ # Instuctions for creating release * Run `make doc` * Update Changelog.md and CONTRIBUTORS * Change "Merged with ytdl" version in Readme.md if needed +* Add new/fixed extractors in "new features" section of Readme.md * Commit to master as `Release ` * Push to origin/release using `git push origin master:release` build task will now run @@ -19,7 +20,7 @@ # Instuctions for creating release ### 2021.04.03 -* Merge youtube-dl: Upto 2021.04.01 ([commit/654b4f4](https://github.com/ytdl-org/youtube-dl/commit/654b4f4ff2718f38b3182c1188c5d569c14cc70a)) +* Merge youtube-dl: Upto [commit/654b4f4](https://github.com/ytdl-org/youtube-dl/commit/654b4f4ff2718f38b3182c1188c5d569c14cc70a) * Ability to set a specific field in the file's metadata using `--parse-metadata` * Ability to select n'th best format like `-f bv*.2` * [DiscoveryPlus] Add discoveryplus.in diff --git a/README.md b/README.md index 6bf4625a2..ad7d8f956 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,44 @@ +
+ # YT-DLP +A command-line program to download videos from YouTube and many other [video platforms](supportedsites.md) -[![Release version](https://img.shields.io/github/v/release/yt-dlp/yt-dlp?color=brightgreen&label=Release)](https://github.com/yt-dlp/yt-dlp/releases/latest) -[![License: Unlicense](https://img.shields.io/badge/License-Unlicense-blue.svg)](LICENSE) + +[![Release version](https://img.shields.io/github/v/release/yt-dlp/yt-dlp?color=brightgreen&label=Release&style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/releases/latest) +[![License: Unlicense](https://img.shields.io/badge/License-Unlicense-blue.svg?style=for-the-badge)](LICENSE) +[![Doc Status](https://readthedocs.org/projects/yt-dlp/badge/?version=latest&style=for-the-badge)](https://yt-dlp.readthedocs.io) +[![Discord](https://img.shields.io/discord/807245652072857610?color=blue&label=discord&logo=discord&style=for-the-badge)](https://discord.gg/H5MNcFW63r) -[![Commits](https://img.shields.io/github/commit-activity/m/yt-dlp/yt-dlp?label=commits)](https://github.com/yt-dlp/yt-dlp/commits) -[![Last Commit](https://img.shields.io/github/last-commit/yt-dlp/yt-dlp/master)](https://github.com/yt-dlp/yt-dlp/commits) -[![Downloads](https://img.shields.io/github/downloads/yt-dlp/yt-dlp/total)](https://github.com/yt-dlp/yt-dlp/releases/latest) -[![PyPi Downloads](https://img.shields.io/pypi/dm/yt-dlp?label=PyPi)](https://pypi.org/project/yt-dlp) -[![Doc Status](https://readthedocs.org/projects/yt-dlp/badge/?version=latest)](https://yt-dlp.readthedocs.io) +[![Commits](https://img.shields.io/github/commit-activity/m/yt-dlp/yt-dlp?label=commits&style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/commits) +[![Last Commit](https://img.shields.io/github/last-commit/yt-dlp/yt-dlp/master?style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/commits) +[![Downloads](https://img.shields.io/github/downloads/yt-dlp/yt-dlp/total?style=for-the-badge)](https://github.com/yt-dlp/yt-dlp/releases/latest) +[![PyPi Downloads](https://img.shields.io/pypi/dm/yt-dlp?label=PyPi&style=for-the-badge)](https://pypi.org/project/yt-dlp) -A command-line program to download videos from youtube.com and many other [video platforms](supportedsites.md) +
-This is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on the now inactive [youtube-dlc](https://github.com/blackjack4494/yt-dlc). The main focus of this project is adding new features and patches while also keeping up to date with the original project +yt-dlp is a [youtube-dl](https://github.com/ytdl-org/youtube-dl) fork based on the now inactive [youtube-dlc](https://github.com/blackjack4494/yt-dlc). The main focus of this project is adding new features and patches while also keeping up to date with the original project * [NEW FEATURES](#new-features) * [INSTALLATION](#installation) + * [Dependancies](#dependancies) * [Update](#update) * [Compile](#compile) -* [DESCRIPTION](#description) -* [OPTIONS](#options) +* [USAGE AND OPTIONS](#usage-and-options) + * [General Options](#general-options) * [Network Options](#network-options) - * [Geo Restriction](#geo-restriction) + * [Geo-restriction](#geo-restriction) * [Video Selection](#video-selection) * [Download Options](#download-options) * [Filesystem Options](#filesystem-options) - * [Thumbnail images](#thumbnail-images) + * [Thumbnail Options](#thumbnail-options) * [Internet Shortcut Options](#internet-shortcut-options) * [Verbosity and Simulation Options](#verbosity-and-simulation-options) * [Workarounds](#workarounds) * [Video Format Options](#video-format-options) * [Subtitle Options](#subtitle-options) * [Authentication Options](#authentication-options) - * [Adobe Pass Options](#adobe-pass-options) * [Post-processing Options](#post-processing-options) * [SponSkrub (SponsorBlock) Options](#sponskrub-sponsorblock-options) * [Extractor Options](#extractor-options) @@ -51,6 +56,7 @@ # YT-DLP * [PLUGINS](#plugins) * [DEPRECATED OPTIONS](#deprecated-options) * [MORE](#more) + # NEW FEATURES @@ -71,15 +77,13 @@ # NEW FEATURES * **Split video by chapters**: Videos can be split into multiple files based on chapters using `--split-chapters` -* **Multithreaded fragment downloads**: Fragment downloads can be natively multi-threaded. Use `--concurrent-fragments` (`-N`) option to set the number of threads used +* **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. No more slow ffmpeg/native downloads +* **Aria2c with HLS/DASH**: You can use `aria2c` as the external downloader for DASH(mpd) and HLS(m3u8) formats -* **New extractors**: AnimeLab, Philo MSO, Rcs, Gedi, bitwave.tv, mildom, audius, zee5, mtv.it, wimtv, pluto.tv +* **New extractors**: AnimeLab, Philo MSO, Rcs, Gedi, bitwave.tv, mildom, audius, zee5, mtv.it, wimtv, pluto.tv, niconico users, discoveryplus.in, mediathek -* **Fixed extractors**: archive.org, roosterteeth.com, skyit, instagram, itv, SouthparkDe, spreaker, Vlive, tiktok, akamai, ina, rumble, tennistv, amcnetworks - -* **Plugin extractors**: Extractors can be loaded from an external file. See [plugins](#plugins) for details +* **Fixed extractors**: archive.org, roosterteeth.com, skyit, instagram, itv, SouthparkDe, spreaker, Vlive, akamai, ina, rumble, tennistv, amcnetworks, la7 podcasts, linuxacadamy * **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`) @@ -89,6 +93,8 @@ # NEW FEATURES * **Improvements**: Multiple `--postprocessor-args` and `--external-downloader-args`, Date/time formatting in `-o`, faster archive checking, more [format selection options](#format-selection) etc +* **Plugin extractors**: Extractors can be loaded from an external file. See [plugins](#plugins) for details + * **Self-updater**: The releases can be updated using `yt-dlp -U` @@ -101,6 +107,7 @@ # NEW FEATURES # INSTALLATION +yt-dlp is not platform specific. So it should work on your Unix box, on Windows or on macOS You can install yt-dlp using one of the following methods: * Download the binary from the [latest release](https://github.com/yt-dlp/yt-dlp/releases/latest) (recommended method) @@ -125,8 +132,14 @@ # INSTALLATION sudo chmod a+rx /usr/local/bin/yt-dlp ``` +### DEPENDANCIES + +Python versions 2.6, 2.7, or 3.2+ are currently supported. However, 3.2+ is strongly recommended since python2 support will be deprecated in the future. + +Although there are no required dependancies, `ffmpeg` and `ffprobe` are highly recommended. Other optional dependancies are `sponskrub`, `AtomicParsley`, `mutagen`, `pycryptodome` and any of the supported external downloaders. Note that the windows releases are already built with the python interpreter, mutagen and pycryptodome included. + ### UPDATE -Starting from version `2021.02.09`, you can use `yt-dlp -U` to update if you are using the provided release. +You can use `yt-dlp -U` to update if you are using the provided release. If you are using `pip`, simply re-run the same command that was used to install the program. ### COMPILE @@ -148,13 +161,10 @@ ### COMPILE **Note**: In either platform, `devscripts\update-version.py` can be used to automatically update the version number -# DESCRIPTION -**yt-dlp** is a command-line program to download videos from youtube.com many other [video platforms](supportedsites.md). It requires the Python interpreter, version 2.6, 2.7, or 3.2+, and it is not platform specific. It should work on your Unix box, on Windows or on macOS. It is released to the public domain, which means you can modify it, redistribute it or use it however you like. +# USAGE AND OPTIONS yt-dlp [OPTIONS] [--] URL [URL...] - -# OPTIONS `Ctrl+F` is your friend :D @@ -213,7 +223,7 @@ ## Network Options: -4, --force-ipv4 Make all connections via IPv4 -6, --force-ipv6 Make all connections via IPv6 -## Geo Restriction: +## Geo-restriction: --geo-verification-proxy URL Use this proxy to verify the IP address for some geo-restricted sites. The default proxy specified by --proxy (or none, if the @@ -299,8 +309,9 @@ ## Video Selection: --no-download-archive Do not use archive file (default) ## Download Options: - -N, --concurrent-fragments N Number of fragments to download - concurrently (default is 1) + -N, --concurrent-fragments N Number of fragments of a dash/hlsnative + video that should be download concurrently + (default is 1) -r, --limit-rate RATE Maximum download rate in bytes per second (e.g. 50K or 4.2M) -R, --retries RETRIES Number of retries (default is 10), or @@ -454,7 +465,7 @@ ## Filesystem Options: --no-cache-dir Disable filesystem caching --rm-cache-dir Delete all filesystem cache files -## Thumbnail Images: +## Thumbnail Options: --write-thumbnail Write thumbnail image to disk --no-write-thumbnail Do not write thumbnail image to disk (default) @@ -601,8 +612,6 @@ ## Authentication Options: -2, --twofactor TWOFACTOR Two-factor authentication code -n, --netrc Use .netrc authentication data --video-password PASSWORD Video password (vimeo, youku) - -## Adobe Pass Options: --ap-mso MSO Adobe Pass multiple-system operator (TV provider) identifier, use --ap-list-mso for a list of available MSOs @@ -823,7 +832,7 @@ # OUTPUT TEMPLATE The basic usage of `-o` is not to set any template arguments when downloading a single file, like in `yt-dlp -o funny_video.flv "https://some/video"` (hard-coding file extension like this is not recommended). However, it may contain special sequences that will be replaced when downloading each video. The special sequences may be formatted according to [python string formatting operations](https://docs.python.org/2/library/stdtypes.html#string-formatting). For example, `%(NAME)s` or `%(NAME)05d`. To clarify, that is a percent symbol followed by a name in parentheses, followed by formatting operations. Date/time fields can also be formatted according to [strftime formatting](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) by specifying it inside the parantheses separated from the field name using a `>`. For example, `%(duration>%H-%M-%S)s`. -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 filetypes supported are `subtitle`, `thumbnail`, `description`, `annotation`, `infojson`, `pl_description`, `pl_infojson`, `chapter`. For example, `-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. +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 filetypes supported are `subtitle`, `thumbnail`, `description`, `annotation`, `infojson`, `pl_description`, `pl_infojson`, `chapter`. For example, `-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. The available fields are: @@ -1208,7 +1217,7 @@ # prefering better codec and then larger total bitrate for the same resolution # MODIFYING METADATA -The metadata obtained the the extractors can be modified by using `--parse-metadata FROM:TO`. The general syntax is to give the name of a field or a template (with similar syntax to [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 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 metadata obtained the the extractors can be modified by using `--parse-metadata FROM:TO`. The general syntax is to give the name of a field or a template (with similar syntax to [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 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 any field created by this can be used in the [output template](#output-template) and will also affect the media file's metadata added when using `--add-metadata`. diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py index 79f9c4035..4d77dba49 100644 --- a/yt_dlp/extractor/common.py +++ b/yt_dlp/extractor/common.py @@ -1580,7 +1580,8 @@ def add_item(field, reverse, closest, limit_text): else None) def print_verbose_info(self, to_screen): - to_screen('[debug] Sort order given by user: %s' % ','.join(self._sort_user)) + if self._sort_user: + to_screen('[debug] Sort order given by user: %s' % ','.join(self._sort_user)) if self._sort_extractor: to_screen('[debug] Sort order given by extractor: %s' % ', '.join(self._sort_extractor)) to_screen('[debug] Formats sorted by: %s' % ', '.join(['%s%s%s' % ( diff --git a/yt_dlp/options.py b/yt_dlp/options.py index 574af0a54..cced9fb89 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -259,7 +259,7 @@ def _dict_from_multiple_values_options_callback( help='Make all connections via IPv6', ) - geo = optparse.OptionGroup(parser, 'Geo Restriction') + geo = optparse.OptionGroup(parser, 'Geo-restriction') geo.add_option( '--geo-verification-proxy', dest='geo_verification_proxy', default=None, metavar='URL', @@ -429,21 +429,19 @@ def _dict_from_multiple_values_options_callback( '--video-password', dest='videopassword', metavar='PASSWORD', help='Video password (vimeo, youku)') - - adobe_pass = optparse.OptionGroup(parser, 'Adobe Pass Options') - adobe_pass.add_option( + authentication.add_option( '--ap-mso', dest='ap_mso', metavar='MSO', help='Adobe Pass multiple-system operator (TV provider) identifier, use --ap-list-mso for a list of available MSOs') - adobe_pass.add_option( + authentication.add_option( '--ap-username', dest='ap_username', metavar='USERNAME', help='Multiple-system operator account login') - adobe_pass.add_option( + authentication.add_option( '--ap-password', dest='ap_password', metavar='PASSWORD', help='Multiple-system operator account password. If this option is left out, yt-dlp will ask interactively') - adobe_pass.add_option( + authentication.add_option( '--ap-list-mso', action='store_true', dest='ap_list_mso', default=False, help='List all supported multiple-system operators') @@ -569,7 +567,7 @@ def _dict_from_multiple_values_options_callback( downloader.add_option( '-N', '--concurrent-fragments', dest='concurrent_fragment_downloads', metavar='N', default=1, type=int, - help='Number of fragments to download concurrently (default is %default)') + help='Number of fragments of a dash/hlsnative video that should be download concurrently (default is %default)') downloader.add_option( '-r', '--limit-rate', '--rate-limit', dest='ratelimit', metavar='RATE', @@ -1037,7 +1035,7 @@ def _dict_from_multiple_values_options_callback( action='store_true', dest='rm_cachedir', help='Delete all filesystem cache files') - thumbnail = optparse.OptionGroup(parser, 'Thumbnail Images') + thumbnail = optparse.OptionGroup(parser, 'Thumbnail Options') thumbnail.add_option( '--write-thumbnail', action='store_true', dest='writethumbnail', default=False, @@ -1310,7 +1308,6 @@ def _dict_from_multiple_values_options_callback( parser.add_option_group(video_format) parser.add_option_group(subtitles) parser.add_option_group(authentication) - parser.add_option_group(adobe_pass) parser.add_option_group(postproc) parser.add_option_group(sponskrub) parser.add_option_group(extractor) diff --git a/yt_dlp/postprocessor/__init__.py b/yt_dlp/postprocessor/__init__.py index fe69c2c72..d9e369d4d 100644 --- a/yt_dlp/postprocessor/__init__.py +++ b/yt_dlp/postprocessor/__init__.py @@ -10,11 +10,11 @@ FFmpegFixupM4aPP, FFmpegMergerPP, FFmpegMetadataPP, - FFmpegVideoConvertorPP, - FFmpegVideoRemuxerPP, FFmpegSubtitlesConvertorPP, FFmpegThumbnailsConvertorPP, FFmpegSplitChaptersPP, + FFmpegVideoConvertorPP, + FFmpegVideoRemuxerPP, ) from .xattrpp import XAttrMetadataPP from .execafterdownload import ExecAfterDownloadPP @@ -29,6 +29,7 @@ def get_postprocessor(key): __all__ = [ + 'FFmpegPostProcessor', 'EmbedThumbnailPP', 'ExecAfterDownloadPP', 'FFmpegEmbedSubtitlePP', @@ -39,7 +40,6 @@ def get_postprocessor(key): 'FFmpegFixupStretchedPP', 'FFmpegMergerPP', 'FFmpegMetadataPP', - 'FFmpegPostProcessor', 'FFmpegSubtitlesConvertorPP', 'FFmpegThumbnailsConvertorPP', 'FFmpegVideoConvertorPP',