A youtube-dl fork with additional features and fixes

Overview

YT-DLP

Release version CI Status License: Unlicense Donate Supported Sites Discord Doc Status Commits Last Commit Downloads PyPi Downloads

yt-dlp is a youtube-dl fork based on the now inactive youtube-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

The major new features from the latest release of blackjack4494/yt-dlc are:

  • SponsorBlock Integration: You can mark/remove sponsor sections in youtube videos by utilizing the SponsorBlock API

  • Format Sorting: 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)

  • Merged with youtube-dl commit/379f52a: (v2021.06.06) You get all the latest features and patches of youtube-dl in addition to all the features of youtube-dlc

  • Merged with animelover1984/youtube-dl: You get most of the features and improvements from animelover1984/youtube-dl including --write-comments, BiliBiliSearch, BilibiliChannel, Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. Note that the NicoNico improvements are not available. See #31 for details.

  • Youtube improvements:

    • All Feeds (:ytfav, :ytwatchlater, :ytsubs, :ythistory, :ytrec) and private playlists supports downloading multiple pages of content
    • Search (ytsearch:, ytsearchdate:), search URLs and in-channel search works
    • Mixes supports downloading multiple pages of content
    • Most (but not all) age-gated content can be downloaded without cookies
    • Partial workaround for throttling issue
    • Redirect channel's home URL automatically to /video to preserve the old behaviour
    • 255kbps audio is extracted (if available) from youtube music when premium cookies are given
    • Youtube music Albums, channels etc can be downloaded (except self-uploaded music)
  • Cookies from browser: Cookies can be automatically extracted from all major web browsers using --cookies-from-browser BROWSER[:PROFILE]

  • 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 extractors: AnimeLab, Philo MSO, Spectrum MSO, SlingTV MSO, Cablevision MSO, RCN MSO, Rcs, Gedi, bitwave.tv, mildom, audius, zee5, mtv.it, wimtv, pluto.tv, niconico users, discoveryplus.in, mediathek, NFHSNetwork, nebula, ukcolumn, whowatch, MxplayerShow, parlview (au), YoutubeWebArchive, fancode, Saitosan, ShemarooMe, telemundo, VootSeries, SonyLIVSeries, HotstarSeries, VidioPremier, VidioLive, RCTIPlus, TBS Live, douyin, pornflip, ParamountPlusSeries, ScienceChannel, Utreon, OpenRec, BandcampMusic, blackboardcollaborate, eroprofile albums, mirrativ, BannedVideo, bilibili categories, Epicon, filmmodu, GabTV, HungamaAlbum, ManotoTV, Niconico search, Patreon User, peloton, ProjectVeritas, radiko, StarTV, tiktok user, Tokentube, voicy, TV2HuSeries, biliintl, 17live, NewgroundsUser, peertube channel/playlist, ZenYandex, CAM4, CGTN, damtomo, gotostage, Koo, Mediaite, Mediaklikk, MuseScore, nzherald, Olympics replay, radlive, SovietsCloset, Streamanity, Theta, Chingari, ciscowebex, Gettr, GoPro, N1, Theta, Veo, Vupload, NovaPlay

  • Fixed/improved extractors: archive.org, roosterteeth.com, skyit, instagram, itv, SouthparkDe, spreaker, Vlive, akamai, ina, rumble, tennistv, amcnetworks, la7 podcasts, linuxacadamy, nitter, twitcasting, viu, crackle, curiositystream, mediasite, rmcdecouverte, sonyliv, tubi, tenplay, patreon, videa, yahoo, BravoTV, crunchyroll playlist, RTP, viki, Hotstar, vidio, vimeo, mediaset, Mxplayer, nbcolympics, ParamountPlus, Newgrounds, SAML Verizon login, Hungama, afreecatv, aljazeera, ATV, bitchute, camtube, CDA, eroprofile, facebook, HearThisAtIE, iwara, kakao, Motherless, Nova, peertube, pornhub, reddit, tiktok, TV2, TV2Hu, tv5mondeplus, VH1, Viafree, XHamster, 9Now, AnimalPlanet, Arte, CBC, Chingari, comedycentral, DIYNetwork, niconico, dw, funimation, globo, HiDive, NDR, Nuvid, Oreilly, pbs, plutotv, reddit, redtube, soundcloud, SpankBang, VrtNU, bbc, Bilibili, LinkedInLearning, parliamentlive, PolskieRadio, Streamable, vidme, francetv

  • Subtitle extraction from manifests: Subtitles can be extracted from streaming media manifests. See commit/be6202f for details

  • Multiple paths and output templates: You can give different output templates 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 for details

  • Output template improvements: Output templates can now have date-time formatting, numeric offsets, object traversal etc. See 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: --print, --sleep-requests, --convert-thumbnails, --write-link, --force-download-archive, --force-overwrites, --break-on-reject etc

  • Improvements: Regex and other operators in --match-filter, multiple --postprocessor-args and --downloader-args, faster archive checking, more format selection options etc

  • Plugin extractors: Extractors can be loaded from an external file. See plugins for details

  • Self-updater: The releases can be updated using yt-dlp -U

See changelog or commits for the full list of changes

PS: Some of these changes are already in youtube-dlc, but are still unreleased. See this for details

If you are coming from youtube-dl, the amount of changes are very large. Compare options and supported sites with youtube-dl's to get an idea of the massive number of features/patches youtube-dlc has accumulated.

Differences in default behavior

Some of yt-dlp's default options are different from that of youtube-dl and youtube-dlc.

  • The options --id, --auto-number (-A), --title (-t) and --literal (-l), no longer work. See removed options for details
  • avconv is not supported as as an alternative to ffmpeg
  • The default 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 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 prefered. 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
  • --ignore-errors 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-infojson. Use --compat-options no-attach-info-json to revert this
  • playlist_index behaves differently when used with options like --playlist-reverse and --playlist-items. See #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
  • All experiences of a funimation episode are considered as a single video. This behavior breaks existing archives. Use --compat-options seperate-video-versions to extract information from only the default player
  • Youtube live chat (if available) is considered as a subtitle. Use --sub-langs all,-live_chat to download all subtitles except live chat. You can also use --compat-options no-live-chat to prevent live chat from downloading
  • Youtube channel URLs are automatically redirected to /video. Append a /featured to the URL to download only the videos in the home page. If the channel does not have a videos tab, we try to download the equivalent UU playlist instead. 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
  • 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 private fields 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 seperate file. See #630 (comment) for more info. --compat-options no-keep-subs can be used to revert this.

For ease of use, a few more compat options are available:

  • --compat-options all: Use all compat options
  • --compat-options youtube-dl: Same as --compat-options all,-multistreams
  • --compat-options youtube-dlc: Same as --compat-options all,-no-live-chat,-no-youtube-channel-redirect

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
  • With Homebrew, brew install yt-dlp/taps/yt-dlp
  • Use PyPI package: python3 -m pip install --upgrade yt-dlp
  • Use pip+git: python3 -m pip install --upgrade git+https://github.com/yt-dlp/yt-dlp.git@release
  • Install master branch: python3 -m pip install --upgrade git+https://github.com/yt-dlp/yt-dlp

Note that on some systems, you may need to use py or python instead of python3

UNIX users (Linux, macOS, BSD) can also install the latest release one of the following ways:

sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
sudo aria2c https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp

macOS or Linux users that are using Homebrew (formerly known as Linuxbrew for Linux users) can also install it by:

brew install yt-dlp/taps/yt-dlp

UPDATE

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. If you have installed using Homebrew, run brew upgrade yt-dlp/taps/yt-dlp

DEPENDENCIES

Python versions 3.6+ (CPython and PyPy) are supported. Other versions and implementations may or may not work correctly.

While all the other dependancies are optional, ffmpeg and ffprobe are highly recommended

To use or redistribute the dependencies, you must agree to their respective licensing terms.

The windows releases are already built with the python interpreter, mutagen, pycryptodomex and websockets included.

Note: There are some regressions in newer ffmpeg versions that causes various issues when used alongside yt-dlp. Since ffmpeg is such an important dependancy, we provide custom builds with patches for these issues at yt-dlp/FFmpeg-Builds. See the readme for details on the specifc issues solved by these builds

COMPILE

For Windows: To build the Windows executable, you must have pyinstaller (and optionally mutagen, pycryptodomex, websockets)

python3 -m pip install -U -r requirements.txt

Once you have all the necessary dependencies installed, just run py pyinst.py. The executable will be built for the same architecture (32/64 bit) as the python used to build it.

You can also build the executable without any version info or metadata by using:

pyinstaller.exe yt_dlp\__main__.py --onefile --name yt-dlp

Note that pyinstaller does not support Python installed from the Windows store without using a virtual environment

For Unix: You will need the required build tools: python, make (GNU), pandoc, zip, pytest
Then simply run make. You can also run make yt-dlp instead to compile only the binary without updating any of the additional files

Note: In either platform, devscripts\update-version.py can be used to automatically update the version number

USAGE AND OPTIONS

yt-dlp [OPTIONS] [--] URL [URL...]

Ctrl+F is your friend :D

General Options:

-h, --help                       Print this help text and exit
--version                        Print program version and exit
-U, --update                     Update this program to latest version. Make
                                 sure that you have sufficient permissions
                                 (run with sudo if needed)
-i, --ignore-errors              Ignore download and postprocessing errors.
                                 The download will be considered successfull
                                 even if the postprocessing fails
--no-abort-on-error              Continue with next video on download
                                 errors; e.g. to skip unavailable videos in
                                 a playlist (default)
--abort-on-error                 Abort downloading of further videos if an
                                 error occurs (Alias: --no-ignore-errors)
--dump-user-agent                Display the current user-agent and exit
--list-extractors                List all supported extractors and exit
--extractor-descriptions         Output descriptions of all supported
                                 extractors and exit
--force-generic-extractor        Force extraction to use the generic
                                 extractor
--default-search PREFIX          Use this prefix for unqualified URLs. For
                                 example "gvsearch2:" downloads two videos
                                 from google videos for the search term
                                 "large apple". Use the value "auto" to let
                                 yt-dlp guess ("auto_warning" to emit a
                                 warning when guessing). "error" just throws
                                 an error. The default value "fixup_error"
                                 repairs broken URLs, but emits an error if
                                 this is not possible instead of searching
--ignore-config, --no-config     Disable loading any configuration files
                                 except the one provided by --config-location.
                                 When given inside a configuration
                                 file, no further configuration files are
                                 loaded. Additionally, (for backward
                                 compatibility) if this option is found
                                 inside the system configuration file, the
                                 user configuration is not loaded
--config-location PATH           Location of the main configuration file;
                                 either the path to the config or its
                                 containing directory
--flat-playlist                  Do not extract the videos of a playlist,
                                 only list them
--no-flat-playlist               Extract the videos of a playlist
--mark-watched                   Mark videos watched (even with --simulate).
                                 Currently only supported for YouTube
--no-mark-watched                Do not mark videos watched (default)
--no-colors                      Do not emit color codes in output
--compat-options OPTS            Options that can help keep compatibility
                                 with youtube-dl or youtube-dlc
                                 configurations by reverting some of the
                                 changes made in yt-dlp. See "Differences in
                                 default behavior" for details

Network Options:

--proxy URL                      Use the specified HTTP/HTTPS/SOCKS proxy.
                                 To enable SOCKS proxy, specify a proper
                                 scheme. For example
                                 socks5://127.0.0.1:1080/. Pass in an empty
                                 string (--proxy "") for direct connection
--socket-timeout SECONDS         Time to wait before giving up, in seconds
--source-address IP              Client-side IP address to bind to
-4, --force-ipv4                 Make all connections via IPv4
-6, --force-ipv6                 Make all connections via IPv6

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
                                 option is not present) is used for the
                                 actual downloading
--geo-bypass                     Bypass geographic restriction via faking
                                 X-Forwarded-For HTTP header
--no-geo-bypass                  Do not bypass geographic restriction via
                                 faking X-Forwarded-For HTTP header
--geo-bypass-country CODE        Force bypass geographic restriction with
                                 explicitly provided two-letter ISO 3166-2
                                 country code
--geo-bypass-ip-block IP_BLOCK   Force bypass geographic restriction with
                                 explicitly provided IP block in CIDR
                                 notation

Video Selection:

--playlist-start NUMBER          Playlist video to start at (default is 1)
--playlist-end NUMBER            Playlist video to end at (default is last)
--playlist-items ITEM_SPEC       Playlist video items to download. Specify
                                 indices of the videos in the playlist
                                 separated by commas like: "--playlist-items
                                 1,2,5,8" if you want to download videos
                                 indexed 1, 2, 5, 8 in the playlist. You can
                                 specify range: "--playlist-items
                                 1-3,7,10-13", it will download the videos
                                 at index 1, 2, 3, 7, 10, 11, 12 and 13
--max-downloads NUMBER           Abort after downloading NUMBER files
--min-filesize SIZE              Do not download any videos smaller than
                                 SIZE (e.g. 50k or 44.6m)
--max-filesize SIZE              Do not download any videos larger than SIZE
                                 (e.g. 50k or 44.6m)
--date DATE                      Download only videos uploaded in this date.
                                 The date can be "YYYYMMDD" or in the format
                                 "(now|today)[+-][0-9](day|week|month|year)(s)?"
--datebefore DATE                Download only videos uploaded on or before
                                 this date. The date formats accepted is the
                                 same as --date
--dateafter DATE                 Download only videos uploaded on or after
                                 this date. The date formats accepted is the
                                 same as --date
--match-filter FILTER            Generic video filter. Any field (see
                                 "OUTPUT TEMPLATE") can be compared with a
                                 number or a string using the operators
                                 defined in "Filtering formats". You can
                                 also simply specify a field to match if the
                                 field is present and "!field" to check if
                                 the field is not present. In addition,
                                 Python style regular expression matching
                                 can be done using "~=", and multiple
                                 filters can be checked with "&". Use a "\"
                                 to escape "&" or quotes if needed. Eg:
                                 --match-filter "!is_live & like_count>?100
                                 & description~='(?i)\bcats \& dogs\b'"
                                 matches only videos that are not live, has
                                 a like count more than 100 (or the like
                                 field is not available), and also has a
                                 description that contains the phrase "cats
                                 & dogs" (ignoring case)
--no-match-filter                Do not use generic video filter (default)
--no-playlist                    Download only the video, if the URL refers
                                 to a video and a playlist
--yes-playlist                   Download the playlist, if the URL refers to
                                 a video and a playlist
--age-limit YEARS                Download only videos suitable for the given
                                 age
--download-archive FILE          Download only videos not listed in the
                                 archive file. Record the IDs of all
                                 downloaded videos in it
--break-on-existing              Stop the download process when encountering
                                 a file that is in the archive
--break-on-reject                Stop the download process when encountering
                                 a file that has been filtered out
--skip-playlist-after-errors N   Number of allowed failures until the rest
                                 of the playlist is skipped
--no-download-archive            Do not use archive file (default)

Download Options:

-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)
--throttled-rate RATE            Minimum download rate in bytes per second
                                 below which throttling is assumed and the
                                 video data is re-extracted (e.g. 100K)
-R, --retries RETRIES            Number of retries (default is 10), or
                                 "infinite"
--fragment-retries RETRIES       Number of retries for a fragment (default
                                 is 10), or "infinite" (DASH, hlsnative and
                                 ISM)
--skip-unavailable-fragments     Skip unavailable fragments for DASH,
                                 hlsnative and ISM (default)
                                 (Alias: --no-abort-on-unavailable-fragment)
--abort-on-unavailable-fragment  Abort downloading if a fragment is unavailable
                                 (Alias: --no-skip-unavailable-fragments)
--keep-fragments                 Keep downloaded fragments on disk after
                                 downloading is finished
--no-keep-fragments              Delete downloaded fragments after
                                 downloading is finished (default)
--buffer-size SIZE               Size of download buffer (e.g. 1024 or 16K)
                                 (default is 1024)
--resize-buffer                  The buffer size is automatically resized
                                 from an initial value of --buffer-size
                                 (default)
--no-resize-buffer               Do not automatically adjust the buffer size
--http-chunk-size SIZE           Size of a chunk for chunk-based HTTP
                                 downloading (e.g. 10485760 or 10M) (default
                                 is disabled). May be useful for bypassing
                                 bandwidth throttling imposed by a webserver
                                 (experimental)
--playlist-reverse               Download playlist videos in reverse order
--no-playlist-reverse            Download playlist videos in default order
                                 (default)
--playlist-random                Download playlist videos in random order
--xattr-set-filesize             Set file xattribute ytdl.filesize with
                                 expected file size
--hls-use-mpegts                 Use the mpegts container for HLS videos;
                                 allowing some players to play the video
                                 while downloading, and reducing the chance
                                 of file corruption if download is
                                 interrupted. This is enabled by default for
                                 live streams
--no-hls-use-mpegts              Do not use the mpegts container for HLS
                                 videos. This is default when not
                                 downloading live streams
--downloader [PROTO:]NAME        Name or path of the external downloader to
                                 use (optionally) prefixed by the protocols
                                 (http, ftp, m3u8, dash, rstp, rtmp, mms) to
                                 use it for. Currently supports native,
                                 aria2c, avconv, axel, curl, ffmpeg, httpie,
                                 wget (Recommended: aria2c). You can use
                                 this option multiple times to set different
                                 downloaders for different protocols. For
                                 example, --downloader aria2c --downloader
                                 "dash,m3u8:native" will use aria2c for
                                 http/ftp downloads, and the native
                                 downloader for dash/m3u8 downloads
                                 (Alias: --external-downloader)
--downloader-args NAME:ARGS      Give these arguments to the external
                                 downloader. Specify the downloader name and
                                 the arguments separated by a colon ":". For
                                 ffmpeg, arguments can be passed to
                                 different positions using the same syntax
                                 as --postprocessor-args. You can use this
                                 option multiple times to give different
                                 arguments to different downloaders
                                 (Alias: --external-downloader-args)

Filesystem Options:

-a, --batch-file FILE            File containing URLs to download ('-' for
                                 stdin), one URL per line. Lines starting
                                 with '#', ';' or ']' are considered as
                                 comments and ignored
-P, --paths [TYPES:]PATH         The paths where the files should be
                                 downloaded. Specify the type of file and
                                 the path separated by a colon ":". All the
                                 same types as --output are supported.
                                 Additionally, you can also provide "home"
                                 (default) and "temp" paths. All
                                 intermediary files are first downloaded to
                                 the temp path and then the final files are
                                 moved over to the home path after download
                                 is finished. This option is ignored if
                                 --output is an absolute path
-o, --output [TYPES:]TEMPLATE    Output filename template; see "OUTPUT
                                 TEMPLATE" for details
--output-na-placeholder TEXT     Placeholder value for unavailable meta
                                 fields in output filename template
                                 (default: "NA")
--restrict-filenames             Restrict filenames to only ASCII
                                 characters, and avoid "&" and spaces in
                                 filenames
--no-restrict-filenames          Allow Unicode characters, "&" and spaces in
                                 filenames (default)
--windows-filenames              Force filenames to be windows compatible
--no-windows-filenames           Make filenames windows compatible only if
                                 using windows (default)
--trim-filenames LENGTH          Limit the filename length (excluding
                                 extension) to the specified number of
                                 characters
-w, --no-overwrites              Do not overwrite any files
--force-overwrites               Overwrite all video and metadata files.
                                 This option includes --no-continue
--no-force-overwrites            Do not overwrite the video, but overwrite
                                 related files (default)
-c, --continue                   Resume partially downloaded files/fragments
                                 (default)
--no-continue                    Do not resume partially downloaded
                                 fragments. If the file is not fragmented,
                                 restart download of the entire file
--part                           Use .part files instead of writing directly
                                 into output file (default)
--no-part                        Do not use .part files - write directly
                                 into output file
--mtime                          Use the Last-modified header to set the
                                 file modification time (default)
--no-mtime                       Do not use the Last-modified header to set
                                 the file modification time
--write-description              Write video description to a .description
                                 file
--no-write-description           Do not write video description (default)
--write-info-json                Write video metadata to a .info.json file
                                 (this may contain personal information)
--no-write-info-json             Do not write video metadata (default)
--write-playlist-metafiles       Write playlist metadata in addition to the
                                 video metadata when using --write-info-json,
                                 --write-description etc. (default)
--no-write-playlist-metafiles    Do not write playlist metadata when using
                                 --write-info-json, --write-description etc.
--clean-infojson                 Remove some private fields such as
                                 filenames from the infojson. Note that it
                                 could still contain some personal
                                 information (default)
--no-clean-infojson              Write all fields to the infojson
--write-comments                 Retrieve video comments to be placed in the
                                 infojson. The comments are fetched even
                                 without this option if the extraction is
                                 known to be quick (Alias: --get-comments)
--no-write-comments              Do not retrieve video comments unless the
                                 extraction is known to be quick
                                 (Alias: --no-get-comments)
--load-info-json FILE            JSON file containing the video information
                                 (created with the "--write-info-json"
                                 option)
--cookies FILE                   File to read cookies from and dump cookie
                                 jar in
--no-cookies                     Do not read/dump cookies from/to file
                                 (default)
--cookies-from-browser BROWSER[:PROFILE]
                                 Load cookies from a user profile of the
                                 given web browser. Currently supported
                                 browsers are: brave, chrome, chromium,
                                 edge, firefox, opera, safari, vivaldi. You
                                 can specify the user profile name or
                                 directory using "BROWSER:PROFILE_NAME" or
                                 "BROWSER:PROFILE_PATH". If no profile is
                                 given, the most recently accessed one is
                                 used
--no-cookies-from-browser        Do not load cookies from browser (default)
--cache-dir DIR                  Location in the filesystem where youtube-dl
                                 can store some downloaded information (such
                                 as client ids and signatures) permanently.
                                 By default $XDG_CACHE_HOME/yt-dlp or
                                 ~/.cache/yt-dlp
--no-cache-dir                   Disable filesystem caching
--rm-cache-dir                   Delete all filesystem cache files

Thumbnail Options:

--write-thumbnail                Write thumbnail image to disk
--no-write-thumbnail             Do not write thumbnail image to disk
                                 (default)
--write-all-thumbnails           Write all thumbnail image formats to disk
--list-thumbnails                List available thumbnails of each video.
                                 Simulate unless --no-simulate is used

Internet Shortcut Options:

--write-link                     Write an internet shortcut file, depending
                                 on the current platform (.url, .webloc or
                                 .desktop). The URL may be cached by the OS
--write-url-link                 Write a .url Windows internet shortcut. The
                                 OS caches the URL based on the file path
--write-webloc-link              Write a .webloc macOS internet shortcut
--write-desktop-link             Write a .desktop Linux internet shortcut

Verbosity and Simulation Options:

-q, --quiet                      Activate quiet mode. If used with
                                 --verbose, print the log to stderr
--no-warnings                    Ignore warnings
-s, --simulate                   Do not download the video and do not write
                                 anything to disk
--no-simulate                    Download the video even if printing/listing
                                 options are used
--ignore-no-formats-error        Ignore "No video formats" error. Usefull
                                 for extracting metadata even if the videos
                                 are not actually available for download
                                 (experimental)
--no-ignore-no-formats-error     Throw error when no downloadable video
                                 formats are found (default)
--skip-download                  Do not download the video but write all
                                 related files (Alias: --no-download)
-O, --print TEMPLATE             Quiet, but print the given fields for each
                                 video. Simulate unless --no-simulate is
                                 used. Either a field name or same syntax as
                                 the output template can be used
-j, --dump-json                  Quiet, but print JSON information for each
                                 video. Simulate unless --no-simulate is
                                 used. See "OUTPUT TEMPLATE" for a
                                 description of available keys
-J, --dump-single-json           Quiet, but print JSON information for each
                                 url or infojson passed. Simulate unless
                                 --no-simulate is used. If the URL refers to
                                 a playlist, the whole playlist information
                                 is dumped in a single line
--force-write-archive            Force download archive entries to be
                                 written as far as no errors occur, even if
                                 -s or another simulation option is used
                                 (Alias: --force-download-archive)
--newline                        Output progress bar as new lines
--no-progress                    Do not print progress bar
--progress                       Show progress bar, even if in quiet mode
--console-title                  Display progress in console titlebar
--progress-template [TYPES:]TEMPLATE
                                 Template for progress outputs, optionally
                                 prefixed with one of "download:" (default),
                                 "download-title:" (the console title),
                                 "postprocess:",  or "postprocess-title:".
                                 The video's fields are accessible under the
                                 "info" key and the progress attributes are
                                 accessible under "progress" key. Eg:
                                 --console-title --progress-template
                                 "download-title:%(info.id)s-%(progress.eta)s"
-v, --verbose                    Print various debugging information
--dump-pages                     Print downloaded pages encoded using base64
                                 to debug problems (very verbose)
--write-pages                    Write downloaded intermediary pages to
                                 files in the current directory to debug
                                 problems
--print-traffic                  Display sent and read HTTP traffic

Workarounds:

--encoding ENCODING              Force the specified encoding (experimental)
--no-check-certificate           Suppress HTTPS certificate validation
--prefer-insecure                Use an unencrypted connection to retrieve
                                 information about the video (Currently
                                 supported only for YouTube)
--user-agent UA                  Specify a custom user agent
--referer URL                    Specify a custom referer, use if the video
                                 access is restricted to one domain
--add-header FIELD:VALUE         Specify a custom HTTP header and its value,
                                 separated by a colon ":". You can use this
                                 option multiple times
--bidi-workaround                Work around terminals that lack
                                 bidirectional text support. Requires bidiv
                                 or fribidi executable in PATH
--sleep-requests SECONDS         Number of seconds to sleep between requests
                                 during data extraction
--sleep-interval SECONDS         Number of seconds to sleep before each
                                 download. This is the minimum time to sleep
                                 when used along with --max-sleep-interval
                                 (Alias: --min-sleep-interval)
--max-sleep-interval SECONDS     Maximum number of seconds to sleep. Can
                                 only be used along with --min-sleep-interval
--sleep-subtitles SECONDS        Number of seconds to sleep before each
                                 subtitle download

Video Format Options:

-f, --format FORMAT              Video format code, see "FORMAT SELECTION"
                                 for more details
-S, --format-sort SORTORDER      Sort the formats by the fields given, see
                                 "Sorting Formats" for more details
--S-force, --format-sort-force   Force user specified sort order to have
                                 precedence over all fields, see "Sorting
                                 Formats" for more details
--no-format-sort-force           Some fields have precedence over the user
                                 specified sort order (default), see
                                 "Sorting Formats" for more details
--video-multistreams             Allow multiple video streams to be merged
                                 into a single file
--no-video-multistreams          Only one video stream is downloaded for
                                 each output file (default)
--audio-multistreams             Allow multiple audio streams to be merged
                                 into a single file
--no-audio-multistreams          Only one audio stream is downloaded for
                                 each output file (default)
--prefer-free-formats            Prefer video formats with free containers
                                 over non-free ones of same quality. Use
                                 with "-S ext" to strictly prefer free
                                 containers irrespective of quality
--no-prefer-free-formats         Don't give any special preference to free
                                 containers (default)
--check-formats                  Check that the formats selected are
                                 actually downloadable
--no-check-formats               Do not check that the formats selected are
                                 actually downloadable
-F, --list-formats               List available formats of each video.
                                 Simulate unless --no-simulate is used
--merge-output-format FORMAT     If a merge is required (e.g.
                                 bestvideo+bestaudio), output to given
                                 container format. One of mkv, mp4, ogg,
                                 webm, flv. Ignored if no merge is required

Subtitle Options:

--write-subs                     Write subtitle file
--no-write-subs                  Do not write subtitle file (default)
--write-auto-subs                Write automatically generated subtitle file
                                 (Alias: --write-automatic-subs)
--no-write-auto-subs             Do not write auto-generated subtitles
                                 (default) (Alias: --no-write-automatic-subs)
--list-subs                      List available subtitles of each video.
                                 Simulate unless --no-simulate is used
--sub-format FORMAT              Subtitle format, accepts formats
                                 preference, for example: "srt" or
                                 "ass/srt/best"
--sub-langs LANGS                Languages of the subtitles to download (can
                                 be regex) or "all" separated by commas.
                                 (Eg: --sub-langs en.*,ja) You can prefix
                                 the language code with a "-" to exempt it
                                 from the requested languages. (Eg: --sub-
                                 langs all,-live_chat) Use --list-subs for a
                                 list of available language tags

Authentication Options:

-u, --username USERNAME          Login with this account ID
-p, --password PASSWORD          Account password. If this option is left
                                 out, yt-dlp will ask interactively
-2, --twofactor TWOFACTOR        Two-factor authentication code
-n, --netrc                      Use .netrc authentication data
--netrc-location PATH            Location of .netrc authentication data;
                                 either the path or its containing
                                 directory. Defaults to ~/.netrc
--video-password PASSWORD        Video password (vimeo, youku)
--ap-mso MSO                     Adobe Pass multiple-system operator (TV
                                 provider) identifier, use --ap-list-mso for
                                 a list of available MSOs
--ap-username USERNAME           Multiple-system operator account login
--ap-password PASSWORD           Multiple-system operator account password.
                                 If this option is left out, yt-dlp will ask
                                 interactively
--ap-list-mso                    List all supported multiple-system
                                 operators

Post-Processing Options:

-x, --extract-audio              Convert video files to audio-only files
                                 (requires ffmpeg and ffprobe)
--audio-format FORMAT            Specify audio format to convert the audio
                                 to when -x is used. Currently supported
                                 formats are: best (default) or one of
                                 best|aac|flac|mp3|m4a|opus|vorbis|wav
--audio-quality QUALITY          Specify ffmpeg audio quality, insert a
                                 value between 0 (better) and 9 (worse) for
                                 VBR or a specific bitrate like 128K
                                 (default 5)
--remux-video FORMAT             Remux the video into another container if
                                 necessary (currently supported: mp4|mkv|flv
                                 |webm|mov|avi|mp3|mka|m4a|ogg|opus). If
                                 target container does not support the
                                 video/audio codec, remuxing will fail. You
                                 can specify multiple rules; Eg.
                                 "aac>m4a/mov>mp4/mkv" will remux aac to
                                 m4a, mov to mp4 and anything else to mkv.
--recode-video FORMAT            Re-encode the video into another format if
                                 re-encoding is necessary. The syntax and
                                 supported formats are the same as --remux-video
--postprocessor-args NAME:ARGS   Give these arguments to the postprocessors.
                                 Specify the postprocessor/executable name
                                 and the arguments separated by a colon ":"
                                 to give the argument to the specified
                                 postprocessor/executable. Supported PP are:
                                 Merger, ModifyChapters, SplitChapters,
                                 ExtractAudio, VideoRemuxer, VideoConvertor,
                                 Metadata, EmbedSubtitle, EmbedThumbnail,
                                 SubtitlesConvertor, ThumbnailsConvertor,
                                 FixupStretched, FixupM4a, FixupM3u8,
                                 FixupTimestamp and FixupDuration. The
                                 supported executables are: AtomicParsley,
                                 FFmpeg and FFprobe. You can also specify
                                 "PP+EXE:ARGS" to give the arguments to the
                                 specified executable only when being used
                                 by the specified postprocessor.
                                 Additionally, for ffmpeg/ffprobe, "_i"/"_o"
                                 can be appended to the prefix optionally
                                 followed by a number to pass the argument
                                 before the specified input/output file. Eg:
                                 --ppa "Merger+ffmpeg_i1:-v quiet". You can
                                 use this option multiple times to give
                                 different arguments to different
                                 postprocessors. (Alias: --ppa)
-k, --keep-video                 Keep the intermediate video file on disk
                                 after post-processing
--no-keep-video                  Delete the intermediate video file after
                                 post-processing (default)
--post-overwrites                Overwrite post-processed files (default)
--no-post-overwrites             Do not overwrite post-processed files
--embed-subs                     Embed subtitles in the video (only for mp4,
                                 webm and mkv videos)
--no-embed-subs                  Do not embed subtitles (default)
--embed-thumbnail                Embed thumbnail in the video as cover art
--no-embed-thumbnail             Do not embed thumbnail (default)
--embed-metadata                 Embed metadata to the video file. Also adds
                                 chapters to file unless --no-add-chapters
                                 is used (Alias: --add-metadata)
--no-embed-metadata              Do not add metadata to file (default)
                                 (Alias: --no-add-metadata)
--embed-chapters                 Add chapter markers to the video file
                                 (Alias: --add-chapters)
--no-embed-chapters              Do not add chapter markers (default)
                                 (Alias: --no-add-chapters)
--parse-metadata FROM:TO         Parse additional metadata like title/artist
                                 from other fields; see "MODIFYING METADATA"
                                 for details
--replace-in-metadata FIELDS REGEX REPLACE
                                 Replace text in a metadata field using the
                                 given regex. This option can be used
                                 multiple times
--xattrs                         Write metadata to the video file's xattrs
                                 (using dublin core and xdg standards)
--fixup POLICY                   Automatically correct known faults of the
                                 file. One of never (do nothing), warn (only
                                 emit a warning), detect_or_warn (the
                                 default; fix file if we can, warn
                                 otherwise), force (try fixing even if file
                                 already exists
--ffmpeg-location PATH           Location of the ffmpeg binary; either the
                                 path to the binary or its containing
                                 directory
--exec CMD                       Execute a command on the file after
                                 downloading and post-processing. Same
                                 syntax as the output template can be used
                                 to pass any field as arguments to the
                                 command. An additional field "filepath"
                                 that contains the final path of the
                                 downloaded file is also available. If no
                                 fields are passed, %(filepath)q is appended
                                 to the end of the command. This option can
                                 be used multiple times
--no-exec                        Remove any previously defined --exec
--exec-before-download CMD       Execute a command before the actual
                                 download. The syntax is the same as --exec
                                 but "filepath" is not available. This
                                 option can be used multiple times
--no-exec-before-download        Remove any previously defined
                                 --exec-before-download
--convert-subs FORMAT            Convert the subtitles to another format
                                 (currently supported: srt|vtt|ass|lrc)
                                 (Alias: --convert-subtitles)
--convert-thumbnails FORMAT      Convert the thumbnails to another format
                                 (currently supported: jpg|png)
--split-chapters                 Split video into multiple files based on
                                 internal chapters. The "chapter:" prefix
                                 can be used with "--paths" and "--output"
                                 to set the output filename for the split
                                 files. See "OUTPUT TEMPLATE" for details
--no-split-chapters              Do not split video based on chapters
                                 (default)
--remove-chapters REGEX          Remove chapters whose title matches the
                                 given regular expression. This option can
                                 be used multiple times
--no-remove-chapters             Do not remove any chapters from the file
                                 (default)
--force-keyframes-at-cuts        Force keyframes around the chapters before
                                 removing/splitting them. Requires a
                                 reencode and thus is very slow, but the
                                 resulting video may have fewer artifacts
                                 around the cuts
--no-force-keyframes-at-cuts     Do not force keyframes around the chapters
                                 when cutting/splitting (default)
--use-postprocessor NAME[:ARGS]  The (case sensitive) name of plugin
                                 postprocessors to be enabled, and
                                 (optionally) arguments to be passed to it,
                                 seperated by a colon ":". ARGS are a
                                 semicolon ";" delimited list of NAME=VALUE.
                                 The "when" argument determines when the
                                 postprocessor is invoked. It can be one of
                                 "pre_process" (after extraction),
                                 "before_dl" (before video download),
                                 "post_process" (after video download;
                                 default) or "after_move" (after moving file
                                 to their final locations). This option can
                                 be used multiple times to add different
                                 postprocessors

SponsorBlock Options:

Make chapter entries for, or remove various segments (sponsor, introductions, etc.) from downloaded YouTube videos using the SponsorBlock API

--sponsorblock-mark CATS         SponsorBlock categories to create chapters
                                 for, separated by commas. Available
                                 categories are all, sponsor, intro, outro,
                                 selfpromo, interaction, preview,
                                 music_offtopic. You can prefix the category
                                 with a "-" to exempt it. See 
                                 https://wiki.sponsor.ajay.app/index.php/Segment_Categories
                                 for description of the categories. Eg:
                                 --sponsorblock-query all,-preview
--sponsorblock-remove CATS       SponsorBlock categories to be removed from
                                 the video file, separated by commas. If a
                                 category is present in both mark and
                                 remove, remove takes precedence. The syntax
                                 and available categories are the same as
                                 for --sponsorblock-mark
--sponsorblock-chapter-title TEMPLATE
                                 The title template for SponsorBlock
                                 chapters created by --sponsorblock-mark.
                                 The same syntax as the output template is
                                 used, but the only available fields are
                                 start_time, end_time, category, categories,
                                 name, category_names. Defaults to
                                 "[SponsorBlock]: %(category_names)l"
--no-sponsorblock                Disable both --sponsorblock-mark and
                                 --sponsorblock-remove
--sponsorblock-api URL           SponsorBlock API location, defaults to
                                 https://sponsor.ajay.app

Extractor Options:

--extractor-retries RETRIES      Number of retries for known extractor
                                 errors (default is 3), or "infinite"
--allow-dynamic-mpd              Process dynamic DASH manifests (default)
                                 (Alias: --no-ignore-dynamic-mpd)
--ignore-dynamic-mpd             Do not process dynamic DASH manifests
                                 (Alias: --no-allow-dynamic-mpd)
--hls-split-discontinuity        Split HLS playlists to different formats at
                                 discontinuities such as ad breaks
--no-hls-split-discontinuity     Do not split HLS playlists to different
                                 formats at discontinuities such as ad
                                 breaks (default)
--extractor-args KEY:ARGS        Pass these arguments to the extractor. See
                                 "EXTRACTOR ARGUMENTS" for details. You can
                                 use this option multiple times to give
                                 arguments for different extractors

CONFIGURATION

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: The file given by --config-location

  2. Portable Configuration: yt-dlp.conf in the same directory as the bundled binary. If you are running from source-code (<root dir>/yt_dlp/__main__.py), the root directory is used instead.

  3. Home Configuration: yt-dlp.conf in the home path given by -P "home:<path>", or in the current directory if no such path is given

  4. User Configuration:

    • %XDG_CONFIG_HOME%/yt-dlp/config (recommended on Linux/macOS)
    • %XDG_CONFIG_HOME%/yt-dlp.conf
    • %APPDATA%/yt-dlp/config (recommended on Windows)
    • %APPDATA%/yt-dlp/config.txt
    • ~/yt-dlp.conf
    • ~/yt-dlp.conf.txt

    %XDG_CONFIG_HOME% defaults to ~/.config if undefined. On windows, ~ points to %HOME% if present, %USERPROFILE% (generally C:\Users\<user name>) or %HOMEDRIVE%%HOMEPATH%.

  5. System Configuration: /etc/yt-dlp.conf

For example, with the following configuration file yt-dlp will always extract the audio, not copy the mtime, use a proxy and save all videos under YouTube directory in your home directory:

# Lines starting with # are comments

# Always extract audio
-x

# Do not copy the mtime
--no-mtime

# Use this proxy
--proxy 127.0.0.1:3128

# Save all videos under YouTube directory in your home directory
-o ~/YouTube/%(title)s.%(ext)s

Note that options in configuration file are just the same options aka switches used in regular command line calls; thus there must be no whitespace after - or --, e.g. -o or --proxy but not - o or -- proxy.

You can use --ignore-config if you want to disable all configuration files for a particular yt-dlp run. If --ignore-config is found inside any configuration file, no further configuration will be loaded. For example, having the option in the portable configuration file prevents loading of user and system configurations. Additionally, (for backward compatibility) if --ignore-config is found inside the system configuration file, the user configuration is not loaded.

Authentication with .netrc file

You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with --username and --password) in order not to pass credentials as command line arguments on every yt-dlp execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a .netrc file on a per extractor basis. For that you will need to create a .netrc file in --netrc-location and restrict permissions to read/write by only you:

touch $HOME/.netrc
chmod a-rwx,u+rw $HOME/.netrc

After that you can add credentials for an extractor in the following format, where extractor is the name of the extractor in lowercase:

machine <extractor> login <username> password <password>

For example:

machine youtube login [email protected] password my_youtube_password
machine twitch login my_twitch_account_name password my_twitch_password

To activate authentication with the .netrc file you should pass --netrc to yt-dlp or place it in the configuration file.

The default location of the .netrc file is $HOME (~) in UNIX. On Windows, it is %HOME% if present, %USERPROFILE% (generally C:\Users\<user name>) or %HOMEDRIVE%%HOMEPATH%

OUTPUT TEMPLATE

The -o option is used to indicate a template for the output file names while -P option is used to specify the path each type of file should be saved to.

tl;dr: navigate me to examples.

The simplest 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 and could break some post-processing).

It may however also contain special sequences that will be replaced when downloading each video. The special sequences may be formatted according to python string formatting operations. For example, %(NAME)s or %(NAME)05d. To clarify, that is a percent symbol followed by a name in parentheses, followed by formatting operations.

The field names themselves (the part inside the parenthesis) can also have some special formatting:

  1. Object traversal: The dictionaries and lists available in metadata can be traversed by using a . (dot) separator. You can also do python slicing using :. Eg: %(tags.0)s, %(subtitles.en.-1.ext)s, %(id.3:7:-1)s, %(formats.:.format_id)s. %()s refers to the entire infodict. Note that all the fields that become available using this method are not listed below. Use -j to see such fields
  2. Addition: Addition and subtraction of numeric fields can be done using + and - respectively. Eg: %(playlist_index+10)03d, %(n_entries+1-playlist_index)d
  3. Date/time Formatting: Date/time fields can be formatted according to strftime formatting by specifying it separated from the field name using a >. Eg: %(duration>%H-%M-%S)s, %(upload_date>%Y-%m-%d)s, %(epoch-3600>%H-%M-%S)s
  4. Alternatives: Alternate fields can be specified seperated with a ,. Eg: %(release_date>%Y,upload_date>%Y|Unknown)s
  5. Default: A literal default value can be specified for when the field is empty using a | seperator. This overrides --output-na-template. Eg: %(uploader|Unknown)s
  6. More Conversions: In addition to the normal format types diouxXeEfFgGcrs, B, j, l, q can be used for converting to Bytes, json, a comma seperated list (alternate form flag # makes it new line \n seperated) and a string quoted for the terminal, respectively
  7. Unicode normalization: The format type U can be used for NFC unicode normalization. The alternate form flag (#) changes the normalization to NFD and the conversion flag + can be used for NFKC/NFKD compatibility equivalence normalization. Eg: %(title)+.100U is NFKC

To summarize, the general syntax for a field is:

%(name[.keys][addition][>strf][,alternate][|default])[flags][width][.precision][length]type

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, pl_thumbnail, 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. If any of the templates (except default) is empty, that type of file will not be written. Eg: --write-thumbnail -o "thumbnail:" will write thumbnails only for playlists and not for video.

The available fields are:

  • id (string): Video identifier
  • title (string): Video title
  • url (string): Video URL
  • ext (string): Video filename extension
  • alt_title (string): A secondary title of the video
  • description (string): The description of the video
  • display_id (string): An alternative identifier for the video
  • uploader (string): Full name of the video uploader
  • license (string): License name the video is licensed under
  • creator (string): The creator of the video
  • timestamp (numeric): UNIX timestamp of the moment the video became available
  • upload_date (string): Video upload date (YYYYMMDD)
  • release_date (string): The date (YYYYMMDD) when the video was released
  • release_timestamp (numeric): UNIX timestamp of the moment the video was released
  • uploader_id (string): Nickname or id of the video uploader
  • channel (string): Full name of the channel the video is uploaded on
  • channel_id (string): Id of the channel
  • location (string): Physical location where the video was filmed
  • duration (numeric): Length of the video in seconds
  • duration_string (string): Length of the video (HH:mm:ss)
  • view_count (numeric): How many users have watched the video on the platform
  • like_count (numeric): Number of positive ratings of the video
  • dislike_count (numeric): Number of negative ratings of the video
  • repost_count (numeric): Number of reposts of the video
  • average_rating (numeric): Average rating give by users, the scale used depends on the webpage
  • comment_count (numeric): Number of comments on the video (For some extractors, comments are only downloaded at the end, and so this field cannot be used)
  • age_limit (numeric): Age restriction for the video (years)
  • live_status (string): One of 'is_live', 'was_live', 'is_upcoming', 'not_live'
  • is_live (boolean): Whether this video is a live stream or a fixed-length video
  • was_live (boolean): Whether this video was originally a live stream
  • playable_in_embed (string): Whether this video is allowed to play in embedded players on other sites
  • availability (string): Whether the video is 'private', 'premium_only', 'subscriber_only', 'needs_auth', 'unlisted' or 'public'
  • start_time (numeric): Time in seconds where the reproduction should start, as specified in the URL
  • end_time (numeric): Time in seconds where the reproduction should end, as specified in the URL
  • format (string): A human-readable description of the format
  • format_id (string): Format code specified by --format
  • format_note (string): Additional info about the format
  • width (numeric): Width of the video
  • height (numeric): Height of the video
  • resolution (string): Textual description of width and height
  • tbr (numeric): Average bitrate of audio and video in KBit/s
  • abr (numeric): Average audio bitrate in KBit/s
  • acodec (string): Name of the audio codec in use
  • asr (numeric): Audio sampling rate in Hertz
  • vbr (numeric): Average video bitrate in KBit/s
  • fps (numeric): Frame rate
  • vcodec (string): Name of the video codec in use
  • container (string): Name of the container format
  • filesize (numeric): The number of bytes, if known in advance
  • filesize_approx (numeric): An estimate for the number of bytes
  • protocol (string): The protocol that will be used for the actual download
  • extractor (string): Name of the extractor
  • extractor_key (string): Key name of the extractor
  • epoch (numeric): Unix epoch when creating the file
  • autonumber (numeric): Number that will be increased with each download, starting at --autonumber-start
  • n_entries (numeric): Total number of extracted items in the playlist
  • playlist (string): Name or id of the playlist that contains the video
  • playlist_index (numeric): Index of the video in the playlist padded with leading zeros according the final index
  • playlist_autonumber (numeric): Position of the video in the playlist download queue padded with leading zeros according to the total length of the playlist
  • playlist_id (string): Playlist identifier
  • playlist_title (string): Playlist title
  • playlist_uploader (string): Full name of the playlist uploader
  • playlist_uploader_id (string): Nickname or id of the playlist uploader
  • webpage_url (string): A URL to the video webpage which if given to yt-dlp should allow to get the same result again
  • original_url (string): The URL given by the user (or same as webpage_url for playlist entries)

Available for the video that belongs to some logical chapter or section:

  • chapter (string): Name or title of the chapter the video belongs to
  • chapter_number (numeric): Number of the chapter the video belongs to
  • chapter_id (string): Id of the chapter the video belongs to

Available for the video that is an episode of some series or programme:

  • series (string): Title of the series or programme the video episode belongs to
  • season (string): Title of the season the video episode belongs to
  • season_number (numeric): Number of the season the video episode belongs to
  • season_id (string): Id of the season the video episode belongs to
  • episode (string): Title of the video episode
  • episode_number (numeric): Number of the video episode within a season
  • episode_id (string): Id of the video episode

Available for the media that is a track or a part of a music album:

  • track (string): Title of the track
  • track_number (numeric): Number of the track within an album or a disc
  • track_id (string): Id of the track
  • artist (string): Artist(s) of the track
  • genre (string): Genre(s) of the track
  • album (string): Title of the album the track belongs to
  • album_type (string): Type of the album
  • album_artist (string): List of all artists appeared on the album
  • disc_number (numeric): Number of the disc or other physical medium the track belongs to
  • release_year (numeric): Year (YYYY) when the album was released

Available for chapter: prefix when using --split-chapters for videos with internal chapters:

  • section_title (string): Title of the chapter
  • section_number (numeric): Number of the chapter within the file
  • section_start (numeric): Start time of the chapter in seconds
  • section_end (numeric): End time of the chapter in seconds

Available only when used in --print:

  • urls (string): The URLs of all requested formats, one in each line
  • filename (string): Name of the video file. Note that the actual filename may be different due to post-processing. Use --exec echo to get the name after all postprocessing is complete

Available only in --sponsorblock-chapter-title:

  • start_time (numeric): Start time of the chapter in seconds
  • end_time (numeric): End time of the chapter in seconds
  • categories (list): The SponsorBlock categories the chapter belongs to
  • category (string): The smallest SponsorBlock category the chapter belongs to
  • category_names (list): Friendly names of the categories
  • name (string): Friendly name of the smallest category

Each aforementioned sequence when referenced in an output template will be replaced by the actual value corresponding to the sequence name. Note that some of the sequences are not guaranteed to be present since they depend on the metadata obtained by a particular extractor. Such sequences will be replaced with placeholder value provided with --output-na-placeholder (NA by default).

For example for -o %(title)s-%(id)s.%(ext)s and an mp4 video with title yt-dlp test video and id BaW_jenozKc, this will result in a yt-dlp test video-BaW_jenozKc.mp4 file created in the current directory.

For numeric sequences you can use numeric related formatting, for example, %(view_count)05d will result in a string with view count padded with zeros up to 5 characters, like in 00042.

Output templates can also contain arbitrary hierarchical path, e.g. -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' which will result in downloading each video in a directory corresponding to this path template. Any missing directory will be automatically created for you.

To use percent literals in an output template use %%. To output to stdout use -o -.

The current default template is %(title)s [%(id)s].%(ext)s.

In some cases, you don't want special characters such as 中, spaces, or &, such as when transferring the downloaded filename to a Windows system or the filename through an 8bit-unsafe channel. In these cases, add the --restrict-filenames flag to get a shorter title:

Output template and Windows batch files

If you are using an output template inside a Windows batch file then you must escape plain percent characters (%) by doubling, so that -o "%(title)s-%(id)s.%(ext)s" should become -o "%%(title)s-%%(id)s.%%(ext)s". However you should not touch %'s that are not plain characters, e.g. environment variables for expansion should stay intact: -o "C:\%HOMEPATH%\Desktop\%%(title)s.%%(ext)s".

Output template examples

Note that on Windows you need to use double quotes instead of single.

$ yt-dlp --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc
youtube-dl test video ''_ä↭𝕐.mp4    # All kinds of weird characters

$ yt-dlp --get-filename -o '%(title)s.%(ext)s' BaW_jenozKc --restrict-filenames
youtube-dl_test_video_.mp4          # A simple file name

# Download YouTube playlist videos in separate directory indexed by video order in a playlist
$ yt-dlp -o '%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re

# Download YouTube playlist videos in separate directories according to their uploaded year
$ yt-dlp -o '%(upload_date>%Y)s/%(title)s.%(ext)s' https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re

# Download all playlists of YouTube channel/user keeping each playlist in separate directory:
$ yt-dlp -o '%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s' https://www.youtube.com/user/TheLinuxFoundation/playlists

# Download Udemy course keeping each chapter in separate directory under MyVideos directory in your home
$ yt-dlp -u user -p password -P '~/MyVideos' -o '%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s' https://www.udemy.com/java-tutorial/

# Download entire series season keeping each series and each season in separate directory under C:/MyVideos
$ yt-dlp -P "C:/MyVideos" -o "%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" https://videomore.ru/kino_v_detalayah/5_sezon/367617

# Stream the video being downloaded to stdout
$ yt-dlp -o - BaW_jenozKc

FORMAT SELECTION

By default, yt-dlp tries to download the best available quality if you don't pass any options. This is generally equivalent to using -f bestvideo*+bestaudio/best. However, if multiple audiostreams is enabled (--audio-multistreams), the default format changes to -f bestvideo+bestaudio/best. Similarly, if ffmpeg is unavailable, or if you use yt-dlp to stream to stdout (-o -), the default becomes -f best/bestvideo+bestaudio.

Deprecation warning: Latest versions of yt-dlp can stream multiple formats to the stdout simultaneously using ffmpeg. So, in future versions, the default for this will be set to -f bv*+ba/b similar to normal downloads. If you want to preserve the -f b/bv+ba setting, it is recommended to explicitly specify it in the configuration options.

The general syntax for format selection is -f FORMAT (or --format FORMAT) where FORMAT is a selector expression, i.e. an expression that describes format or formats you would like to download.

tl;dr: navigate me to examples.

The simplest case is requesting a specific format, for example with -f 22 you can download the format with format code equal to 22. You can get the list of available format codes for particular video using --list-formats or -F. Note that these format codes are extractor specific.

You can also use a file extension (currently 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm are supported) to download the best quality format of a particular file extension served as a single file, e.g. -f webm will download the best quality format with the webm extension served as a single file.

You can also use special names to select particular edge case formats:

  • all: Select all formats
  • mergeall: Select and merge all formats (Must be used with --audio-multistreams, --video-multistreams or both)
  • b*, best*: Select the best quality format irrespective of whether it contains video or audio
  • w*, worst*: Select the worst quality format irrespective of whether it contains video or audio
  • b, best: Select the best quality format that contains both video and audio. Equivalent to best*[vcodec!=none][acodec!=none]
  • w, worst: Select the worst quality format that contains both video and audio. Equivalent to worst*[vcodec!=none][acodec!=none]
  • bv, bestvideo: Select the best quality video-only format. Equivalent to best*[acodec=none]
  • wv, worstvideo: Select the worst quality video-only format. Equivalent to worst*[acodec=none]
  • bv*, bestvideo*: Select the best quality format that contains video. It may also contain audio. Equivalent to best*[vcodec!=none]
  • wv*, worstvideo*: Select the worst quality format that contains video. It may also contain audio. Equivalent to worst*[vcodec!=none]
  • ba, bestaudio: Select the best quality audio-only format. Equivalent to best*[vcodec=none]
  • wa, worstaudio: Select the worst quality audio-only format. Equivalent to worst*[vcodec=none]
  • ba*, bestaudio*: Select the best quality format that contains audio. It may also contain video. Equivalent to best*[acodec!=none]
  • wa*, worstaudio*: Select the worst quality format that contains audio. It may also contain video. Equivalent to worst*[acodec!=none]

For example, to download the worst quality video-only format you can use -f worstvideo. It is however recommended not to use worst and related options. When your format selector is worst, the format which is worst in all respects is selected. Most of the time, what you actually want is the video with the smallest filesize instead. So it is generally better to use -f best -S +size,+br,+res,+fps instead of -f worst. See sorting formats for more details.

You can select the n'th best format of a type by using best<type>.<n>. For example, best.2 will select the 2nd best combined format. Similarly, bv*.3 will select the 3rd best format that contains a video stream.

If you want to download multiple videos and they don't have the same formats available, you can specify the order of preference using slashes. Note that formats on the left hand side are preferred, for example -f 22/17/18 will download format 22 if it's available, otherwise it will download format 17 if it's available, otherwise it will download format 18 if it's available, otherwise it will complain that no suitable formats are available for download.

If you want to download several formats of the same video use a comma as a separator, e.g. -f 22,17,18 will download all these three formats, of course if they are available. Or a more sophisticated example combined with the precedence feature: -f 136/137/mp4/bestvideo,140/m4a/bestaudio.

You can merge the video and audio of multiple formats into a single file using -f <format1>+<format2>+... (requires ffmpeg installed), for example -f bestvideo+bestaudio will download the best video-only format, the best audio-only format and mux them together with ffmpeg.

Deprecation warning: Since the below described behavior is complex and counter-intuitive, this will be removed and multistreams will be enabled by default in the future. A new operator will be instead added to limit formats to single audio/video

Unless --video-multistreams is used, all formats with a video stream except the first one are ignored. Similarly, unless --audio-multistreams is used, all formats with an audio stream except the first one are ignored. For example, -f bestvideo+best+bestaudio --video-multistreams --audio-multistreams will download and merge all 3 given formats. The resulting file will have 2 video streams and 2 audio streams. But -f bestvideo+best+bestaudio --no-video-multistreams will download and merge only bestvideo and bestaudio. best is ignored since another format containing a video stream (bestvideo) has already been selected. The order of the formats is therefore important. -f best+bestaudio --no-audio-multistreams will download and merge both formats while -f bestaudio+best --no-audio-multistreams will ignore best and download only bestaudio.

Filtering Formats

You can also filter the video formats by putting a condition in brackets, as in -f "best[height=720]" (or -f "[filesize>10M]").

The following numeric meta fields can be used with comparisons <, <=, >, >=, = (equals), != (not equals):

  • filesize: The number of bytes, if known in advance
  • width: Width of the video, if known
  • height: Height of the video, if known
  • tbr: Average bitrate of audio and video in KBit/s
  • abr: Average audio bitrate in KBit/s
  • vbr: Average video bitrate in KBit/s
  • asr: Audio sampling rate in Hertz
  • fps: Frame rate

Also filtering work for comparisons = (equals), ^= (starts with), $= (ends with), *= (contains) and following string meta fields:

  • ext: File extension
  • acodec: Name of the audio codec in use
  • vcodec: Name of the video codec in use
  • container: Name of the container format
  • protocol: The protocol that will be used for the actual download, lower-case (http, https, rtsp, rtmp, rtmpe, mms, f4m, ism, http_dash_segments, m3u8, or m3u8_native)
  • format_id: A short description of the format
  • language: Language code

Any string comparison may be prefixed with negation ! in order to produce an opposite comparison, e.g. !*= (does not contain).

Note that none of the aforementioned meta fields are guaranteed to be present since this solely depends on the metadata obtained by particular extractor, i.e. the metadata offered by the website. Any other field made available by the extractor can also be used for filtering.

Formats for which the value is not known are excluded unless you put a question mark (?) after the operator. You can combine format filters, so -f "[height<=?720][tbr>500]" selects up to 720p videos (or videos where the height is not known) with a bitrate of at least 500 KBit/s. You can also use the filters with all to download all formats that satisfy the filter. For example, -f "all[vcodec=none]" selects all audio-only formats.

Format selectors can also be grouped using parentheses, for example if you want to download the best mp4 and webm formats with a height lower than 480 you can use -f '(mp4,webm)[height<480]'.

Sorting Formats

You can change the criteria for being considered the best by using -S (--format-sort). The general format for this is --format-sort field1,field2....

The available fields are:

  • hasvid: Gives priority to formats that has a video stream
  • hasaud: Gives priority to formats that has a audio stream
  • ie_pref: The format preference as given by the extractor
  • lang: Language preference as given by the extractor
  • quality: The quality of the format as given by the extractor
  • source: Preference of the source as given by the extractor
  • proto: Protocol used for download (https/ftps > http/ftp > m3u8_native/m3u8 > http_dash_segments> websocket_frag > other > mms/rtsp > unknown > f4f/f4m)
  • vcodec: Video Codec (av01 > vp9.2 > vp9 > h265 > h264 > vp8 > h263 > theora > other > unknown)
  • acodec: Audio Codec (opus > vorbis > aac > mp4a > mp3 > ac3 > dts > other > unknown)
  • codec: Equivalent to vcodec,acodec
  • vext: Video Extension (mp4 > webm > flv > other > unknown). If --prefer-free-formats is used, webm is prefered.
  • aext: Audio Extension (m4a > aac > mp3 > ogg > opus > webm > other > unknown). If --prefer-free-formats is used, the order changes to opus > ogg > webm > m4a > mp3 > aac.
  • ext: Equivalent to vext,aext
  • filesize: Exact filesize, if know in advance. This will be unavailable for mu38 and DASH formats.
  • fs_approx: Approximate filesize calculated from the manifests
  • size: Exact filesize if available, otherwise approximate filesize
  • height: Height of video
  • width: Width of video
  • res: Video resolution, calculated as the smallest dimension.
  • fps: Framerate of video
  • tbr: Total average bitrate in KBit/s
  • vbr: Average video bitrate in KBit/s
  • abr: Average audio bitrate in KBit/s
  • br: Equivalent to using tbr,vbr,abr
  • asr: Audio sample rate in Hz

Deprecation warning: Many of these fields have (currently undocumented) aliases, that may be removed in a future version. It is recommended to use only the documented field names.

All fields, unless specified otherwise, are sorted in descending order. To reverse this, prefix the field with a +. Eg: +res prefers format with the smallest resolution. Additionally, you can suffix a preferred value for the fields, separated by a :. Eg: res:720 prefers larger videos, but no larger than 720p and the smallest video if there are no videos less than 720p. For codec and ext, you can provide two preferred values, the first for video and the second for audio. Eg: +codec:avc:m4a (equivalent to +vcodec:avc,+acodec:m4a) sets the video codec preference to h264 > h265 > vp9 > vp9.2 > av01 > vp8 > h263 > theora and audio codec preference to mp4a > aac > vorbis > opus > mp3 > ac3 > dts. You can also make the sorting prefer the nearest values to the provided by using ~ as the delimiter. Eg: filesize~1G prefers the format with filesize closest to 1 GiB.

The fields hasvid and ie_pref are always given highest priority in sorting, irrespective of the user-defined order. This behaviour can be changed by using --format-sort-force. Apart from these, the default order used is: lang,quality,res,fps,codec:vp9.2,size,br,asr,proto,ext,hasaud,source,id. The extractors may override this default order, but they cannot override the user-provided order.

Note that the default has codec:vp9.2; i.e. av1 is not prefered

If your format selector is worst, the last item is selected after sorting. This means it will select the format that is worst in all respects. Most of the time, what you actually want is the video with the smallest filesize instead. So it is generally better to use -f best -S +size,+br,+res,+fps.

Tip: You can use the -v -F to see how the formats have been sorted (worst to best).

Format Selection examples

Note that on Windows you may need to use double quotes instead of single.

# Download and merge the best video-only format and the best audio-only format,
# or download the best combined format if video-only format is not available
$ yt-dlp -f 'bv+ba/b'

# Download best format that contains video,
# and if it doesn't already have an audio stream, merge it with best audio-only format
$ yt-dlp -f 'bv*+ba/b'

# Same as above
$ yt-dlp

# Download the best video-only format and the best audio-only format without merging them
# For this case, an output template should be used since
# by default, bestvideo and bestaudio will have the same file name.
$ yt-dlp -f 'bv,ba' -o '%(title)s.f%(format_id)s.%(ext)s'

# Download and merge the best format that has a video stream,
# and all audio-only formats into one file
$ yt-dlp -f 'bv*+mergeall[vcodec=none]' --audio-multistreams

# Download and merge the best format that has a video stream,
# and the best 2 audio-only formats into one file
$ yt-dlp -f 'bv*+ba+ba.2' --audio-multistreams


# The following examples show the old method (without -S) of format selection
# and how to use -S to achieve a similar but (generally) better result

# Download the worst video available (old method)
$ yt-dlp -f 'wv*+wa/w'

# Download the best video available but with the smallest resolution
$ yt-dlp -S '+res'

# Download the smallest video available
$ yt-dlp -S '+size,+br'



# Download the best mp4 video available, or the best video if no mp4 available
$ yt-dlp -f 'bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b'

# Download the best video with the best extension
# (For video, mp4 > webm > flv. For audio, m4a > aac > mp3 ...)
$ yt-dlp -S 'ext'



# Download the best video available but no better than 480p,
# or the worst video if there is no video under 480p
$ yt-dlp -f 'bv*[height<=480]+ba/b[height<=480] / wv*+ba/w'

# Download the best video available with the largest height but no better than 480p,
# or the best video with the smallest resolution if there is no video under 480p
$ yt-dlp -S 'height:480'

# Download the best video available with the largest resolution but no better than 480p,
# or the best video with the smallest resolution if there is no video under 480p
# Resolution is determined by using the smallest dimension.
# So this works correctly for vertical videos as well
$ yt-dlp -S 'res:480'



# Download the best video (that also has audio) but no bigger than 50 MB,
# or the worst video (that also has audio) if there is no video under 50 MB
$ yt-dlp -f 'b[filesize<50M] / w'

# Download largest video (that also has audio) but no bigger than 50 MB,
# or the smallest video (that also has audio) if there is no video under 50 MB
$ yt-dlp -f 'b' -S 'filesize:50M'

# Download best video (that also has audio) that is closest in size to 50 MB
$ yt-dlp -f 'b' -S 'filesize~50M'



# Download best video available via direct link over HTTP/HTTPS protocol,
# or the best video available via any protocol if there is no such video
$ yt-dlp -f '(bv*+ba/b)[protocol^=http][protocol!*=dash] / (bv*+ba/b)'

# Download best video available via the best protocol
# (https/ftps > http/ftp > m3u8_native > m3u8 > http_dash_segments ...)
$ yt-dlp -S 'proto'



# Download the best video with h264 codec, or the best video if there is no such video
$ yt-dlp -f '(bv*+ba/b)[vcodec^=avc1] / (bv*+ba/b)'

# Download the best video with best codec no better than h264,
# or the best video with worst codec if there is no such video
$ yt-dlp -S 'codec:h264'

# Download the best video with worst codec no worse than h264,
# or the best video with best codec if there is no such video
$ yt-dlp -S '+codec:h264'



# More complex examples

# Download the best video no better than 720p preferring framerate greater than 30,
# or the worst video (still preferring framerate greater than 30) if there is no such video
$ yt-dlp -f '((bv*[fps>30]/bv*)[height<=720]/(wv*[fps>30]/wv*)) + ba / (b[fps>30]/b)[height<=720]/(w[fps>30]/w)'

# Download the video with the largest resolution no better than 720p,
# or the video with the smallest resolution available if there is no such video,
# preferring larger framerate for formats with the same resolution
$ yt-dlp -S 'res:720,fps'



# Download the video with smallest resolution no worse than 480p,
# or the video with the largest resolution available if there is no such video,
# preferring better codec and then larger total bitrate for the same resolution
$ yt-dlp -S '+res:480,codec,br'

MODIFYING METADATA

The metadata obtained the 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. Backreferences 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 to extract data from, and the format to interpret it as, separated by a colon :. Either a python regular expression with named capture groups or a similar syntax to the 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 and will also affect the media file's metadata added when using --add-metadata.

This option also has a few special uses:

  • You can download an additional URL based on the metadata of the currently downloaded video. To do this, set the field additional_urls to the URL that you want to download. Eg: --parse-metadata "description:(?P<additional_urls>https?://www\.vimeo\.com/\d+) will download the first vimeo video found in the description
  • You can use this to change the metadata that is embedded in the media file. To do this, set the value of the corresponding field with a meta_ prefix. For example, any value you set to meta_description field will be added to the description field in the file. For example, you can use this to set a different "description" and "synopsis"

For reference, these are the fields yt-dlp adds by default to the file metadata:

Metadata fields From
title track or title
date upload_date
description, synopsis description
purl, comment webpage_url
track track_number
artist artist, creator, uploader or uploader_id
genre genre
album album
album_artist album_artist
disc disc_number
show series
season_number season_number
episode_id episode or episode_id
episode_sort episode_number
language of each stream From the format's language
Note: The file format may not support some of these fields

Modifying metadata examples

Note that on Windows you may need to use double quotes instead of single.

# Interpret the title as "Artist - Title"
$ yt-dlp --parse-metadata 'title:%(artist)s - %(title)s'

# Regex example
$ yt-dlp --parse-metadata 'description:Artist - (?P<artist>.+)'

# Set title as "Series name S01E05"
$ yt-dlp --parse-metadata '%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s'

# Set "comment" field in video metadata using description instead of webpage_url
$ yt-dlp --parse-metadata 'description:(?s)(?P<meta_comment>.+)' --add-metadata

# Replace all spaces and "_" in title and uploader with a `-`
$ yt-dlp --replace-in-metadata 'title,uploader' '[ _]' '-'

EXTRACTOR ARGUMENTS

Some extractors accept additional arguments which can be passed using --extractor-args KEY:ARGS. ARGS is a ; (semicolon) seperated string of ARG=VAL1,VAL2. Eg: --extractor-args "youtube:player_client=android_agegate,web;include_live_dash" --extractor-args "funimation:version=uncut"

The following extractors use this feature:

  • youtube

    • skip: hls or dash (or both) to skip download of the respective manifests
    • player_client: Clients to extract video data from. The main clients are web, android, ios, mweb. These also have _music, _embedded, _agegate, and _creator variants (Eg: web_embedded) (mweb has only _agegate). By default, android,web is used, but the agegate and creator variants are added as required for age-gated videos. Similarly the music variants are added for music.youtube.com urls. You can also use all to use all the clients
    • player_skip: Skip some network requests that are generally needed for robust extraction. One or more of configs (skip client configs), webpage (skip initial webpage), js (skip js player). While these options can help reduce the number of requests needed or avoid some rate-limiting, they could cause some issues. See #860 for more details
    • include_live_dash: Include live dash formats (These formats don't download properly)
    • comment_sort: top or new (default) - choose comment sorting mode (on YouTube's side).
    • max_comments: Maximum amount of comments to download (default all).
    • max_comment_depth: Maximum depth for nested comments. YouTube supports depths 1 or 2 (default).
  • youtubetab (YouTube playlists, channels, feeds, etc.)

    • skip: One or more of webpage (skip initial webpage download), authcheck (allow the download of playlists requiring authentication when no initial webpage is downloaded. This may cause unwanted behavior, see #1122 for more details)
  • funimation

    • language: Languages to extract. Eg: funimation:language=english,japanese
    • version: The video version to extract - uncut or simulcast
  • vikiChannel

    • video_types: Types of videos to download - one or more of episodes, movies, clips, trailers

NOTE: These options may be changed/removed in the future without concern for backward compatibility

PLUGINS

Plugins are loaded from <root-dir>/ytdlp_plugins/<type>/__init__.py; where <root-dir> is the directory of the binary (<root-dir>/yt-dlp), or the root directory of the module if you are running directly from source-code (<root dir>/yt_dlp/__main__.py). Plugins are currently not supported for the pip version

Plugins can be of <type>s extractor or postprocessor. Extractor plugins do not need to be enabled from the CLI and are automatically invoked when the input URL is suitable for it. Postprocessor plugins can be invoked using --use-postprocessor NAME.

See ytdlp_plugins for example plugins.

Note that all plugins are imported even if not invoked, and that there are no checks performed on plugin code. Use plugins at your own risk and only if you trust the code

If you are a plugin author, add ytdlp-plugins as a topic to your repository for discoverability

EMBEDDING YT-DLP

yt-dlp makes the best effort to be a good command-line program, and thus should be callable from any programming language.

Your program should avoid parsing the normal stdout since they may change in future versions. Instead they should use options such as -J, --print, --progress-template, --exec etc to create console output that you can reliably reproduce and parse.

From a Python program, you can embed yt-dlp in a more powerful fashion, like this:

import yt_dlp

ydl_opts = {}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=BaW_jenozKc'])

Most likely, you'll want to use various options. For a list of options available, have a look at yt_dlp/YoutubeDL.py.

Here's a more complete example of a program that outputs only errors (and a short message after the download is finished), converts the video to an mp3 file, implements a custom postprocessor and prints the final info_dict as json:

import json

import yt_dlp
from yt_dlp.postprocessor.common import PostProcessor


class MyLogger:
    def debug(self, msg):
        # For compatability with youtube-dl, both debug and info are passed into debug
        # You can distinguish them by the prefix '[debug] '
        if msg.startswith('[debug] '):
            pass
        else:
            self.info(msg)

    def info(self, msg):
        pass

    def warning(self, msg):
        pass

    def error(self, msg):
        print(msg)


class MyCustomPP(PostProcessor):
    def run(self, info):
        self.to_screen('Doing stuff')
        return [], info


def my_hook(d):
    if d['status'] == 'finished':
        print('Done downloading, now converting ...')


ydl_opts = {
    'format': 'bestaudio/best',
    'postprocessors': [{
        'key': 'FFmpegExtractAudio',
        'preferredcodec': 'mp3',
        'preferredquality': '192',
    }],
    'logger': MyLogger(),
    'progress_hooks': [my_hook],
}

with yt_dlp.YoutubeDL(ydl_opts) as ydl:
    ydl.add_post_processor(MyCustomPP())
    info = ydl.extract_info('https://www.youtube.com/watch?v=BaW_jenozKc')
    print(json.dumps(ydl.sanitize_info(info)))

See the public functions in yt_dlp/YoutubeDL.py for other available functions. Eg: ydl.download, ydl.download_with_info_file

DEPRECATED OPTIONS

These are all the deprecated options and the current alternative to achieve the same effect

Redundant options

While these options are redundant, they are still expected to be used due to their ease of use

--get-description                --print description
--get-duration                   --print duration_string
--get-filename                   --print filename
--get-format                     --print format
--get-id                         --print id
--get-thumbnail                  --print thumbnail
-e, --get-title                  --print title
-g, --get-url                    --print urls
-j, --dump-json                  --print "%()j"
--match-title REGEX              --match-filter "title ~= (?i)REGEX"
--reject-title REGEX             --match-filter "title !~= (?i)REGEX"
--min-views COUNT                --match-filter "view_count >=? COUNT"
--max-views COUNT                --match-filter "view_count <=? COUNT"

Not recommended

While these options still work, their use is not recommended since there are other alternatives to achieve the same

--all-formats                    -f all
--all-subs                       --sub-langs all --write-subs
--print-json                     -j --no-simulate
--autonumber-size NUMBER         Use string formatting. Eg: %(autonumber)03d
--autonumber-start NUMBER        Use internal field formatting like %(autonumber+NUMBER)s
--metadata-from-title FORMAT     --parse-metadata "%(title)s:FORMAT"
--hls-prefer-native              --downloader "m3u8:native"
--hls-prefer-ffmpeg              --downloader "m3u8:ffmpeg"
--list-formats-old               --compat-options list-formats (Alias: --no-list-formats-as-table)
--list-formats-as-table          --compat-options -list-formats [Default] (Alias: --no-list-formats-old)
--youtube-skip-dash-manifest     --extractor-args "youtube:skip=dash" (Alias: --no-youtube-include-dash-manifest)
--youtube-skip-hls-manifest      --extractor-args "youtube:skip=hls" (Alias: --no-youtube-include-hls-manifest)
--youtube-include-dash-manifest  Default (Alias: --no-youtube-skip-dash-manifest)
--youtube-include-hls-manifest   Default (Alias: --no-youtube-skip-hls-manifest)

Developer options

These options are not intended to be used by the end-user

--test                           Download only part of video for testing extractors
--youtube-print-sig-code         For testing youtube signatures
--allow-unplayable-formats       List unplayable formats also
--no-allow-unplayable-formats    Default

Old aliases

These are aliases that are no longer documented for various reasons

--avconv-location                --ffmpeg-location
--cn-verification-proxy URL      --geo-verification-proxy URL
--dump-headers                   --print-traffic
--dump-intermediate-pages        --dump-pages
--force-write-download-archive   --force-write-archive
--load-info                      --load-info-json
--no-split-tracks                --no-split-chapters
--no-write-srt                   --no-write-subs
--prefer-unsecure                --prefer-insecure
--rate-limit RATE                --limit-rate RATE
--split-tracks                   --split-chapters
--srt-lang LANGS                 --sub-langs LANGS
--trim-file-names LENGTH         --trim-filenames LENGTH
--write-srt                      --write-subs
--yes-overwrites                 --force-overwrites

Sponskrub Options

Support for SponSkrub has been deprecated in favor of --sponsorblock

--sponskrub                      --sponsorblock-mark all
--no-sponskrub                   --no-sponsorblock
--sponskrub-cut                  --sponsorblock-remove all
--no-sponskrub-cut               --sponsorblock-remove -all
--sponskrub-force                Not applicable
--no-sponskrub-force             Not applicable
--sponskrub-location             Not applicable
--sponskrub-args                 Not applicable

No longer supported

These options may no longer work as intended

--prefer-avconv                  avconv is not officially supported by yt-dlp (Alias: --no-prefer-ffmpeg)
--prefer-ffmpeg                  Default (Alias: --no-prefer-avconv)
-C, --call-home                  Not implemented
--no-call-home                   Default
--include-ads                    No longer supported
--no-include-ads                 Default
--write-annotations              No supported site has annotations now
--no-write-annotations           Default

Removed

These options were deprecated since 2014 and have now been entirely removed

--id                             -o "%(id)s.%(ext)s"
-A, --auto-number                -o "%(autonumber)s-%(id)s.%(ext)s"
-t, --title                      -o "%(title)s-%(id)s.%(ext)s"
-l, --literal                    -o accepts literal names

CONTRIBUTING

See CONTRIBUTING.md for instructions on Opening an Issue and Contributing code to the project

MORE

For FAQ see the youtube-dl README

Comments
  • [Announcement] Dropping Python 3.6 support

    [Announcement] Dropping Python 3.6 support

    ~~#### This is not an announcement. We are simply discussing the possibility for now~~

    Following https://github.com/yt-dlp/yt-dlp/issues/267, we have now gotten rid of almost all Python 2.7 compatibility code. Most of our remaining compat code is for working around Py3.6 limitations. Since Python 3.6 has already reached EOL, it is time to start considering dropping it.

    Compared to the benefits of dropping 2.7, the benefits we gain here is admittedly much smaller:

    1. Remove compat/re, compat/asyncio
    2. contextvars (https://github.com/yt-dlp/yt-dlp/pull/2173#issuecomment-1017990110) and dataclasses (to replace info_dict etc) - While these are beneficial in theory, making actual use of these take quite a bit of work. So they are not immediately useful
    3. #3668 needs 3.7 since requests module is about to drop support for 3.6

    PS: This will not change our currently minimum supported Windows version (Vista)

    ~~Since the overall benefits is so small, we could alternatively wait for 3.7's EOL (2023-06-27) and then jump to 3.8 directly~~

    IMPORTANT: https://github.com/yt-dlp/yt-dlp/issues/3764#issuecomment-1154051119

    discussion/announcement 
    opened by pukkandan 146
  • [youtube] nsig extraction failed: You may experience throttling for some formats

    [youtube] nsig extraction failed: You may experience throttling for some formats

    DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

    • [X] I understand that I will be blocked if I remove or skip any mandatory* field

    Checklist

    • [X] I'm reporting a bug unrelated to a specific site
    • [X] I've verified that I'm running yt-dlp version 2022.08.08 (update instructions) or later (specify commit)
    • [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
    • [X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
    • [X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
    • [X] I've read the guidelines for opening an issue

    Provide a description that is worded well enough to be understood

    I assume that this is a new player as I could not find a reference to it in the repo. Receive WARNING: [youtube] nsig extraction failed: You may experience throttling for some formats for all actions against the affected video.

    Provide verbose output that clearly demonstrates the problem

    • [X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
    • [X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

    Complete Verbose Output

    I meant to include this properly but the entire js player is output to the log, so Github tells me "There was an error creating your issue: body is too long (maximum is 65536 characters)."
    
    Please forgive me, here is a pastebin link instead: https://pastebin.com/62j1x2yd
    
    high-priority site-bug 
    opened by CetaceanNation 145
  • [arte] Move to v2 API

    [arte] Move to v2 API

    Boilerplate (own code, improvement)
    • I am the original author of this code and I am willing to release it under Unlicense

    What is the purpose of your pull request?

    • Improvement

    ~~The v1 API code was removed for simplicity, even though it still mostly works.~~ ~~Not anymore.~~ ~~Not not anymore.~~ Not not not anymore, the v1 API is now completely down (404).

    I have left a number of ‘XXX’ comments in, please take a look before merging.

    The testcases for this extractor are stale. I have not updated them, other than throwing away upload_date, which the updated code no longer extracts.

    Fixes or subsumes:

    • #3086
    • #3428
    • #3502
    • ytdl-org/youtube-dl#29640
    • ytdl-org/youtube-dl#29653
    • ytdl-org/youtube-dl#29870
    • ytdl-org/youtube-dl#30816
    • ytdl-org/youtube-dl#30878

    To settle before merging:

    • [x] Whether to keep v1 API extraction ~~(it looks like Arte has pulled the plug on the v1 API, so no, it seems)~~ (probably not worth the trouble if even Arte themselves neglect it; plus, text subtitles in v2 API > burned-in subtitles in v1 API)
    • [x] Update testcases (I think good enough for now; videos may expire in the future, though)
    • [x] Language preference inferred from version label
    • [x] All the XXX comments
      • [x] Non-HLS protocols
      • [x] nulls for videos that are no longer available
      • [x] Whether rights is a good upload_date replacement (I say good enough)
      • [x] id vs providerId (decided to use providerId after all)
      • [x] extract chapters from stream['segments'] (deferred this one)
    • [x] Is stream['versions'] always a one-element list? (answer seems to be yes; even the host’s own player seems to assume so)
    • [x] Handling of https://api.arte.tv/api/player/v2/config/fr/LIVE
    • [x] Whether to also extract unlisted non-streaming mp4 URLs (my answer: no, #3521 should take care of this)
    site-enhancement 
    opened by fstirlitz 63
  • [extractor/bilibili] add support to old flv

    [extractor/bilibili] add support to old flv

    • add support to old flv
    • refine fps display

    Old introduction

    • fix bangumi
    • fix video in old_flv_frags format
    • fix BiliBiliPlayerIE
    • fix BilibiliChannelIE for season
    • add bangumi playlist support (BilibiliBangumiMediaIE)
    • add subtitle support
    • add some metadata
    • remove backup_url
    • almost rewrite and simplify whole BiliBiliIE._real_extract

    I think it's better to move BiliIntl* to bilibili_intl.py, because they behave like two different sites.

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    What is the purpose of your pull request?


    Description of your pull request and other information

    Explanation of your pull request in arbitrary form goes here. Please make sure the description explains the purpose and effect of your pull request and is worded well enough to be understood. Provide as much context and examples as possible.

    site-enhancement closed-pr 
    opened by lockmatrix 59
  • [Rokfin] Add extractor

    [Rokfin] Add extractor

    Please follow the guide below

    • You will be asked some questions, please read them carefully and answer honestly
    • Put an x into all the boxes [ ] relevant to your pull request (like that [x])
    • Use Preview tab to see how your pull request will actually look like

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    What is the purpose of your pull request?

    • [ ] Bug fix
    • [ ] Improvement
    • [x] New extractor
    • [ ] New feature

    This closes issue 1351.

    site-enhancement do-not-merge 
    opened by P-reducible 57
  • [Broken] Niconico

    [Broken] Niconico

    Checklist

    • [x] I'm reporting a broken site support
    • [x] I've verified that I'm running yt-dlp version 2021.03.15
    • [x] I've checked that all provided URLs are alive and playable in a browser
    • [x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
    • [x] I've searched the bugtracker for similar issues including closed ones

    Verbose log

    [debug] Command-line config: ['--list-formats', '--verbose', 'https://www.nicovideo.jp/watch/sm31589985']
    [debug] Loading archive file None
    [debug] Encodings: locale cp1252, fs utf-8, out utf-8, pref cp1252
    [debug] yt-dlp version 2021.03.15
    [debug] Python version 3.8.7 (CPython 64bit) - Windows-10-10.0.19041-SP0
    [debug] exe versions: ffmpeg n4.3.1-29-g89daac5fe2, ffprobe n4.3.1-29-g89daac5fe2
    [debug] Proxy map: {}
    [niconico] sm31589985: Downloading webpage
    [niconico] sm31589985: Downloading video info page
    ERROR: The video can't downloaded.
    Traceback (most recent call last):
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\extractor\niconico.py", line 398, in _real_extract
        dmc_info = api_data['video']['dmcInfo']
    KeyError: 'dmcInfo'
    Traceback (most recent call last):
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\extractor\niconico.py", line 398, in _real_extract
        dmc_info = api_data['video']['dmcInfo']
    KeyError: 'dmcInfo'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\YoutubeDL.py", line 1024, in wrapper
        return func(self, *args, **kwargs)
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\YoutubeDL.py", line 1045, in __extract_info
        ie_result = ie.extract(url)
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\extractor\common.py", line 554, in extract
        ie_result = self._real_extract(url)
      File "c:\users\cleo\appdata\local\programs\python\python38\lib\site-packages\yt_dlp\extractor\niconico.py", line 400, in _real_extract
        raise ExtractorError('The video can\'t downloaded.',
    yt_dlp.utils.ExtractorError: The video can't downloaded.
    
    

    Description

    This just happened recently. I tried doing the clear cache method but it still doesn't work. I also did use login credentials but same error happens (even on other youtube-dl forks)

    bug help-wanted 
    opened by Magizero 56
  • ParamountPlus Downloads always freeze at least once during playback.

    ParamountPlus Downloads always freeze at least once during playback.

    Checklist

    • [X] I'm asking a question
    • [X] I've looked through the README and FAQ for similar questions
    • [X] I've searched the bugtracker for similar questions including closed ones

    Question

    So I was curious if anyone else has issues with their ParamountPlus downloads. I noticed it when I had subtitles turned on and I skip towards the end of the video and the subs are way off. So I ran back through the video and found where the subs were correct and found that the audio will replay itself and the then the video freezes until it catches back up to the audio and then plays again. It usually happens at least once per video, sometimes not at all, other times it's multiple times per video, making it at best annoying and at worst unwatchable.

    Not sure what the deal is. Just wasn't sure if I was alone in this. Or maybe there is a setting I am not using that makes everyone elses downloads work flawlessly on playback.

    external issue 
    opened by Sipherdrakon 53
  • A better SponsorBlock

    A better SponsorBlock

    Please follow the guide below

    • You will be asked some questions, please read them carefully and answer honestly
    • Put an x into all the boxes [ ] relevant to your pull request (like that [x])
    • Use Preview tab to see how your pull request will actually look like

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    Changes are similar in purpose to SponSkrub, but the implementation is completely different.

    What is the purpose of your pull request?

    • [ ] Bug fix
    • [x] Improvement
    • [ ] New extractor
    • [ ] New feature

    Description of your pull request and other information

    This is a complete replacement of SponSkrub. New features:

    1. Proper cut implemented using concat FFmpeg demuxer, mentioned in https://github.com/faissaloo/SponSkrub/issues/32. According to https://sattlers.org/2019/09/30/ffmpeg-split-and-cut-video-segments/, small stutter/frame skipping mentioned in the issue can be fixed by forcing key frames, an option for which is also provided.
    2. Implementation takes videoDuration from SponsorBlock responses into account.
    3. Implementation is compatible with --skip-chapters.
    4. Different chapter merge algorithm, which does not lead to "Chapter end time X before chapter start Y" reported in https://github.com/faissaloo/SponSkrub/issues/27.
    5. SRT, ASS, and VTT subtitles (seems like FFmpeg does not fully support others) are cut along with the video, solving https://github.com/faissaloo/SponSkrub/issues/21.
    6. Fully cross-platform (SponSkrub still doesn't have macOS binaries).
    7. Requires no external dependencies.
    8. Written in Python, not in D, which makes contributing much easier.
    opened by nihil-admirari 48
  • Crunchyroll Beta(US) - Not returning any available videos when specifying a series URL

    Crunchyroll Beta(US) - Not returning any available videos when specifying a series URL

    Checklist

    Question

    YT-DLP works when specifying an individual video URLs with Crunchyroll Beta, but it's not able to find any available videos when specifying a series URL. I've tried with -u/-p, netrc, browser cookies, cookie file, but none of them are changing the outcome for me.

    Is this just expected behavior with CR?

    Verbose log

    [debug] Command-line config: ['-vU', '--config-location', 'D:\\_DL\\sites\\crunchyroll\\yt-dlp.conf', '-P', 'temp:D:\\tmp\\cM\\', '-P', 'home:G:\\tmp\\_M\\', '--cookies-from-browser', 'edge', '--ffmpeg-location', 'D:\\Common\\ffmpeg\\bin', '-a', 'D:\\_DL\\_shared\\crunchyroll_B', '--download-archive', 'D:\\_DL\\_shared\\crunchyroll_A']
    [debug] | Config "D:\_DL\sites\crunchyroll\yt-dlp.conf": ['-F', '--list-subs', '--no-simulate', '--check-all-formats', '--restrict-filenames', '--windows-filenames', '--trim-filenames', '248', '--add-metadata', '--sub-langs', 'en-US', '--convert-subs', 'ass', '--write-subs', '--embed-metadata', '--embed-thumbnail', '--convert-thumbnails', 'png', '--remux-video', 'mkv', '-N', '32', '--extractor-args', 'crunchyrollbeta:language=jaJp', '--downloader', 'aria2c', '--downloader-args', 'aria2c:-c -j 32 -s 32 -x 16 --file-allocation=none --optimize-concurrent-downloads=true --http-accept-gzip=true', '-f', 'bv[height>=1080]+ba[height>=1080] / bv+ba / b*', '-o', '%(series).110s/S%(season_number)sE%(episode_number)s - %(title).120s.%(ext)s']
    [debug] Batch file urls: ['https://beta.crunchyroll.com/series/GVDHX8PMM/orient']
    [Cookies] Extracting cookies from edge
    [debug] Extracting cookies from: "C:\Users\WS-SA\AppData\Local\Microsoft\Edge\User Data\Default\Network\Cookies"
    [Cookies] Extracted 249 cookies from edge
    [debug] cookie version breakdown: {'v10': 249, 'other': 0, 'unencrypted': 0}
    [debug] Encodings: locale cp1252, fs utf-8, out utf-8, err utf-8, pref cp1252
    [debug] yt-dlp version 2022.02.04 [c1653e9] (win_exe)
    [debug] Python version 3.8.10 (CPython 64bit) - Windows-10-10.0.19044-SP0
    [debug] exe versions: ffmpeg 5.0-full_build-www.gyan.dev (setts), ffprobe 5.0-full_build-www.gyan.dev
    [debug] Optional libraries: Cryptodome, mutagen, sqlite, websockets
    [debug] Proxy map: {}
    [debug] Loading archive file 'D:\\_DL\\_shared\\crunchyroll_A'
    Latest version: 2022.02.04, Current version: 2022.02.04
    yt-dlp is up to date (2022.02.04)
    [debug] [crunchyroll:playlist:beta] Extracting URL: https://beta.crunchyroll.com/series/GVDHX8PMM/orient
    [debug] [crunchyroll:playlist] Extracting URL: https://www.crunchyroll.com/orient
    [crunchyroll:playlist] orient: Downloading webpage
    [download] Downloading playlist: orient
    [crunchyroll:playlist] playlist orient: Downloading 0 videos
    [download] Finished downloading playlist: orient
    
    account-needed site-bug 
    opened by wamasi 40
  • [ArteTV] Unable to download JSON metadata - HTTP Error 404: Not Found

    [ArteTV] Unable to download JSON metadata - HTTP Error 404: Not Found

    Checklist

    Region

    Germany

    Description

    Command lines below should be self-explanatory.

    By the way, many thanks for this really useful program and the effort you put in to it.

    Verbose log

    $ mpv https://www.arte.tv/de/videos/041596-000-A/das-leben-ist-seltsam/
    [ytdl_hook] ERROR: [ArteTV] 041596-000-A: Unable to download JSON metadata: HTTP Error 404: Not Found (caused by <HTTPError 404: 'Not Found'>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U 
    [ytdl_hook] youtube-dl failed: unexpected error occurred 
    Failed to recognize file format.
    
    $ yt-dlp -U
    Latest version: 2022.04.08, Current version: 2022.04.08
    yt-dlp is up to date (2022.04.08)
    
    $ yt-dlp --ignore-config -F https://www.arte.tv/de/videos/041596-000-A/das-leben-ist-seltsam/
    [ArteTV] 041596-000-A: Downloading JSON metadata
    ERROR: [ArteTV] 041596-000-A: Unable to download JSON metadata: HTTP Error 404: Not Found (caused by <HTTPError 404: 'Not Found'>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
    
    $ yt-dlp --ignore-config -vU https://www.arte.tv/de/videos/041596-000-A/das-leben-ist-seltsam/
    [debug] Command-line config: ['--ignore-config', '-vU', 'https://www.arte.tv/de/videos/041596-000-A/das-leben-ist-seltsam/']
    [debug] Encodings: locale UTF-8, fs utf-8, out utf-8, err utf-8, pref UTF-8
    [debug] yt-dlp version 2022.04.08 [7884ade65]
    [debug] Python version 3.10.4 (CPython 64bit) - Linux-5.17.5-arch1-1-x86_64-with-glibc2.35
    [debug] Checking exe version: ffmpeg -bsfs
    [debug] Checking exe version: ffprobe -bsfs
    [debug] exe versions: ffmpeg 5.0 (setts), ffprobe 5.0, rtmpdump 2.4
    [debug] Optional libraries: certifi, Cryptodome, mutagen, sqlite, websockets
    [debug] Proxy map: {}
    Latest version: 2022.04.08, Current version: 2022.04.08
    yt-dlp is up to date (2022.04.08)
    [debug] [ArteTV] Extracting URL: https://www.arte.tv/de/videos/041596-000-A/das-leben-ist-seltsam/
    [ArteTV] 041596-000-A: Downloading JSON metadata
    ERROR: [ArteTV] 041596-000-A: Unable to download JSON metadata: HTTP Error 404: Not Found (caused by <HTTPError 404: 'Not Found'>); please report this issue on  https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using  yt-dlp -U
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 641, in extract
        ie_result = self._real_extract(url)
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/arte.py", line 57, in _real_extract
        info = self._download_json(
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 1029, in _download_json
        res = self._download_json_handle(
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 1008, in _download_json_handle
        res = self._download_webpage_handle(
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 800, in _download_webpage_handle
        urlh = self._request_webpage(url_or_request, video_id, note, errnote, fatal, data=data, headers=headers, query=query, expected_status=expected_status)
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 785, in _request_webpage
        raise ExtractorError(errmsg, cause=err)
    
      File "/usr/lib/python3.10/site-packages/yt_dlp/extractor/common.py", line 767, in _request_webpage
        return self._downloader.urlopen(url_or_request)
      File "/usr/lib/python3.10/site-packages/yt_dlp/YoutubeDL.py", line 3601, in urlopen
        return self._opener.open(req, timeout=self._socket_timeout)
      File "/usr/lib/python3.10/urllib/request.py", line 525, in open
        response = meth(req, response)
      File "/usr/lib/python3.10/urllib/request.py", line 634, in http_response
        response = self.parent.error(
      File "/usr/lib/python3.10/urllib/request.py", line 563, in error
        return self._call_chain(*args)
      File "/usr/lib/python3.10/urllib/request.py", line 496, in _call_chain
        result = func(*args)
      File "/usr/lib/python3.10/urllib/request.py", line 643, in http_error_default
        raise HTTPError(req.full_url, code, msg, hdrs, fp)
    urllib.error.HTTPError: HTTP Error 404: Not Found
    
    site-bug 
    opened by hlekin 39
  • [extractor/crunchyroll] Beta is no longer beta

    [extractor/crunchyroll] Beta is no longer beta

    Description of your pull request and other information

    Crunchyroll beta is no longer beta, so the old beta extractor needs to become the main extractor, and it needs to be adapted to the new server location.

    Fixes #5292

    Template

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    What is the purpose of your pull request?

    site-bug hacktoberfest-accepted 
    opened by tejing1 38
  • [extractor/gmanetwork] Add extractor

    [extractor/gmanetwork] Add extractor

    IMPORTANT: PRs without the template will be CLOSED

    Description of your pull request and other information

    This PR add site support for single video in gmanetwork.com. This PR assume all video either from Youtube or Dailymotion.

    Partially fixes #5770 (as this PR didn't include playlist extraction)

    Template

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    What is the purpose of your pull request?

    opened by HobbyistDev 0
  • Prevent file from becoming glitchy/having broken metadata when aborting a livestream download?

    Prevent file from becoming glitchy/having broken metadata when aborting a livestream download?

    DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

    • [X] I understand that I will be blocked if I remove or skip any mandatory* field

    Checklist

    • [X] I'm asking a question and not reporting a bug or requesting a feature
    • [X] I've looked through the README
    • [X] I've verified that I'm running yt-dlp version 2023.01.02 (update instructions) or later (specify commit)
    • [X] I've searched the bugtracker for similar questions including closed ones. DO NOT post duplicates
    • [X] I've read the guidelines for opening an issue

    Please make sure the question is worded well enough to be understood

    Sometimes, stream downloads loses connection or times out, or I manually abort them by closing the command prompt window. When doing so, it just leaves me with a .mp4.part file, which when I open will sometimes have glitchy audio, skip all over the place, have incorrect metadata for how long it is, etc.

    What is the correct procedure for fixing the file after a download has been aborted prematurely?

    Provide verbose output that clearly demonstrates the problem

    • [ ] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
    • [ ] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

    Complete Verbose Output

    No response

    question 
    opened by ForHelvete 1
  • [extractor/volejtv] Add extractor

    [extractor/volejtv] Add extractor

    IMPORTANT: PRs without the template will be CLOSED

    Description of your pull request and other information

    This PR add site support for single video in volej.tv

    Fixes #5883

    Template

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense
    • [ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

    What is the purpose of your pull request?

    opened by HobbyistDev 0
  • [twitter] Add file meta-data to twitter broadcasts like modified date

    [twitter] Add file meta-data to twitter broadcasts like modified date

    DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

    • [X] I understand that I will be blocked if I remove or skip any mandatory* field

    Checklist

    • [X] I'm requesting a site-specific feature
    • [X] I've verified that I'm running yt-dlp version 2023.01.02 (update instructions) or later (specify commit)
    • [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
    • [X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
    • [X] I've read the guidelines for opening an issue
    • [ ] I've read about sharing account credentials and I'm willing to share it if required

    Region

    No response

    Example URLs

    https://twitter.com/i/broadcasts/1kvJpmZQgNLxE https://api.twitter.com/1.1/broadcasts/show.json?include_events=true&ids=1kvJpmZQgNLxE&broadcastVersionMap=

    Provide a description that is worded well enough to be understood

    I am trying to save past broadcasts on Twitter, but I noticed it doesn't automatically change the date to match the broadcast's date. I tried using different arguments but it still didn't work. The data required is available on the endpoint https://api.twitter.com/1.1/broadcasts/show.json?include_events=true&ids=

    So with the example url already given it would be https://api.twitter.com/1.1/broadcasts/show.json?include_events=true&ids=1kvJpmZQgNLxE&broadcastVersionMap=

    and the property needed is created_at_ms

    also if a broadcast is deleted (404 when you visit) then the broadcast id's object is empty. So for example again with the output from above, it would just be { "broadcasts": { "1kvJpmZQgNLxE": {} }, "events": {} }

    Provide verbose output that clearly demonstrates the problem

    • [X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
    • [X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

    Complete Verbose Output

    [debug] Command-line config: ['-vU', '-N48', '--embed-metadata', '--mtime', 'https://twitter.com/i/broadcasts/1kvJpmZQgNLxE']
    [debug] User config: []
    [debug] System config: []
    [debug] Encodings: locale cp1252, fs utf-8, pref cp1252, out utf-8, error utf-8, screen utf-8
    [debug] yt-dlp version 2023.01.02 [d83b0ad] (win32_exe)
    [debug] Python 3.8.10 (CPython AMD64 64bit) - Windows-10-10.0.19044-SP0 (OpenSSL 1.1.1k  25 Mar 2021)
    [debug] exe versions: ffmpeg 5.1.2-essentials_build-www.gyan.dev (setts), ffprobe 5.1.2-essentials_build-www.gyan.dev
    [debug] Optional libraries: Cryptodome-3.16.0, brotli-1.0.9, certifi-2022.12.07, mutagen-1.46.0, sqlite3-2.6.0, websockets-10.4
    [debug] Proxy map: {}
    [debug] Loaded 1754 extractors
    [debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
    Latest version: 2023.01.02, Current version: 2023.01.02
    yt-dlp is up to date (2023.01.02)
    [twitter:broadcast] Extracting URL: https://twitter.com/i/broadcasts/1kvJpmZQgNLxE
    [twitter:broadcast] 1kvJpmZQgNLxE: Downloading guest token
    [twitter:broadcast] 1kvJpmZQgNLxE: Downloading JSON metadata
    [twitter:broadcast] 28_1608032331650007041: Downloading JSON metadata
    [twitter:broadcast] 1kvJpmZQgNLxE: Downloading m3u8 information
    [debug] Formats sorted by: hasvid, ie_pref, lang, quality, res, fps, hdr:12(7), vcodec:vp9.2(10), channels, acodec, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, source, id
    [debug] Default format spec: bestvideo*+bestaudio/best
    [info] 1kvJpmZQgNLxE: Downloading 1 format(s): replay-5500
    [debug] Invoking hlsnative downloader on "https://prod-fastly-us-west-2.video.pscp.tv/Transcoding/v1/hls/Qe1YFJTEijMb-1WS1XeaCPplLm0913crOd4Tm3HymSNwriuv3Ml-tqGgxQcOvuvzpO095YBU6BU-yEtZuef7eA/transcode/us-west-2/periscope-replay-direct-prod-us-west-2-public/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsInZlcnNpb24iOiIyIn0.eyJFbmNvZGVyU2V0dGluZyI6ImVuY29kZXJfc2V0dGluZ18xMDgwcDMwXzEwIiwiSGVpZ2h0IjoxMDgwLCJLYnBzIjo1NTAwLCJXaWR0aCI6MTkyMH0.OImMZabKYJ0cs9CnIapU-4aBk6KNBiJxi1hh-6l4BZ4/playlist_16774523345717652049.m3u8?type=replay"
    [hlsnative] Downloading m3u8 manifest
    [hlsnative] Total fragments: 482
    [download] Destination: SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4
    [debug] File locking is not supported. Proceeding without locking
    WARNING: The download speed shown is only of one thread. This is a known issue and patches are welcome
    [download] 100% of  180.68MiB in 00:00:03 at 59.15MiB/s
    [debug] ffprobe command line: ffprobe -hide_banner -show_format -show_streams -print_format json "file:SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4"
    [FixupM3u8] Fixing MPEG-TS in MP4 container of "SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4"
    [debug] ffmpeg command line: ffmpeg -y -loglevel "repeat+info" -i "file:SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4" -map 0 -dn -ignore_unknown -c copy -f mp4 "-bsf:a" aac_adtstoasc -movflags "+faststart" "file:SpaceX - Starlink Mission [1kvJpmZQgNLxE].temp.mp4"
    [Metadata] Adding metadata to "SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4"
    [debug] ffmpeg command line: ffmpeg -y -loglevel "repeat+info" -i "file:SpaceX - Starlink Mission [1kvJpmZQgNLxE].mp4" -map 0 -dn -ignore_unknown -c copy -write_id3v1 1 -metadata "title=SpaceX - Starlink Mission" -metadata "purl=https://twitter.com/i/broadcasts/1kvJpmZQgNLxE" -metadata "comment=https://twitter.com/i/broadcasts/1kvJpmZQgNLxE" -metadata "artist=SpaceX" -movflags "+faststart" "file:SpaceX - Starlink Mission [1kvJpmZQgNLxE].temp.mp4"
    
    site-enhancement triage 
    opened by AdamSaketume26 0
  • No package metadata was found for yt-dlp

    No package metadata was found for yt-dlp

    DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

    • [X] I understand that I will be blocked if I remove or skip any mandatory* field

    Checklist

    • [X] I'm reporting a bug unrelated to a specific site
    • [X] I've verified that I'm running yt-dlp version 2023.01.02 (update instructions) or later (specify commit)
    • [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
    • [X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
    • [X] I've searched the bugtracker for similar issues including closed ones. DO NOT post duplicates
    • [X] I've read the guidelines for opening an issue

    Provide a description that is worded well enough to be understood

    New Year 2023 Binary gives error from https://github.com/yt-dlp/yt-dlp/archive/master.zip

    Installing using python3 -m pip install --no-cache-dir --force-reinstall https://github.com/yt-dlp/yt-dlp/archive/master.zip

    Error

    nginx:/# yt-dlp 
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 381, in from_name
        return next(cls.discover(name=name))
    StopIteration
    During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
      File "/usr/bin/yt-dlp", line 33, in <module>
        sys.exit(load_entry_point('yt-dlp==2023.1.2', 'console_scripts', 'yt-dlp')())
      File "/usr/bin/yt-dlp", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 805, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 383, in from_name
        raise PackageNotFoundError(name)
    importlib_metadata.PackageNotFoundError: No package metadata was found for yt-dlp
    

    Provide verbose output that clearly demonstrates the problem

    • [X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
    • [X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

    Complete Verbose Output

    # yt-dlp -vU
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 381, in from_name
        return next(cls.discover(name=name))
    StopIteration
    During handling of the above exception, another exception occurred:
    Traceback (most recent call last):
      File "/usr/bin/yt-dlp", line 33, in <module>
        sys.exit(load_entry_point('yt-dlp==2023.1.2', 'console_scripts', 'yt-dlp')())
      File "/usr/bin/yt-dlp", line 22, in importlib_load_entry_point
        for entry_point in distribution(dist_name).entry_points
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 805, in distribution
        return Distribution.from_name(distribution_name)
      File "/usr/local/lib/python3.7/dist-packages/importlib_metadata/__init__.py", line 383, in from_name
        raise PackageNotFoundError(name)
    importlib_metadata.PackageNotFoundError: No package metadata was found for yt-dlp
    
    bug triage 
    opened by Len-PGH 1
  • [extractor/rai] General overhaul of the extractor

    [extractor/rai] General overhaul of the extractor

    Description of your pull request and other information

    • added RaiCultura to handle a new website
    • improved RaiSudtirol to handle more urls
    • renamed _real_extract to _legacy_real_extarct in RaiIE as is no longer needed (kept as a fallback solution in the new _real_extract)
    • removed unnecessary loop for media quality requests, no longer supported by the server
    • better media server query to get maximum quality available by forcing User-Agent
    • improved and simplified http formats creation
    • added checks for media availability
    • added thumbnails list method used by all extractors
    • added various join_nonempty, traverse_obj, f-strings to simplify the code
    • _TESTS cleanup
    • commented a bit the code for clarity
    Template

    Before submitting a pull request make sure you have:

    In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

    • [x] I am the original author of this code and I am willing to release it under Unlicense

    What is the purpose of your pull request?

    • [x] Fix or improvement to an extractor (Make sure to add/update tests)
    opened by nixxo 0
Releases(2023.01.02)
  • 2023.01.02(Jan 2, 2023)

    A description of the various files are in the README


    Changelog

    • Improve plugin architecture by Grub4K, coletdjnz, flashdagger, pukkandan
      • Plugins can be loaded in any distribution of yt-dlp (binary, pip, source, etc.) and can be distributed and installed as packages. See the readme for more information
    • Add --compat-options 2021,2022
      • This allows devs to change defaults and make other potentially breaking changes more easily. If you need everything to work exactly as-is, put Use --compat 2022 in your config to guard against future compat changes.
    • [downloader/aria2c] Native progress for aria2c via RPC by Lesmiscore, pukkandan
    • Merge youtube-dl: Upto commit/195f22f by Grub4k, pukkandan
    • Add pre-processor stage video
    • Let --parse/replace-in-metadata run at any post-processing stage
    • Add --enable-file-urls by coletdjnz
    • Add new field aspect_ratio
    • Add ac4 to known codecs
    • Add weba to known extensions
    • [FFmpegVideoConvertor] Add gif to --recode-video
    • Add message when there are no subtitles/thumbnails
    • Deprioritize HEVC-over-FLV formats by Lesmiscore
    • Make early reject of --match-filter stricter
    • Fix --cookies-from-browser CLI parsing
    • Fix original_url in playlists
    • Fix bug in writing playlist info-json
    • Fix bugs in PlaylistEntries
    • [downloader/ffmpeg] Fix headers for video+audio formats by Grub4K, bashonly
    • [extractor] Add a way to distinguish IEs that returns only videos
    • [extractor] Implement universal format sorting and deprecate _sort_formats
    • [extractor] Let _extract_format functions obey --ignore-no-formats
    • [extractor/generic] Add fragment_query extractor arg for DASH and HLS by bashonly, pukkandan
    • [extractor/generic] Decode unicode-escaped embed URLs by bashonly
    • [extractor/generic] Don't report redirect to https
    • [extractor/generic] Fix JSON LD manifest extraction by bashonly, pukkandan
    • [extractor/generic] Use Accept-Encoding: identity for initial request by coletdjnz
    • [FormatSort] Add mov to vext
    • [jsinterp] Escape regex that looks like nested set
    • [webvtt] Handle premature EOF by flashdagger
    • [utils] classproperty: Add cache support
    • [utils] get_exe_version: Detect broken executables by dirkf, pukkandan
    • [utils] js_to_json: Fix bug in f55523c by ChillingPepper, pukkandan
    • [utils] Make ExtractorError mutable
    • [utils] Move FileDownloader.parse_bytes into utils
    • [utils] Move format sorting code into utils
    • [utils] windows_enable_vt_mode: Proper implementation by Grub4K
    • [update] Workaround #5632
    • [docs] Improvements
    • [cleanup] Misc fixes and cleanup
    • [cleanup] Use random.choices by freezboltz
    • [extractor/airtv] Add extractor by HobbyistDev
    • [extractor/amazonminitv] Add extractors by GautamMKGarg, nyuszika7h
    • [extractor/beatbump] Add extractors by Bobscorn, pukkandan
    • [extractor/europarl] Add EuroParlWebstream extractor by HobbyistDev
    • [extractor/kanal2] Add extractor by bashonly, glensc, pukkandan
    • [extractor/kankanews] Add extractor by synthpop123
    • [extractor/kick] Add extractor by bashonly
    • [extractor/mediastream] Add extractor by HobbyistDev, elyse0
    • [extractor/noice] Add NoicePodcast extractor by HobbyistDev
    • [extractor/oneplace] Add OnePlacePodcast extractor by HobbyistDev
    • [extractor/rumble] Add RumbleIE extractor by flashdagger
    • [extractor/screencastify] Add extractor by bashonly
    • [extractor/trtcocuk] Add extractor by HobbyistDev
    • [extractor/Veoh] Add user extractor by tntmod54321
    • [extractor/videoken] Add extractors by bashonly
    • [extractor/webcamerapl] Add extractor by milkknife
    • [extractor/amazon] Add AmazonReviews extractor by bashonly
    • [extractor/netverse] Add NetverseSearch extractor by HobbyistDev
    • [extractor/vimeo] Add VimeoProIE by bashonly, pukkandan
    • [extractor/xiami] Remove extractors by synthpop123
    • [extractor/youtube] Add piped.video by Bnyro
    • [extractor/youtube] Consider language in format de-duplication
    • [extractor/youtube] Extract DRC formats
    • [extractor/youtube] Fix ytuser:
    • [extractor/youtube] Fix bug in handling of music URLs
    • [extractor/youtube] Subtitles cannot be translated to und
    • [extractor/youtube:tab] Extract metadata from channel items by coletdjnz
    • [extractor/ARD] Add vtt subtitles by CapacitorSet
    • [extractor/ArteTV] Extract chapters by bashonly, iw0nderhow
    • [extractor/bandcamp] Add album_artist by stelcodes
    • [extractor/bilibili] Fix --no-playlist for anthology
    • [extractor/bilibili] Improve _VALID_URL by skbeh
    • [extractor/biliintl:series] Make partial download of series faster
    • [extractor/BiliLive] Fix extractor
    • [extractor/brightcove] Add BrightcoveNewBaseIE and fix embed extraction
    • [extractor/cda] Support premium and misc improvements by selfisekai
    • [extractor/ciscowebex] Support password-protected videos by damianoamatruda
    • [extractor/curiositystream] Fix auth by mnn
    • [extractor/embedly] Handle vimeo embeds
    • [extractor/fifa] Fix Preplay extraction by dirkf
    • [extractor/foxsports] Fix extractor by bashonly
    • [extractor/gronkh] Fix _VALID_URL by muddi900
    • [extractor/hotstar] Improve format metadata
    • [extractor/iqiyi] Fix Iq JS regex by bashonly
    • [extractor/la7] Improve extractor by nixxo
    • [extractor/mediaset] Better embed detection and error messages by nixxo
    • [extractor/mixch] Support --wait-for-video
    • [extractor/naver] Improve _VALID_URL for NaverNowIE by bashonly
    • [extractor/naver] Treat fan subtitles as separate language
    • [extractor/netverse] Extract comments by HobbyistDev
    • [extractor/nosnl] Add support for /video by HobbyistDev
    • [extractor/odnoklassniki] Extract subtitles by bashonly
    • [extractor/pinterest] Fix extractor by bashonly
    • [extractor/plutotv] Fix videos with non-zero start by digitall
    • [extractor/polskieradio] Adapt to next.js redesigns by selfisekai
    • [extractor/reddit] Add vcodec to fallback format by chengzhicn
    • [extractor/reddit] Extract crossposted media by bashonly
    • [extractor/reddit] Extract video embeds in text posts by bashonly
    • [extractor/rutube] Support private videos by mexus
    • [extractor/sibnet] Separate from VKIE
    • [extractor/slideslive] Fix extractor by Grub4K, bashonly
    • [extractor/slideslive] Support embeds and slides by Grub4K, bashonly, pukkandan
    • [extractor/soundcloud] Support user permalink by nosoop
    • [extractor/spankbang] Fix extractor by JChris246
    • [extractor/stv] Detect DRM
    • [extractor/swearnet] Fix description bug
    • [extractor/tencent] Fix geo-restricted video by elyse0
    • [extractor/tiktok] Fix subs, DouyinIE, improve _VALID_URL by bashonly
    • [extractor/tiktok] Update _VALID_URL, add api_hostname arg by bashonly
    • [extractor/tiktok] Update API hostname by redraskal
    • [extractor/twitcasting] Fix videos with password by Spicadox, bashonly
    • [extractor/twitter] Heed --no-playlist for multi-video tweets by Grub4K, bashonly
    • [extractor/twitter] Refresh guest token when expired by Grub4K, bashonly
    • [extractor/twitter:spaces] Add Referer to m3u8 by nixxo
    • [extractor/udemy] Fix lectures that have no URL and detect DRM
    • [extractor/unsupported] Add more URLs
    • [extractor/urplay] Support for audio-only formats by barsnick
    • [extractor/wistia] Improve extension detection by Grub4k, bashonly, pukkandan
    • [extractor/yle_areena] Support restricted videos by docbender
    • [extractor/youku] Fix extractor by KurtBestor
    • [extractor/youporn] Fix metadata by marieell
    • [extractor/redgifs] Fix bug in 8c188d5

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(1.03 KB)
    SHA2-512SUMS(1.84 KB)
    yt-dlp(2.56 MB)
    yt-dlp.exe(13.06 MB)
    yt-dlp.tar.gz(4.77 MB)
    yt-dlp_linux(26.53 MB)
    yt-dlp_linux.zip(27.29 MB)
    yt-dlp_linux_aarch64(15.19 MB)
    yt-dlp_linux_armv7l(14.42 MB)
    yt-dlp_macos(13.72 MB)
    yt-dlp_macos.zip(14.17 MB)
    yt-dlp_macos_legacy(12.88 MB)
    yt-dlp_min.exe(12.93 MB)
    yt-dlp_win.zip(12.97 MB)
    yt-dlp_x86.exe(10.87 MB)
    _update_spec(77 bytes)
  • 2022.11.11(Nov 11, 2022)

    A description of the various files are in the README


    Changelog

    • Merge youtube-dl: Upto commit/de39d12
    • Backport SSL configuration from Python 3.10 by coletdjnz
    • Do more processing in --flat-playlist
    • Fix --list options not implying -s in some cases by Grub4K, bashonly
    • Fix end time of clips by cruel-efficiency
    • Fix for formats=None
    • Write API params in debug head
    • [outtmpl] Ensure ASCII in json and add option for Unicode
    • [SponsorBlock] Add type field, obey --retry-sleep extractor, relax duration check for large segments
    • [SponsorBlock] Support chapter category by ajayyy, pukkandan
    • [ThumbnailsConvertor] Fix filename escaping by dirkf, pukkandan
    • [ModifyChapters] Handle the entire video being marked for removal
    • [embedthumbnail] Fix thumbnail name in mp3 by How-Bout-No
    • [downloader/fragment] HLS download can continue without first fragment
    • [cookies] Improve LenientSimpleCookie by Grub4K
    • [jsinterp] Improve separating regex
    • [extractor/common] Fix fatal=False for _search_nuxt_data
    • [extractor/common] Improve _generic_title
    • [extractor/common] Fix json_ld type checks by Grub4K
    • [extractor/generic] Separate embed extraction into own function
    • [extractor/generic:quoted-html] Add extractor by coletdjnz, pukkandan
    • [extractor/unsupported] Raise error on known DRM-only sites by coletdjnz
    • [utils] js_to_json: Improve escape handling by Grub4K
    • [utils] strftime_or_none: Workaround Python bug on Windows
    • [utils] traverse_obj: Always return list when branching, allow re.Match objects by Grub4K
    • [build, test] Harden workflows' security by sashashura
    • [build] py2exe: Migrate to freeze API by SG5, pukkandan
    • [build] Create armv7l and aarch64 releases by MrOctopus, pukkandan
    • [build] Make linux binary truly standalone using conda by mlampe
    • [build] Replace set-output with GITHUB_OUTPUT by Lesmiscore
    • [update] Use error code 100 for update errors
    • [compat] Fix shutils.move in restricted ACL mode on BSD by ClosedPort22, pukkandan
    • [docs, devscripts] Document pyinst's argument passthrough by jahway603
    • [test] Allow extract_flat in download tests by coletdjnz, pukkandan
    • [cleanup] Misc fixes and cleanup by pukkandan, Alienmaster
    • [extractor/aeon] Add extractor by DoubleCouponDay
    • [extractor/agora] Add extractors by selfisekai
    • [extractor/camsoda] Add extractor by zulaport
    • [extractor/cinetecamilano] Add extractor by timendum
    • [extractor/deuxm] Add extractors by CrankDatSouljaBoy
    • [extractor/genius] Add extractors by bashonly
    • [extractor/japandiet] Add extractors by Lesmiscore
    • [extractor/listennotes] Add extractor by lksj, pukkandan
    • [extractor/nos.nl] Add extractor by HobbyistDev
    • [extractor/oftv] Add extractors by DoubleCouponDay
    • [extractor/podbayfm] Add extractor by schnusch
    • [extractor/qingting] Add extractor by bashonly, changren-wcr
    • [extractor/screen9] Add extractor by tpikonen
    • [extractor/swearnet] Add extractor by HobbyistDev
    • [extractor/YleAreena] Add extractor by pukkandan, vitkhab
    • [extractor/zeenews] Add extractor by m4tu4g, pukkandan
    • [extractor/youtube:tab] Update tab handling for redesign by coletdjnz, pukkandan
      • Channel URLs download all uploads of the channel as multiple playlists, separated by tab
    • [extractor/youtube] Differentiate between no comments and disabled comments by coletdjnz
    • [extractor/youtube] Extract concurrent_view_count for livestreams by coletdjnz
    • [extractor/youtube] Fix duration for premieres by nosoop
    • [extractor/youtube] Fix live_status by coletdjnz, pukkandan
    • [extractor/youtube] Ignore incomplete data error for comment replies by coletdjnz
    • [extractor/youtube] Improve chapter parsing from description
    • [extractor/youtube] Mark videos as fully watched by bsun0000
    • [extractor/youtube] Update piped instances by Generator
    • [extractor/youtube] Update playlist metadata extraction for new layout by coletdjnz
    • [extractor/youtube:tab] Fix video metadata from tabs by coletdjnz
    • [extractor/youtube:tab] Let approximate_date return timestamp
    • [extractor/americastestkitchen] Fix extractor by bashonly
    • [extractor/bbc] Support onion domains by DoubleCouponDay
    • [extractor/bilibili] Add chapters and misc cleanup by lockmatrix, pukkandan
    • [extractor/bilibili] Fix BilibiliIE and Bangumi extractors by lockmatrix, pukkandan
    • [extractor/bitchute] Better error for geo-restricted videos by flashdagger
    • [extractor/bitchute] Improve BitChuteChannelIE by flashdagger, pukkandan
    • [extractor/bitchute] Simplify extractor by flashdagger, pukkandan
    • [extractor/cda] Support login through API by selfisekai
    • [extractor/crunchyroll] Beta is now the only layout by tejing1
    • [extractor/detik] Avoid unnecessary extraction
    • [extractor/doodstream] Remove extractor
    • [extractor/dplay] Add MotorTrendOnDemand extractor by bashonly
    • [extractor/epoch] Support videos without data-trailer by gibson042, pukkandan
    • [extractor/fox] Extract thumbnail by vitkhab
    • [extractor/foxnews] Add FoxNewsVideo extractor
    • [extractor/hotstar] Add season support by m4tu4g
    • [extractor/hotstar] Refactor v1 API calls
    • [extractor/iprima] Make json+ld non-fatal by bashonly
    • [extractor/iq] Increase phantomjs timeout
    • [extractor/kaltura] Support playlists by jwoglom, pukkandan
    • [extractor/lbry] Authenticate with cookies by flashdagger
    • [extractor/livestreamfails] Support posts by invertico
    • [extractor/mlb] Add MLBArticle extractor by HobbyistDev
    • [extractor/mxplayer] Improve extractor by m4tu4g
    • [extractor/niconico] Always use HTTPS for requests
    • [extractor/nzherald] Support new video embed by coletdjnz
    • [extractor/odnoklassniki] Support boosty.to embeds by Lesmiscore, megapro17, pukkandan
    • [extractor/paramountplus] Update API token by bashonly
    • [extractor/reddit] Add fallback format by bashonly
    • [extractor/redgifs] Fix extractors by bashonly, pukkandan
    • [extractor/redgifs] Refresh auth token for 401 by endotronic, pukkandan
    • [extractor/rumble] Add HLS formats and extract more metadata by flashdagger
    • [extractor/sbs] Improve _VALID_URL by bashonly
    • [extractor/skyit] Fix extractors by nixxo
    • [extractor/stripchat] Fix hostname for HLS stream by zulaport
    • [extractor/stripchat] Improve error message by freezboltz
    • [extractor/telegram] Add playlist support and more metadata by bashonly, bsun0000
    • [extractor/Tnaflix] Fix for HTTP 500 by SG5, pukkandan
    • [extractor/tubitv] Better DRM detection by bashonly
    • [extractor/tvp] Update extractors by selfisekai
    • [extractor/twitcasting] Fix data-movie-playlist extraction by Lesmiscore
    • [extractor/twitter] Add onion site to _VALID_URL by DoubleCouponDay
    • [extractor/twitter] Add Spaces extractor and GraphQL API by Grub4K, bashonly, nixxo, pukkandan
    • [extractor/twitter] Support multi-video posts by Grub4K
    • [extractor/uktvplay] Fix _VALID_URL
    • [extractor/viu] Support subtitles of on-screen text by tkgmomosheep
    • [extractor/VK] Fix playlist URLs by the-marenga
    • [extractor/vlive] Extract release_timestamp
    • [extractor/voot] Improve _VALID_URL by freezboltz
    • [extractor/wordpress:mb.miniAudioPlayer] Add embed extractor by coletdjnz
    • [extractor/YoutubeWebArchive] Improve metadata extraction by coletdjnz
    • [extractor/zee5] Improve _VALID_URL by m4tu4g
    • [extractor/zenyandex] Fix extractors by lksj, puc9, pukkandan

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(1.03 KB)
    SHA2-512SUMS(1.84 KB)
    yt-dlp(2.52 MB)
    yt-dlp.exe(13.21 MB)
    yt-dlp.tar.gz(4.69 MB)
    yt-dlp_linux(26.49 MB)
    yt-dlp_linux.zip(27.25 MB)
    yt-dlp_linux_aarch64(14.69 MB)
    yt-dlp_linux_armv7l(14.37 MB)
    yt-dlp_macos(13.67 MB)
    yt-dlp_macos.zip(14.12 MB)
    yt-dlp_macos_legacy(12.82 MB)
    yt-dlp_min.exe(12.87 MB)
    yt-dlp_win.zip(13.12 MB)
    yt-dlp_x86.exe(10.98 MB)
    _update_spec(77 bytes)
  • 2022.10.04(Oct 4, 2022)

    A description of the various files are in the README


    Upcoming changes to format selection

    There are some small changes coming to format selection syntax and defaults in a release or two. Most people should NOT be affected negatively by this, but it is recommended to go through the list of changes to make sure


    Changelog

    • Allow a set to be passed as download_archive by pukkandan, bashonly
    • Allow open ranges for time ranges by Lesmiscore
    • Allow plugin extractors to replace the built-in ones
    • Don't download entire video when no matching --download-sections
    • Fix --config-location -
    • Improve 5736d79
    • Fix for when playlists don't have webpage_url
    • Support environment variables in --ffmpeg-location
    • Workaround libc_ver not be available on Windows Store version of Python
    • [outtmpl] Curly braces to filter keys by pukkandan
    • [outtmpl] Make %s work in strfformat for all systems
    • [jsinterp] Workaround operator associativity issue
    • [cookies] Let _get_mac_keyring_password fail gracefully
    • [cookies] Parse cookies leniently by Grub4K
    • [phantomjs] Fix bug in 587021c by elyse0
    • [downloader/aria2c] Fix filename containing leading whitespace by std-move
    • [downloader/ism] Support ec-3 codec by nixxo
    • [extractor] Fix fatal=False in RetryManager
    • [extractor] Improve json-ld extraction
    • [extractor] Make _search_json able to parse lists
    • [extractor] Escape % in representation_id of m3u8
    • [extractor/generic] Pass through referer from json-ld
    • [utils] base_url: URL paths can contain & by elyse0
    • [utils] js_to_json: Improve
    • [utils] Popen.run: Fix default return in binary mode
    • [utils] traverse_obj: Rewrite, document and add tests by Grub4K
    • [devscripts] make_lazy_extractors: Fix for Docker by josanabr
    • [docs] Misc Improvements
    • [cleanup] Misc fixes and cleanup by pukkandan, gamer191
    • [extractor/24tv.ua] Add extractors by coletdjnz
    • [extractor/BerufeTV] Add extractor by Fabi019
    • [extractor/booyah] Add extractor by HobbyistDev, elyse0
    • [extractor/bundesliga] Add extractor by Fabi019
    • [extractor/GoPlay] Add extractor by CNugteren, basrieter, jeroenj
    • [extractor/iltalehti] Add extractor by tpikonen
    • [extractor/IsraelNationalNews] Add extractor by Bobscorn
    • [extractor/mediaworksnzvod] Add extractor by coletdjnz
    • [extractor/MicrosoftEmbed] Add extractor by DoubleCouponDay
    • [extractor/nbc] Add NBCStations extractor by bashonly
    • [extractor/onenewsnz] Add extractor by coletdjnz
    • [extractor/prankcast] Add extractor by HobbyistDev, columndeeply
    • [extractor/Smotrim] Add extractor by Lesmiscore, nikita-moor
    • [extractor/tencent] Add Iflix extractor by elyse0
    • [extractor/unscripted] Add extractor by HobbyistDev
    • [extractor/adobepass] Add MSO AlticeOne (Optimum TV) by CplPwnies
    • [extractor/youtube] Download post_live videos from start by Lesmiscore, pukkandan
    • [extractor/youtube] Add support for Shorts audio pivot feed by coletdjnz, pukkandan
    • [extractor/youtube] Detect lazy-load-for-videos embeds
    • [extractor/youtube] Do not warn on duplicate chapters
    • [extractor/youtube] Fix video like count extraction by coletdjnz
    • [extractor/youtube] Support changing extraction language by coletdjnz
    • [extractor/youtube:tab] Improve continuation items extraction
    • [extractor/youtube:tab] Support reporthistory page
    • [extractor/amazonstore] Fix JSON extraction by coletdjnz, pukkandan
    • [extractor/amazonstore] Retry to avoid captcha page by Lesmiscore
    • [extractor/animeondemand] Remove extractor by TokyoBlackHole
    • [extractor/anvato] Fix extractor and refactor by bashonly
    • [extractor/artetv] Remove duplicate stream urls by Grub4K
    • [extractor/audioboom] Support direct URLs and refactor by pukkandan, tpikonen
    • [extractor/bandcamp] Extract uploader_url
    • [extractor/bilibili] Add space.bilibili extractors by lockmatrix
    • [extractor/BilibiliSpace] Fix extractor and better error message by lockmatrix
    • [extractor/BiliIntl] Support uppercase lang in _VALID_URL by coletdjnz
    • [extractor/BiliIntlSeries] Fix _VALID_URL
    • [extractor/bongacams] Update _VALID_URL by 0xGodspeed
    • [extractor/crunchyroll:beta] Improve handling of hardsubs by Grub4K
    • [extractor/detik] Generalize extractors by HobbyistDev, coletdjnz
    • [extractor/dplay:italy] Add default authentication by Timendum
    • [extractor/heise] Fix extractor by coletdjnz
    • [extractor/holodex] Fix _VALID_URL by LiviaMedeiros
    • [extractor/hrfensehen] Fix extractor by snapdgn
    • [extractor/hungama] Add subtitle by GautamMKGarg, pukkandan
    • [extractor/instagram] Extract more metadata by pritam20ps05
    • [extractor/JWPlatform] Fix extractor by coletdjnz
    • [extractor/malltv] Fix video_id extraction by HobbyistDev
    • [extractor/MLBTV] Detect live streams
    • [extractor/motorsport] Support native embeds
    • [extractor/Mxplayer] Fix extractor by itachi-19
    • [extractor/nebula] Add nebula.tv by tannertechnology
    • [extractor/nfl] Fix extractor by bashonly
    • [extractor/ondemandkorea] Update jw_config regex by julien-hadleyjack
    • [extractor/paramountplus] Better DRM detection by bashonly
    • [extractor/patreon] Sort formats
    • [extractor/rcs] Fix embed extraction by coletdjnz
    • [extractor/redgifs] Fix extractor by jhwgh1968
    • [extractor/rutube] Fix _EMBED_REGEX by coletdjnz
    • [extractor/RUTV] Fix warnings for livestreams by Lesmiscore
    • [extractor/soundcloud:search] More metadata in --flat-playlist by SuperSonicHub1
    • [extractor/telegraaf] Use mobile GraphQL API endpoint by coletdjnz
    • [extractor/tennistv] Fix timestamp by zenerdi0de
    • [extractor/tiktok] Fix TikTokIE by bashonly
    • [extractor/triller] Fix auth token by bashonly
    • [extractor/trovo] Fix extractors by Mehavoid
    • [extractor/tv2] Support new url format by tobi1805
    • [extractor/web.archive:youtube] Fix _YT_INITIAL_PLAYER_RESPONSE_RE
    • [extractor/wistia] Add support for channels by coletdjnz
    • [extractor/wistia] Match IDs in embed URLs by bashonly
    • [extractor/wordpress:playlist] Add generic embed extractor by coletdjnz
    • [extractor/yandexvideopreview] Update _VALID_URL by Grub4K
    • [extractor/zee5] Fix _VALID_URL by m4tu4g
    • [extractor/zee5] Generate device ids by freezboltz

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.47 MB)
    yt-dlp.exe(13.15 MB)
    yt-dlp.tar.gz(4.60 MB)
    yt-dlp_linux(31.64 MB)
    yt-dlp_linux.zip(32.39 MB)
    yt-dlp_macos(13.61 MB)
    yt-dlp_macos.zip(14.06 MB)
    yt-dlp_macos_legacy(12.76 MB)
    yt-dlp_min.exe(12.81 MB)
    yt-dlp_win.zip(13.07 MB)
    yt-dlp_x86.exe(10.92 MB)
    _update_spec(77 bytes)
  • 2022.09.01(Sep 1, 2022)

    A description of the various files are in the README


    Changelog

    • Add option --use-extractors
    • Merge youtube-dl: Upto commit/ed5c44e
    • Add yt-dlp version to infojson
    • Fix --break-per-url --max-downloads
    • Fix bug in --alias
    • [cookies] Support firefox container in --cookies-from-browser by bashonly, coletdjnz, pukkandan
    • [downloader/external] Smarter detection of executable
    • [extractor/generic] Don't return JW player without formats
    • [FormatSort] Fix aext for --prefer-free-formats
    • [jsinterp] Various improvements by pukkandan, dirkf, elyse0
    • [cache] Mechanism to invalidate old cache
    • [utils] Add deprecation_warning
    • [utils] Add orderedSet_from_options
    • [utils] Popen: Restore LD_LIBRARY_PATH when using PyInstaller by Lesmiscore
    • [build] make tar should not follow DESTDIR by satan1st
    • [build] Update pyinstaller by shirt-dev
    • [test] Fix test_youtube_signature
    • [cleanup] Misc fixes and cleanup by DavidH-2022, MrRawes, pukkandan
    • [extractor/epoch] Add extractor by tejasa97
    • [extractor/eurosport] Add extractor by HobbyistDev
    • [extractor/IslamChannel] Add extractors by Lesmiscore
    • [extractor/newspicks] Add extractor by Lesmiscore
    • [extractor/triller] Add extractor by bashonly
    • [extractor/VQQ] Add extractors by elyse0
    • [extractor/youtube] Improvements to nsig extraction
    • [extractor/youtube] Fix bug in format sorting
    • [extractor/youtube] Update iOS Innertube clients by SamantazFox
    • [extractor/youtube] Use device-specific user agent by coletdjnz
    • [extractor/youtube] Add --compat-option no-youtube-prefer-utc-upload-date by coletdjnz
    • [extractor/arte] Bug fix by cgrigis
    • [extractor/bilibili] Extract flac with premium account by jackyyf
    • [extractor/BiliBiliSearch] Don't sort by date
    • [extractor/BiliBiliSearch] Fix infinite loop
    • [extractor/bitchute] Mark errors as expected
    • [extractor/crunchyroll:beta] Use anonymous access by tejing1
    • [extractor/huya] Fix stream extraction by ohaiibuzzle
    • [extractor/medaltv] Fix extraction by xenova
    • [extractor/mediaset] Fix embed extraction
    • [extractor/mixcloud] All formats are audio-only
    • [extractor/rtbf] Fix jwt extraction by elyse0
    • [extractor/screencastomatic] Support --video-password by shreyasminocha
    • [extractor/stripchat] Don't modify input URL by dfaker
    • [extractor/uktv] Improve _VALID_URL by dirkf
    • [extractor/vimeo:user] Fix _VALID_URL

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.44 MB)
    yt-dlp.exe(13.11 MB)
    yt-dlp.tar.gz(4.53 MB)
    yt-dlp_linux(29.45 MB)
    yt-dlp_linux.zip(30.20 MB)
    yt-dlp_macos(13.57 MB)
    yt-dlp_macos.zip(14.02 MB)
    yt-dlp_macos_legacy(12.72 MB)
    yt-dlp_min.exe(12.77 MB)
    yt-dlp_win.zip(13.02 MB)
    yt-dlp_x86.exe(10.88 MB)
    _update_spec(77 bytes)
  • 2022.08.19(Aug 19, 2022)

    A description of the various files are in the README


    Changelog

    • Fix bug in --download-archive
    • [jsinterp] Fix for new youtube players and related improvements by dirkf, pukkandan
      • You may need to --rm-cache after update for this to work
    • [phantomjs] Add function to execute JS without a DOM by MinePlayersPE, pukkandan
    • [build] Exclude devscripts from installs by Lesmiscore
    • [cleanup] Misc fixes and cleanup
    • [extractor/youtube] Add fallback to phantomjs for nsig
    • [extractor/youtube] Fix error reporting of "Incomplete data"
    • [extractor/youtube] Improve format sorting for IOS formats
    • [extractor/youtube] Improve signature caching
    • [extractor/instagram] Fix extraction by bashonly, pritam20ps05
    • [extractor/rai] Minor fix by nixxo
    • [extractor/rtbf] Fix stream extractor by elyse0
    • [extractor/SovietsCloset] Fix extractor by ChillingPepper
    • [extractor/zattoo] Fix Zattoo resellers by goggle

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.42 MB)
    yt-dlp.exe(13.10 MB)
    yt-dlp.tar.gz(4.50 MB)
    yt-dlp_linux(29.43 MB)
    yt-dlp_linux.zip(30.18 MB)
    yt-dlp_macos(13.55 MB)
    yt-dlp_macos.zip(14.00 MB)
    yt-dlp_macos_legacy(12.70 MB)
    yt-dlp_min.exe(12.75 MB)
    yt-dlp_win.zip(13.01 MB)
    yt-dlp_x86.exe(10.86 MB)
    _update_spec(80 bytes)
  • 2022.08.14(Aug 14, 2022)

    A description of the various files are in the README


    Changelog

    • Merge youtube-dl: Upto commit/d231b56
    • [jsinterp] Handle new youtube signature functions
    • [jsinterp] Truncate error messages
    • [extractor] Fix format sorting of channels
    • [ffmpeg] Disable avconv unless --prefer-avconv
    • [ffmpeg] Smarter detection of ffprobe filename
    • [patreon] Ignore erroneous media attachments by coletdjnz
    • [postprocessor/embedthumbnail] Detect libatomicparsley.so
    • [ThumbnailsConvertor] Fix conversion after fixup_webp
    • [utils] Fix get_compatible_ext
    • [build] Fix changelog
    • [update] Set executable bit-mask by pukkandan, Lesmiscore
    • [devscripts] Fix import
    • [docs] Consistent use of e.g. by Lesmiscore
    • [cleanup] Misc fixes and cleanup
    • [extractor/moview] Add extractor by HobbyistDev
    • [extractor/parler] Add extractor by palewire
    • [extractor/truth] Add extractor by palewire
    • [extractor/aenetworks] Add formats parameter by jacobtruman
    • [extractor/crunchyroll] Improve _VALID_URLs
    • [extractor/doodstream] Add wf domain by aldoridhoni
    • [extractor/facebook] Add reel support by bashonly
    • [extractor/MLB] New extractor by ischmidt20
    • [extractor/rai] Misc fixes by nixxo
    • [extractor/toggo] Improve _VALID_URL by masta79
    • [extractor/tubitv] Extract additional formats by shirt-dev
    • [extractor/zattoo] Potential fix for resellers

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.42 MB)
    yt-dlp.exe(13.09 MB)
    yt-dlp.tar.gz(4.49 MB)
    yt-dlp_linux(29.42 MB)
    yt-dlp_linux.zip(30.17 MB)
    yt-dlp_macos(13.54 MB)
    yt-dlp_macos.zip(13.99 MB)
    yt-dlp_macos_legacy(12.69 MB)
    yt-dlp_min.exe(12.74 MB)
    yt-dlp_win.zip(13.00 MB)
    yt-dlp_x86.exe(10.86 MB)
    _update_spec(77 bytes)
  • 2022.08.08(Aug 8, 2022)

    A description of the various files are in the README


    Changelog

    • Remove Python 3.6 support
    • Determine merge container better by pukkandan, selfisekai
    • Framework for embed detection by coletdjnz, pukkandan
    • Merge youtube-dl: Upto commit/adb5294
    • --compat-option no-live-chat should disable danmaku
    • Fix misleading DRM message
    • Import ctypes only when necessary
    • Minor bugfixes by pukkandan
    • Reject entire playlists faster with --match-filter by pukkandan
    • Remove filtered entries from -J
    • Standardize retry mechanism by pukkandan
    • Validate --merge-output-format
    • [downloader] Add average speed to final progress line
    • [extractor] Add field audio_channels
    • [extractor] Support multiple archive ids for one video
    • [ffmpeg] Set ffmpeg_location in a contextvar
    • [FFmpegThumbnailsConvertor] Fix conversion from GIF
    • [MetadataParser] Don't set None when the field didn't match
    • [outtmpl] Smarter replacing of unsupported characters by pukkandan
    • [outtmpl] Treat empty values as None in filenames
    • [utils] sanitize_open: Allow any IO stream as stdout
    • [build, devscripts] Add devscript to set a build variant
    • [build] Improve build process by shirt-dev
    • [build] Update pyinstaller
    • [devscripts] Create utils and refactor
    • [docs] Clarify best*
    • [docs] Fix bug report issue template
    • [docs] Fix capitalization in references by christoph-heinrich
    • [cleanup, mhtml] Use imghdr
    • [cleanup, utils] Consolidate known media extensions
    • [cleanup] Misc fixes and cleanup
    • [extractor/angel] Add extractor by AxiosDeminence
    • [extractor/dplay] Add MotorTrend extractor by Sipherdrakon
    • [extractor/harpodeon] Add extractor by eren-kemer
    • [extractor/holodex] Add extractor by pukkandan, sqrtNOT
    • [extractor/kompas] Add extractor by HobbyistDev
    • [extractor/rai] Add raisudtirol extractor by nixxo
    • [extractor/tempo] Add extractor by HobbyistDev
    • [extractor/youtube] Fixes for third party client detection by coletdjnz
    • [extractor/youtube] Add live_status=post_live by lazypete365
    • [extractor/youtube] Extract more format info
    • [extractor/youtube] Parse translated subtitles only when requested
    • [extractor/youtube, extractor/twitch] Allow waiting for channels to become live
    • [extractor/youtube, webvtt] Extract auto-subs from livestream VODs by fstirlitz, pukkandan
    • [extractor/AbemaTVTitle] Implement paging by Lesmiscore
    • [extractor/archiveorg] Improve handling of formats by coletdjnz, pukkandan
    • [extractor/arte] Fix title extraction
    • [extractor/arte] Move to v2 API by fstirlitz, pukkandan
    • [extractor/bbc] Fix news articles by ajj8
    • [extractor/camtasia] Separate into own extractor by coletdjnz
    • [extractor/cloudflarestream] Fix video_id padding by haobinliang
    • [extractor/crunchyroll] Fix conversion of thumbnail from GIF by pukkandan
    • [extractor/crunchyroll] Handle missing metadata correctly by Burve, pukkandan
    • [extractor/crunchyroll:beta] Extract timestamp and fix tests by tejing1
    • [extractor/crunchyroll:beta] Use streams API by tejing1
    • [extractor/doodstream] Support more domains by Galiley
    • [extractor/ESPN] Extract duration by ischmidt20
    • [extractor/FIFA] Change API endpoint by Bricio, yashkc2025
    • [extractor/globo:article] Remove false positives by Bricio
    • [extractor/Go] Extract timestamp by ischmidt20
    • [extractor/hidive] Fix cookie login when netrc is also given by winterbird-code
    • [extractor/html5] Separate into own extractor by coletdjnz, pukkandan
    • [extractor/ina] Improve extractor by elyse0
    • [extractor/NaverNow] Change endpoint by ping
    • [extractor/ninegag] Extract uploader by DjesonPV
    • [extractor/NovaPlay] Fix extractor by Bojidarist
    • [extractor/orf:radio] Rewrite extractors
    • [extractor/patreon] Fix and improve extractors by coletdjnz, pukkandan
    • [extractor/rai] Fix RaiNews extraction by nixxo
    • [extractor/redbee] Unify and update extractors by elyse0
    • [extractor/stripchat] Fix _VALID_URL by freezboltz
    • [extractor/tubi] Exclude playlists from playlist entries by sqrtNOT
    • [extractor/tviplayer] Improve _VALID_URL by HobbyistDev
    • [extractor/twitch] Extract chapters for single chapter VODs by mpeter50
    • [extractor/vgtv] Support tv.vg.no by sqrtNOT
    • [extractor/vidio] Support embed link by HobbyistDev
    • [extractor/vk] Fix extractor by Mehavoid
    • [extractor/WASDTV:record] Fix _VALID_URL
    • [extractor/xfileshare] Add Referer by Galiley
    • [extractor/YahooJapanNews] Fix extractor by Lesmiscore
    • [extractor/yandexmusic] Extract higher quality format
    • [extractor/zee5] Update Device ID by m4tu4g

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.41 MB)
    yt-dlp.exe(13.08 MB)
    yt-dlp.tar.gz(4.48 MB)
    yt-dlp_linux(29.40 MB)
    yt-dlp_linux.zip(30.16 MB)
    yt-dlp_macos(13.53 MB)
    yt-dlp_macos.zip(13.98 MB)
    yt-dlp_macos_legacy(12.68 MB)
    yt-dlp_min.exe(12.73 MB)
    yt-dlp_win.zip(12.99 MB)
    yt-dlp_x86.exe(10.85 MB)
    _update_spec(77 bytes)
  • 2022.07.18(Jul 18, 2022)

    A description of the various files are in the README

    Deprecation Warning

    Support for Python version 3.6 has been deprecated. See https://github.com/yt-dlp/yt-dlp/issues/3764 for more details. You will no longer receive updates on this version! Please update to Python 3.7 or above


    Changelog

    • Allow users to specify encoding in each config files by Lesmiscore
    • Discard infodict from memory if no longer needed
    • Do not allow extractors to return None
    • Do not load system certificates when certifi is used
    • Fix rounding of integers in format table
    • Improve chapter sanitization
    • Skip some fixup if remux/recode is needed by Lesmiscore
    • Support --no-progress for --wait-for-video
    • Fix bug in 612f2be
    • [outtmpl] Add alternate form h for HTML escaping
    • [aes] Add multiple padding modes in CBC by elyse0
    • [extractor/common] Passthrough errnote=False to parsers
    • [extractor/generic] Remove HEAD request
    • [http] Ensure the file handle is always closed
    • [ModifyChapters] Modify duration in infodict
    • [options] Fix aliases to --config-location
    • [utils] Fix get_domain
    • [build] Consistent order for lazy extractors by lamby
    • [build] Fix architecture suffix of executables by odo2063
    • [build] Improve setup.py
    • [update] Do not check _update_spec when up to date
    • [update] Prepare to remove Python 3.6 support
    • [compat] Let PyInstaller detect _legacy module
    • [devscripts/update-formulae] Do not change dependency section
    • [test] Split download tests so they can be more easily run in CI
    • [docs] Improve docstring of download_ranges by FirefoxMetzger
    • [docs] Improve issue templates
    • [build] Fix bug in 6d916fe
    • [cleanup, utils] Refactor parse_codecs
    • [cleanup] Misc fixes and cleanup
    • [extractor/acfun] Add extractors by lockmatrix
    • [extractor/Audiodraft] Add extractors by Ashish0804, fstirlitz
    • [extractor/cellebrite] Add extractor by HobbyistDev
    • [extractor/detik] Add extractor by HobbyistDev
    • [extractor/hytale] Add extractor by llamasblade, pukkandan
    • [extractor/liputan6] Add extractor by HobbyistDev
    • [extractor/mocha] Add extractor by HobbyistDev
    • [extractor/rtl.lu] Add extractor by HobbyistDev
    • [extractor/rtvsl] Add extractor by iw0nderhow, pukkandan
    • [extractor/StarTrek] Add extractor by scy
    • [extractor/syvdk] Add extractor by misaelaguayo
    • [extractor/theholetv] Add extractor by dosy4ev
    • [extractor/TubeTuGraz] Add extractor by Ferdi265, pukkandan
    • [extractor/tviplayer] Add extractor by HobbyistDev
    • [extractor/wetv] Add extractors by elyse0
    • [extractor/wikimedia] Add extractor by EhtishamSabir, pukkandan
    • [extractor/youtube] Fix duration check for post-live manifestless mode
    • [extractor/youtube] More metadata for storyboards by ftk
    • [extractor/bigo] Fix extractor by Lesmiscore
    • [extractor/BiliIntl] Fix subtitle extraction by MinePlayersPE
    • [extractor/crunchyroll] Improve _VALID_URL
    • [extractor/fifa] Fix extractor by ischmidt20
    • [extractor/instagram] Fix post/story extractors by pritam20ps05, pukkandan
    • [extractor/iq] Set language correctly for Korean subtitles
    • [extractor/MangoTV] Fix subtitle languages
    • [extractor/Netverse] Improve playlist extractor by HobbyistDev
    • [extractor/philharmoniedeparis] Fix extractor by sqrtNOT
    • [extractor/Trovo] Fix extractor by u-spec-png
    • [extractor/twitch] Support storyboards for VODs by ftk
    • [extractor/WatchESPN] Improve _VALID_URL by IONECarter, dirkf
    • [extractor/WSJArticle] Fix video id extraction by sqrtNOT
    • [extractor/Ximalaya] Fix extractors by lockmatrix
    • [cleanup, extractor/youtube] Fix tests by sheerluck

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.40 MB)
    yt-dlp.exe(13.40 MB)
    yt-dlp.tar.gz(4.46 MB)
    yt-dlp_linux(29.40 MB)
    yt-dlp_linux.zip(30.01 MB)
    yt-dlp_macos(13.53 MB)
    yt-dlp_macos.zip(13.84 MB)
    yt-dlp_macos_legacy(12.68 MB)
    yt-dlp_min.exe(12.73 MB)
    yt-dlp_win.zip(13.31 MB)
    yt-dlp_x86.exe(11.16 MB)
    _update_spec(77 bytes)
  • 2022.06.29(Jun 29, 2022)

    A description of the various files are in the README

    Deprecation Warning

    Support for Python version 3.6 has been deprecated. See https://github.com/yt-dlp/yt-dlp/issues/3764 for more details. You will receive only one more update on Py3.6! Please update to Python 3.7 or above


    Changelog

    • Fix --downloader native
    • Fix section_end of clips
    • Fix playlist error handling
    • Sanitize chapters
    • [extractor] Fix _create_request when headers is None
    • [extractor] Fix empty BaseURL in MPD
    • [ffmpeg] Write full output to debug on error
    • [hls] Warn user when trying to download live HLS
    • [options] Fix parse_known_args for --
    • [utils] Fix inconsistent default handling between HTTP and HTTPS requests by coletdjnz
    • [build] Draft release until complete
    • [build] Fix release tag commit
    • [build] Standalone x64 builds for MacOS 10.9 by StefanLobbenmeier
    • [update] Ability to set a maximum version for specific variants
    • [compat] Fix compat.WINDOWS_VT_MODE
    • [compat] Remove deprecated functions from core code
    • [compat] Remove more functions
    • [cleanup, extractor] Reduce direct use of _downloader
    • [cleanup] Consistent style for file heads
    • [cleanup] Fix some typos by crazymoose77756
    • [cleanup] Misc fixes and cleanup
    • [extractor/Scrolller] Add extractor by LunarFang416
    • [extractor/ViMP] Add playlist extractor by FestplattenSchnitzel
    • [extractor/fuyin] Add extractor by HobbyistDev
    • [extractor/livestreamfails] Add extractor by nomevi
    • [extractor/premiershiprugby] Add extractor by HobbyistDev
    • [extractor/steam] Add broadcast extractor by HobbyistDev
    • [extractor/youtube] Mark videos as fully watched by Brett824
    • [extractor/CWTV] Extract thumbnail by ischmidt20
    • [extractor/ViMP] Add thumbnail and support more sites by FestplattenSchnitzel
    • [extractor/dropout] Support cookies and login only as needed by pingiun, pukkandan
    • [extractor/ertflix] Improve _VALID_URL
    • [extractor/lbry] Use HEAD request for redirect URL by flashdagger
    • [extractor/mediaset] Improve _VALID_URL
    • [extractor/npr] Implement e50c350 differently
    • [extractor/tennistv] Rewrite extractor by pukkandan, zenerdi0de

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(883 bytes)
    SHA2-512SUMS(1.54 KB)
    yt-dlp(2.37 MB)
    yt-dlp.exe(13.36 MB)
    yt-dlp.tar.gz(4.40 MB)
    yt-dlp_linux(29.33 MB)
    yt-dlp_linux.zip(29.95 MB)
    yt-dlp_macos(13.49 MB)
    yt-dlp_macos.zip(13.81 MB)
    yt-dlp_macos_legacy(12.64 MB)
    yt-dlp_min.exe(12.65 MB)
    yt-dlp_win.zip(13.27 MB)
    yt-dlp_x86.exe(11.12 MB)
    _update_spec(47 bytes)
  • 2022.06.22.1(Jun 22, 2022)

    A description of the various files are in the README


    Changelog

    • Deprecate support for Python 3.6
    • Add option --download-sections to download video partially
      • Chapter regex and time ranges are accepted (Eg: --download-sections *1:10-2:20)
    • Add option --alias
    • Add option --lazy-playlist to process entries as they are received
    • Add option --retry-sleep
    • Add slicing notation to --playlist-items
      • Adds support for negative indices and step
      • Add -I as alias for --playlist-index
      • Makes --playlist-start, --playlist-end, --playlist-reverse, --no-playlist-reverse redundant
    • --config-location - to provide options interactively
    • [build] Add Linux standalone builds
    • [update] Self-restart after update
    • Merge youtube-dl: Upto commit/8a158a9
    • Add --no-update
    • Allow extractors to specify section_start/end for clips
    • Do not print progress to stderr with -q
    • Ensure pre-processor errors do not block video download
    • Fix --simulate --max-downloads
    • Improve error handling of bad config files
    • Return an error code if update fails
    • Fix bug in 3a408f9
    • [ExtractAudio] Allow conditional conversion
    • [ModifyChapters] Fix repeated removal of small segments
    • [ThumbnailsConvertor] Allow conditional conversion
    • [cookies] Detect profiles for cygwin/BSD by moench-tegeder
    • [dash] Show fragment count with --live-from-start by flashdagger
    • [extractor] Add _search_json by coletdjnz, pukkandan
    • [extractor] Add default parameter to _search_json by coletdjnz, pukkandan
    • [extractor] Add dev option --load-pages
    • [extractor] Handle json_ld with multiple @types
    • [extractor] Import _ALL_CLASSES lazily
    • [extractor] Recognize src attribute from HTML5 media elements by Lesmiscore
    • [extractor/generic] Revert e6ae51c123897927eb3c9899923d8ffd31c7f85d
    • [f4m] Bugfix
    • [ffmpeg] Check version lazily
    • [jsinterp] Some optimizations and refactoring by dirkf, pukkandan
    • [utils] Improve performance using functools.cache
    • [utils] Send HTTP/1.1 ALPN extension by coletdjnz
    • [utils] ExtractorError: Fix exc_info
    • [utils] ISO3166Utils: Add EU and AP
    • [utils] Popen: Refactor to use contextmanager
    • [utils] locked_file: Fix for PyPy on Windows
    • [update] Expose more functionality to API
    • [update] Use .git folder to distinguish source/unknown
    • [build] Fix updating homebrew formula
    • [compat] Add functools.cached_property
    • [test] Fix FakeYDL signatures by coletdjnz
    • [docs] Improvements
    • [cleanup, ExtractAudio] Refactor
    • [cleanup, downloader] Refactor report_progress
    • [cleanup, extractor] Refactor _download_... methods
    • [cleanup, extractor] Rename extractors.py to _extractors.py
    • [cleanup, utils] Don't use kwargs for format_field
    • [cleanup, build] Refactor
    • [cleanup, docs] Re-indent "Usage and Options" section
    • [cleanup] Deprecate YoutubeDL.parse_outtmpl
    • [cleanup] Misc fixes and cleanup by Lesmiscore, MrRawes, christoph-heinrich, flashdagger, gamer191, kwconder, pukkandan
    • [extractor/DailyWire] Add extractors by HobbyistDev, pukkandan
    • [extractor/fourzerostudio] Add extractors by Lesmiscore
    • [extractor/GoogleDrive] Add folder extractor by evansp, pukkandan
    • [extractor/MirrorCoUK] Add extractor by LunarFang416, pukkandan
    • [extractor/atscaleconfevent] Add extractor by Ashish0804
    • [extractor/freetv] Add extractor by elyse0
    • [extractor/ixigua] Add Extractor by HobbyistDev
    • [extractor/kicker.de] Add extractor by HobbyistDev
    • [extractor/netverse] Add extractors by HobbyistDev, pukkandan
    • [extractor/playsuisse] Add extractor by pukkandan, sbor23
    • [extractor/substack] Add extractor by elyse0
    • [extractor/youtube] Support downloading clips
    • [extractor/youtube] Add innertube_host and innertube_key extractor args by coletdjnz
    • [extractor/youtube] Add warning for PostLiveDvr
    • [extractor/youtube] Bring back _extract_chapters_from_description
    • [extractor/youtube] Extract comment_count from webpage
    • [extractor/youtube] Fix :ytnotifications extractor by coletdjnz
    • [extractor/youtube] Fix initial player response extraction by coletdjnz, pukkandan
    • [extractor/youtube] Fix live chat for videos with content warning by coletdjnz
    • [extractor/youtube] Make signature extraction non-fatal
    • [extractor/youtube:tab] Detect videoRenderer in _post_thread_continuation_entries
    • [extractor/BiliIntl] Fix metadata extraction
    • [extractor/BiliIntl] Fix subtitle extraction by HobbyistDev
    • [extractor/FranceCulture] Fix extractor by aurelg, pukkandan
    • [extractor/PokemonSoundLibrary] Remove extractor by Lesmiscore
    • [extractor/StreamCZ] Fix extractor by adamanldo, dirkf
    • [extractor/WatchESPN] Support free videos and BAM_DTC by ischmidt20
    • [extractor/animelab] Remove extractor by gamer191
    • [extractor/bloomberg] Change playback endpoint by m4tu4g
    • [extractor/ccc] Extract view_count by vkorablin
    • [extractor/crunchyroll:beta] Fix extractor after API change by Burve, tejing1
    • [extractor/curiositystream] Get auth_token from cookie by mnn
    • [extractor/digitalconcerthall] Fix extractor by ZhymabekRoman
    • [extractor/dropbox] Extract the correct mountComponent
    • [extractor/dropout] Login is not mandatory
    • [extractor/duboku] Fix for hostname change by mozbugbox
    • [extractor/espn] Add WatchESPN extractor by ischmidt20, pukkandan
    • [extractor/expressen] Fix extractor by aejdl
    • [extractor/foxnews] Update embed extraction by elyse0
    • [extractor/ina] Fix extractor by elyse0
    • [extractor/iwara:user] Make paging better by Lesmiscore
    • [extractor/jwplatform] Look for data-video-jw-id
    • [extractor/lbry] Update livestream API by flashdagger
    • [extractor/mediaset] Improve _VALID_URL
    • [extractor/naver] Add navernow extractor by ping
    • [extractor/niconico:series] Fix extractor by sqrtNOT
    • [extractor/npr] Use stream url from json-ld by r5d
    • [extractor/pornhub] Extract uploader_id field by Lesmiscore
    • [extractor/radiofrance] Add more radios by bubbleguuum
    • [extractor/rumble] Detect JS embed
    • [extractor/rumble] Extract subtitles by fstirlitz
    • [extractor/southpark] Add southpark.lat extractor by darkxex
    • [extractor/spotify:show] Fix extractor
    • [extractor/tiktok] Detect embeds
    • [extractor/tiktok] Extract SIGI_STATE by dirkf, pukkandan, sulyi
    • [extractor/tver] Fix extractor by Lesmiscore
    • [extractor/vevo] Fix extractor by Lesmiscore
    • [extractor/yahoo:gyao] Fix extractor
    • [extractor/zattoo] Fix live streams by miseran
    • [extractor/zdf] Improve format sorting by elyse0

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(797 bytes)
    SHA2-512SUMS(1.40 KB)
    yt-dlp(2.37 MB)
    yt-dlp.exe(13.28 MB)
    yt-dlp.tar.gz(4.39 MB)
    yt-dlp_linux(29.06 MB)
    yt-dlp_linux.zip(29.67 MB)
    yt-dlp_macos(13.40 MB)
    yt-dlp_macos.zip(13.72 MB)
    yt-dlp_min.exe(12.64 MB)
    yt-dlp_win.zip(13.19 MB)
    yt-dlp_x86.exe(11.05 MB)
  • 2022.06.22(Jun 22, 2022)

    A description of the various files are in the README


    Changelog

    • Deprecate support for Python 3.6
    • Add option --download-sections to download video partially
      • Chapter regex and time ranges are accepted (Eg: --download-sections *1:10-2:20)
    • Add option --alias
    • Add option --lazy-playlist to process entries as they are received
    • Add option --retry-sleep
    • Add slicing notation to --playlist-items
      • Adds support for negative indices and step
      • Add -I as alias for --playlist-index
      • Makes --playlist-start, --playlist-end, --playlist-reverse, --no-playlist-reverse redundant
    • --config-location - to provide options interactively
    • [build] Add Linux standalone builds
    • [update] Self-restart after update
    • Merge youtube-dl: Upto commit/8a158a9
    • Add --no-update
    • Allow extractors to specify section_start/end for clips
    • Do not print progress to stderr with -q
    • Ensure pre-processor errors do not block video download
    • Fix --simulate --max-downloads
    • Improve error handling of bad config files
    • Return an error code if update fails
    • Fix bug in 3a408f9
    • [ExtractAudio] Allow conditional conversion
    • [ModifyChapters] Fix repeated removal of small segments
    • [ThumbnailsConvertor] Allow conditional conversion
    • [cookies] Detect profiles for cygwin/BSD by moench-tegeder
    • [dash] Show fragment count with --live-from-start by flashdagger
    • [extractor] Add _search_json by coletdjnz, pukkandan
    • [extractor] Add default parameter to _search_json by coletdjnz, pukkandan
    • [extractor] Add dev option --load-pages
    • [extractor] Handle json_ld with multiple @types
    • [extractor] Import _ALL_CLASSES lazily
    • [extractor] Recognize src attribute from HTML5 media elements by Lesmiscore
    • [extractor/generic] Revert e6ae51c123897927eb3c9899923d8ffd31c7f85d
    • [f4m] Bugfix
    • [ffmpeg] Check version lazily
    • [jsinterp] Some optimizations and refactoring by dirkf, pukkandan
    • [utils] Improve performance using functools.cache
    • [utils] Send HTTP/1.1 ALPN extension by coletdjnz
    • [utils] ExtractorError: Fix exc_info
    • [utils] ISO3166Utils: Add EU and AP
    • [utils] Popen: Refactor to use contextmanager
    • [utils] locked_file: Fix for PyPy on Windows
    • [update] Expose more functionality to API
    • [update] Use .git folder to distinguish source/unknown
    • [compat] Add functools.cached_property
    • [test] Fix FakeYDL signatures by coletdjnz
    • [docs] Improvements
    • [cleanup, ExtractAudio] Refactor
    • [cleanup, downloader] Refactor report_progress
    • [cleanup, extractor] Refactor _download_... methods
    • [cleanup, extractor] Rename extractors.py to _extractors.py
    • [cleanup, utils] Don't use kwargs for format_field
    • [cleanup, build] Refactor
    • [cleanup, docs] Re-indent "Usage and Options" section
    • [cleanup] Deprecate YoutubeDL.parse_outtmpl
    • [cleanup] Misc fixes and cleanup by Lesmiscore, MrRawes, christoph-heinrich, flashdagger, gamer191, kwconder, pukkandan
    • [extractor/DailyWire] Add extractors by HobbyistDev, pukkandan
    • [extractor/fourzerostudio] Add extractors by Lesmiscore
    • [extractor/GoogleDrive] Add folder extractor by evansp, pukkandan
    • [extractor/MirrorCoUK] Add extractor by LunarFang416, pukkandan
    • [extractor/atscaleconfevent] Add extractor by Ashish0804
    • [extractor/freetv] Add extractor by elyse0
    • [extractor/ixigua] Add Extractor by HobbyistDev
    • [extractor/kicker.de] Add extractor by HobbyistDev
    • [extractor/netverse] Add extractors by HobbyistDev, pukkandan
    • [extractor/playsuisse] Add extractor by pukkandan, sbor23
    • [extractor/substack] Add extractor by elyse0
    • [extractor/youtube] Support downloading clips
    • [extractor/youtube] Add innertube_host and innertube_key extractor args by coletdjnz
    • [extractor/youtube] Add warning for PostLiveDvr
    • [extractor/youtube] Bring back _extract_chapters_from_description
    • [extractor/youtube] Extract comment_count from webpage
    • [extractor/youtube] Fix :ytnotifications extractor by coletdjnz
    • [extractor/youtube] Fix initial player response extraction by coletdjnz, pukkandan
    • [extractor/youtube] Fix live chat for videos with content warning by coletdjnz
    • [extractor/youtube] Make signature extraction non-fatal
    • [extractor/youtube:tab] Detect videoRenderer in _post_thread_continuation_entries
    • [extractor/BiliIntl] Fix metadata extraction
    • [extractor/BiliIntl] Fix subtitle extraction by HobbyistDev
    • [extractor/FranceCulture] Fix extractor by aurelg, pukkandan
    • [extractor/PokemonSoundLibrary] Remove extractor by Lesmiscore
    • [extractor/StreamCZ] Fix extractor by adamanldo, dirkf
    • [extractor/WatchESPN] Support free videos and BAM_DTC by ischmidt20
    • [extractor/animelab] Remove extractor by gamer191
    • [extractor/bloomberg] Change playback endpoint by m4tu4g
    • [extractor/ccc] Extract view_count by vkorablin
    • [extractor/crunchyroll:beta] Fix extractor after API change by Burve, tejing1
    • [extractor/curiositystream] Get auth_token from cookie by mnn
    • [extractor/digitalconcerthall] Fix extractor by ZhymabekRoman
    • [extractor/dropbox] Extract the correct mountComponent
    • [extractor/dropout] Login is not mandatory
    • [extractor/duboku] Fix for hostname change by mozbugbox
    • [extractor/espn] Add WatchESPN extractor by ischmidt20, pukkandan
    • [extractor/expressen] Fix extractor by aejdl
    • [extractor/foxnews] Update embed extraction by elyse0
    • [extractor/ina] Fix extractor by elyse0
    • [extractor/iwara:user] Make paging better by Lesmiscore
    • [extractor/jwplatform] Look for data-video-jw-id
    • [extractor/lbry] Update livestream API by flashdagger
    • [extractor/mediaset] Improve _VALID_URL
    • [extractor/naver] Add navernow extractor by ping
    • [extractor/niconico:series] Fix extractor by sqrtNOT
    • [extractor/npr] Use stream url from json-ld by r5d
    • [extractor/pornhub] Extract uploader_id field by Lesmiscore
    • [extractor/radiofrance] Add more radios by bubbleguuum
    • [extractor/rumble] Detect JS embed
    • [extractor/rumble] Extract subtitles by fstirlitz
    • [extractor/southpark] Add southpark.lat extractor by darkxex
    • [extractor/spotify:show] Fix extractor
    • [extractor/tiktok] Detect embeds
    • [extractor/tiktok] Extract SIGI_STATE by dirkf, pukkandan, sulyi
    • [extractor/tver] Fix extractor by Lesmiscore
    • [extractor/vevo] Fix extractor by Lesmiscore
    • [extractor/yahoo:gyao] Fix extractor
    • [extractor/zattoo] Fix live streams by miseran
    • [extractor/zdf] Improve format sorting by elyse0

    Source code(tar.gz)
    Source code(zip)
    yt-dlp(2.37 MB)
    yt-dlp.exe(13.28 MB)
    yt-dlp.tar.gz(4.39 MB)
    yt-dlp_linux(29.06 MB)
    yt-dlp_linux.zip(29.67 MB)
    yt-dlp_macos(13.40 MB)
    yt-dlp_macos.zip(13.72 MB)
    yt-dlp_min.exe(12.64 MB)
    yt-dlp_win.zip(13.19 MB)
    yt-dlp_x86.exe(11.05 MB)
  • 2022.05.18(May 18, 2022)

    A description of the various files are in the README


    Changelog:

    • Add support for SSL client certificate authentication by coletdjnz, dirkf
      • Adds --client-certificate, --client-certificate-key, --client-certificate-password
    • Add --match-filter - to interactively ask for each video
    • --max-downloads should obey --break-per-input
    • Allow use of weaker ciphers with --legacy-server-connect
    • Don't imply -s for later stages of -O
    • Fix --date today
    • Fix --skip-unavailable-fragments
    • Fix color in -q -F
    • Fix redirect HTTP method handling by coletdjnz
    • Improve --clean-infojson
    • Remove warning for videos with an empty title
    • Run FFmpegFixupM3u8PP for live-streams if needed
    • Show name of downloader in verbose log
    • [cookies] Allow cookiefile to be a text stream
    • [cookies] Report progress when importing cookies
    • [downloader/ffmpeg] Specify headers for each URL by elyse0
    • [fragment] Do not change chunk-size when --test
    • [fragment] Make single thread download work for --live-from-start by Lesmiscore
    • [hls] Fix byte_range for EXT-X-MAP fragment by fstirlitz
    • [http] Fix retrying on read timeout by coletdjnz
    • [ffmpeg] Fix features detection
    • [EmbedSubtitle] Enable for more video extensions
    • [EmbedThumbnail] Disable thumbnail conversion for mkv by evansp
    • [EmbedThumbnail] Do not obey -k
    • [EmbedThumbnail] Do not remove id3v1 tags
    • [FFmpegMetadata] Remove \0 from metadata
    • [FFmpegMetadata] Remove filename from attached info-json
    • [FixupM3u8] Obey --hls-prefer-mpegts
    • [Sponsorblock] Don't crash when duration is unknown
    • [XAttrMetadata] Refactor and document dependencies
    • [extractor] Document netrc machines
    • [extractor] Update manifest_urls after redirect by elyse0
    • [extractor] Update dash manifest_url after redirects by elyse0
    • [extractor] Use classmethod/property where possible
    • [generic] Refactor _extract_rss
    • [utils] is_html: Handle double BOM
    • [utils] locked_file: Ignore illegal seek on truncate by jakeogh
    • [utils] sanitize_path: Fix when path is empty string
    • [utils] write_string: Workaround newline issue in conhost
    • [utils] certifi: Make sure the pem file exists
    • [utils] Fix WebSocketsWrapper
    • [utils] locked_file: Do not give executable bits for newly created files by Lesmiscore
    • [utils] YoutubeDLCookieJar: Detect and reject JSON file by Lesmiscore
    • [test] Convert warnings into errors and fix some existing warnings by fstirlitz
    • [dependencies] Create module with all dependency imports
    • [compat] Split into sub-modules by fstirlitz, pukkandan
    • [compat] Implement compat.imghdr
    • [build] Add make uninstall by MrRawes
    • [build] Avoid use of install -D
    • [build] Fix Makefile by putnam
    • [build] Fix --onedir on macOS
    • [build] Add more test-runners
    • [cleanup] Deprecate some compat vars by fstirlitz, pukkandan
    • [cleanup] Remove unused code paths, extractors, scripts and tests by fstirlitz
    • [cleanup] Upgrade syntax (pyupgrade) and sort imports (isort)
    • [cleanup, docs, build] Misc fixes
    • [BilibiliLive] Add extractor by HE7086, pukkandan
    • [Fifa] Add Extractor by Bricio
    • [goodgame] Add extractor by nevack
    • [gronkh] Add playlist extractors by hatienl0i261299
    • [icareus] Add extractor by tpikonen, pukkandan
    • [iwara] Add playlist extractors by i6t
    • [Likee] Add extractor by hatienl0i261299
    • [masters] Add extractor by m4tu4g
    • [nebula] Add support for subscriptions by hheimbuerger
    • [Podchaser] Add extractors by connercsbn
    • [rokfin:search] Add extractor by P-reducible, pukkandan
    • [youtube] Add :ytnotifications extractor by krichbanana
    • [youtube] Add YoutubeStoriesIE (ytstories:<channel UCID>) by coletdjnz
    • [ZingMp3] Add chart and user extractors by hatienl0i261299
    • [adn] Update AES key by elyse0
    • [adobepass] Allow cookies for authenticating MSO
    • [bandcamp] Exclude merch links by Yipten
    • [chingari] Fix archiving and tests
    • [DRTV] Improve _VALID_URL by vertan
    • [facebook] Improve thumbnail extraction by Wikidepia
    • [fc2] Stop heatbeating once FFmpeg finishes by Lesmiscore
    • [Gofile] Fix extraction and support password-protected links by mehq
    • [hotstar, cleanup] Refactor extractors
    • [InfoQ] Don't fail on missing audio format by evansp
    • [Jamendo] Extract more metadata by evansp
    • [kaltura] Update API calls by flashdagger
    • [KhanAcademy] Fix extractor by rand-net
    • [LCI] Fix extractor by MarwenDallel
    • [lrt] Support livestreams by GiedriusS
    • [niconico] Set expected_protocol to a public field
    • [Niconico] Support 2FA by ekangmonyet
    • [Olympics] Fix format extension
    • [openrec:movie] Enable fallback for /movie/ URLs
    • [PearVideo] Add fallback for formats by hatienl0i261299
    • [radiko] Fix extractor by Lesmiscore
    • [rai] Add release_year
    • [reddit] Prevent infinite loop
    • [rokfin] Implement login by P-reducible, pukkandan
    • [ruutu] Support hs.fi embeds by tpikonen, pukkandan
    • [spotify] Detect iframe embeds by fstirlitz
    • [telegram] Fix metadata extraction
    • [tmz, cleanup] Update tests by diegorodriguezv
    • [toggo] Fix _VALID_URL by ca-za
    • [trovo] Update to new API by nyuszika7h
    • [TVer] Improve extraction by Lesmiscore
    • [twitcasting] Pass headers for each formats by Lesmiscore
    • [VideocampusSachsen] Improve extractor by FestplattenSchnitzel
    • [vimeo] Fix extractors
    • [wat] Fix extraction of multi-language videos and subtitles by elyse0
    • [wistia] Fix _VALID_URL by dirkf
    • [youtube, cleanup] Minor refactoring by coletdjnz, pukkandan
    • [youtube] Added piped instance urls by JordanWeatherby
    • [youtube] Deprioritize auto-generated thumbnails
    • [youtube] Deprioritize format 22 (often damaged)
    • [youtube] Fix episode metadata extraction
    • [zee5] Fix extractor by Ashish0804
    • [zingmp3, cleanup] Refactor extractors
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.34 MB)
    yt-dlp.exe(13.23 MB)
    yt-dlp.tar.gz(4.33 MB)
    yt-dlp_macos(13.68 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.60 MB)
    yt-dlp_win.zip(13.14 MB)
    yt-dlp_x86.exe(11.00 MB)
  • 2022.04.08(Apr 8, 2022)

    A description of the various files are in the README


    Changelog:

    • Use certificates from certifi if installed by coletdjnz
    • Treat multiple --match-filters as OR
    • File locking improvevemnts:
      • Do not lock downloading file on Windows
      • Do not prevent download if locking is unsupported
      • Do not truncate files before locking by jakeogh, pukkandan
      • Fix non-blocking non-exclusive lock
    • De-prioritize automatic-subtitles when no --sub-lang is given
    • Exit after --dump-user-agent
    • Fallback to video-only format when selecting by extension
    • Fix --abort-on-error for subtitles
    • Fix --no-overwrite for playlist infojson
    • Fix --print with --ignore-no-formats when url is None by flashdagger
    • Fix --sleep-interval
    • Fix --throttled-rate
    • Fix autonumber
    • Fix case of http_headers
    • Fix filepath sanitization in --print-to-file
    • Handle float in --wait-for-video
    • Ignore mhtml formats from -f mergeall
    • Ignore format-specific fields in initial pass of --match-filter
    • Protect stdout from unexpected progress and console-title
    • Remove Accept-Encoding header from std_headers by coletdjnz
    • Remove incorrect warning for --dateafter
    • Show warning when all media formats have DRM
    • [downloader] Fix invocation of HttpieFD
    • [http] Fix #3215
    • [http] Reject broken range before request by Lesmiscore, Jules-A, pukkandan
    • [fragment] Read downloaded fragments only when needed by Lesmiscore
    • [http] Retry on more errors by coletdjnz
    • [mhtml] Fix fragments with absolute urls by coletdjnz
    • [extractor] Add _perform_login function
    • [extractor] Allow control characters inside json
    • [extractor] Support merging subtitles with data by coletdjnz
    • [generic] Extract subtitles from video.js by Lesmiscore
    • [ffmpeg] Cache version data
    • [FFmpegConcat] Ensure final directory exists
    • [FfmpegMetadata] Write id3v1 tags
    • [FFmpegVideoConvertor] Add more formats to --remux-video
    • [FFmpegVideoConvertor] Ensure all streams are copied
    • [MetadataParser] Validate outtmpl early
    • [outtmpl] Fix replacement/default when used with alternate
    • [outtmpl] Limit changes during sanitization
    • [phantomjs] Fix bug
    • [test] Add test_locked_file
    • [utils] format_decimal_suffix: Fix for very large numbers by s0u1h
    • [utils] traverse_obj: Allow filtering by value
    • [utils] Add filter_dict, get_first, try_call
    • [utils] ExtractorError: Fix for older python versions
    • [utils] WebSocketsWrapper: Allow omitting __enter__ invocation by Lesmiscore
    • [docs] Add an .editorconfig file by fstirlitz
    • [docs] Clarify the exact BSD license of dependencies by MrRawes
    • [docs] Minor improvements by pukkandan, cffswb, danielyli
    • [docs] Remove readthedocs
    • [build] Add requirements.txt to pip distributions
    • [cleanup, postprocessor] Create _download_json
    • [cleanup, vimeo] Fix tests
    • [cleanup] Misc fixes and minor cleanup
    • [cleanup] Use _html_extract_title
    • [AfreecaTV] Add AfreecaTVUserIE by hatienl0i261299
    • [arte] Add format_note to m3u8 formats
    • [azmedien] Add TVO Online to supported hosts by 1-Byte
    • [BanBye] Add extractor by mehq
    • [bilibili] Fix extraction of title with quotes by dzek69
    • [Craftsy] Add extractor by Bricio
    • [Cybrary] Add extractor by aaearon
    • [Huya] Add extractor by hatienl0i261299
    • [ITProTV] Add extractor by aaearon
    • [Jable] Add extractors by mehq
    • [LastFM] Add extractors by mehq
    • [Moviepilot] Add extractor by panatexxa
    • [panopto] Add extractors by coletdjnz, kmark
    • [PokemonSoundLibrary] Add extractor by Lesmiscore
    • [WasdTV] Add extractor by un-def, hatienl0i261299
    • [adobepass] Fix Suddenlink MSO by CplPwnies
    • [afreecatv] Match new vod url by wlritchi
    • [AZMedien] Support tv.telezueri.ch by goggle
    • [BiliIntl] Support user-generated videos by wlritchi
    • [BRMediathek] Fix VALID_URL
    • [crunchyroll:playlist] Implement beta API by tejing1
    • [crunchyroll] Fix inheritance
    • [daftsex] Fix extractor by Soebb
    • [dailymotion] Support geo.dailymotion.com by hatienl0i261299
    • [ellentube] Extract subtitles from manifest
    • [elonet] Rewrite extractor by Fam0r, pukkandan
    • [fptplay] Fix metadata extraction by hatienl0i261299
    • [FranceCulture] Support playlists by bohwaz
    • [go, viu] Extract subtitles from the m3u8 manifest by fstirlitz
    • [Imdb] Improve extractor by hatienl0i261299
    • [MangoTV] Improve extractor by hatienl0i261299
    • [Nebula] Fix bug in 52efa4b31200119adaa8acf33e50b84fcb6948f0
    • [niconico] Fix extraction of thumbnails and uploader (#3266)
    • [niconico] Rewrite NiconicoIE by Lesmiscore
    • [nitter] Minor fixes and update instance list by foghawk
    • [NRK] Extract timestamp by hatienl0i261299
    • [openrec] Download archived livestreams by Lesmiscore
    • [openrec] Refactor extractors by Lesmiscore
    • [panopto] Improve subtitle extraction and support slides by coletdjnz
    • [ParamountPlus, CBS] Change VALID_URL by Sipherdrakon
    • [ParamountPlusSeries] Support multiple pages by dodrian
    • [Piapro] Extract description with break lines by Lesmiscore
    • [rai] Fix extraction of http formas by nixxo
    • [rumble] unescape title
    • [RUTV] Fix format sorting by Lesmiscore
    • [ruutu] Detect embeds by tpikonen
    • [tenplay] Improve extractor by aarubui
    • [TikTok] Fix URLs with user id by hatienl0i261299
    • [TikTokVM] Fix redirect to user URL
    • [TVer] Fix extractor by Lesmiscore
    • [TVer] Support landing page by vvto33
    • [twitcasting] Don't return multi_video for archive with single hls manifest by Lesmiscore
    • [veo] Fix _VALID_URL
    • [Veo] Fix extractor by i6t
    • [viki] Don't attempt to modify URLs with signature by nyuszika7h
    • [viu] Fix bypass for preview by zackmark29
    • [viu] Fixed extractor by zackmark29, pukkandan
    • [web.archive:youtube] Make CDX API requests non-fatal by coletdjnz
    • [wget] Fix proxy by kikuyan, coletdjnz
    • [xnxx] Add xnxx3.com by rozari0
    • [youtube] Add new age-gate bypass by zerodytrash, pukkandan
    • [youtube] Add extractor-arg to skip auto-translated subs
    • [youtube] Avoid false positives when detecting damaged formats
    • [youtube] Detect DRM better by shirt
    • [youtube] Fix auto-translated automatic captions
    • [youtube] Fix pagination of membership tab
    • [youtube] Fix uploader for collaborative playlists by coletdjnz
    • [youtube] Improve video upload date handling by coletdjnz
    • [youtube:api] Prefer minified JSON response by coletdjnz
    • [youtube:search] Support hashtag entries by coletdjnz
    • [youtube:tab] Fix duration extraction for shorts by coletdjnz
    • [youtube:tab] Minor improvements
    • [youtube:tab] Return shorts url if video is a short by coletdjnz
    • [Zattoo] Fix extractors by goggle
    • [Zingmp3] Fix signature by hatienl0i261299
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.33 MB)
    yt-dlp.exe(13.20 MB)
    yt-dlp.tar.gz(4.31 MB)
    yt-dlp_macos(13.65 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.57 MB)
    yt-dlp_win.zip(13.11 MB)
    yt-dlp_x86.exe(10.98 MB)
  • 2022.03.08(Mar 8, 2022)

    A description of the various files are in the README


    Changelog:

    • Merge youtube-dl: Upto commit/6508688 (except NDR)
    • Add regex operator and quoting to format filters by lukasfink1
    • Add brotli content-encoding support by coletdjnz
    • Add pre-processor stage after_filter
    • Better error message when no --live-from-start format
    • Create necessary directories for --print-to-file
    • Fill more fields for playlists by Lesmiscore
    • Fix -all for --sub-langs
    • Fix doubling of video_id in ExtractorError
    • Fix for when stdout/stderr encoding is None
    • Handle negative duration from extractor
    • Implement --add-header without modifying std_headers
    • Obey --abort-on-error for "ffmpeg not installed"
    • Set webpage_url_... from webpage_url and not input URL
    • Tolerate failure to --write-link due to unknown URL
    • [aria2c] Add --http-accept-gzip=true
    • [build] Update pyinstaller to 4.10 by shirt-dev
    • [cookies] Update MacOS12 Cookies.binarycookies location by mdpauley
    • [devscripts] Improve prepare_manpage
    • [downloader] Do not use aria2c for non-native m3u8
    • [downloader] Obey --file-access-retries when deleting/renaming by ehoogeveen-medweb
    • [extractor] Allow http_headers to be specified for thumbnails
    • [extractor] Extract subtitles from manifests for vimeo, globo, kaltura, svt by fstirlitz
    • [extractor] Fix for manifests without period duration by dirkf, pukkandan
    • [extractor] Support --mark-watched without _NETRC_MACHINE by coletdjnz
    • [FFmpegConcat] Abort on --simulate
    • [FormatSort] Consider acodec=ogg as vorbis
    • [fragment] Fix bugs around resuming with Range by Lesmiscore
    • [fragment] Improve --live-from-start for YouTube livestreams by Lesmiscore
    • [generic] Pass referer to extracted formats
    • [generic] Set rss guid as video id by Bricio
    • [options] Better ambiguous option resolution
    • [options] Rename --clean-infojson to --clean-info-json
    • [SponsorBlock] Fixes for highlight and "full video labels" by nihil-admirari
    • [Sponsorblock] minor fixes by nihil-admirari
    • [utils] Better traceback for ExtractorError
    • [utils] Fix file locking for AOSP by jakeogh
    • [utils] Improve file locking
    • [utils] OnDemandPagedList: Do not download pages after error
    • [utils] render_table: Fix character calculation for removing extra gap by Lesmiscore
    • [utils] Use locked_file for sanitize_open by jakeogh
    • [utils] Validate DateRange input
    • [utils] WebSockets wrapper for non-async functions by Lesmiscore
    • [cleanup] Don't pass protocol to _extract_m3u8_formats for live videos
    • [cleanup] Remove extractors for some dead websites by marieell
    • [cleanup, docs] Misc cleanup
    • [AbemaTV] Add extractors by Lesmiscore
    • [adobepass] Add Suddenlink MSO by CplPwnies
    • [ant1newsgr] Add extractor by zmousm
    • [bigo] Add extractor by Lesmiscore
    • [Caltrans] Add extractor by Bricio
    • [daystar] Add extractor by hatienl0i261299
    • [fc2:live] Add extractor by Lesmiscore
    • [fptplay] Add extractor by hatienl0i261299
    • [murrtube] Add extractor by cyberfox1691
    • [nfb] Add extractor by ofkz
    • [niconico] Add playlist extractors and refactor by Lesmiscore
    • [peekvids] Add extractor by schn0sch
    • [piapro] Add extractor by pycabbage, Lesmiscore
    • [rokfin] Add extractor by P-reducible, pukkandan
    • [rokfin] Add stack and channel extractors by P-reducible, pukkandan
    • [ruv.is] Add extractor by iw0nderhow
    • [telegram] Add extractor by hatienl0i261299
    • [VideocampusSachsen] Add extractors by FestplattenSchnitzel
    • [xinpianchang] Add extractor by hatienl0i261299
    • [abc] Support 1080p by Ronnnny
    • [afreecatv] Support password-protected livestreams by wlritchi
    • [ard] Fix valid URL
    • [ATVAt] Detect geo-restriction by marieell
    • [bandcamp] Detect acodec
    • [bandcamp] Fix user URLs by lyz-code
    • [bbc] Fix extraction of news articles by ajj8
    • [beeg] Fix extractor by Bricio
    • [bigo] Fix extractor to not to use form_params
    • [Bilibili] Pass referer for all formats by blackgear
    • [Biqle] Fix extractor by Bricio
    • [ccma] Fix timestamp parsing by nyuszika7h
    • [crunchyroll] Better error reporting on login failure by tejing1
    • [cspan] Support of C-Span congress videos by Grabien
    • [dropbox] fix regex by zenerdi0de
    • [fc2] Fix extraction by Lesmiscore
    • [fujitv] Extract resolution for free sources by YuenSzeHong
    • [Gettr] Add GettrStreamingIE by i6t
    • [Gettr] Fix formats order by i6t
    • [Gettr] Improve extractor by i6t
    • [globo] Expand valid URL by Bricio
    • [lbry] Fix --ignore-no-formats-error
    • [manyvids] Extract uploader by regarten
    • [mildom] Fix linter
    • [mildom] Rework extractors by Lesmiscore
    • [mirrativ] Cleanup extractor code by Lesmiscore
    • [nhk] Add support for NHK for School by Lesmiscore
    • [niconico:tag] Add support for searching tags
    • [nrk] Add fallback API
    • [peekvids] Use JSON-LD by schn0sch
    • [peertube] Add media.fsfe.org by mxmehl
    • [rtvs] Fix extractor by Bricio
    • [spiegel] Fix _VALID_URL
    • [ThumbnailsConvertor] Support webp
    • [tiktok] Fix vm.tiktok/vt.tiktok URLs
    • [tubitv] Fix/improve TV series extraction by bbepis
    • [tumblr] Fix extractor by foghawk
    • [twitcasting] Add fallback for finding running live by Lesmiscore
    • [TwitCasting] Check for password protection by Lesmiscore
    • [twitcasting] Fix extraction by Lesmiscore
    • [twitch] Fix field name of view_count
    • [twitter] Fix for private videos by iphoting
    • [washingtonpost] Fix extractor by Bricio
    • [youtube:tab] Add approximate_date extractor-arg
    • [youtube:tab] Follow redirect to regional channel by coletdjnz
    • [youtube:tab] Reject webpage data if redirected to home page
    • [youtube] De-prioritize potentially damaged formats
    • [youtube] Differentiate descriptive audio by language code
    • [youtube] Ensure subtitle urls are absolute by coletdjnz
    • [youtube] Escape possible $ in _extract_n_function_name regex by Lesmiscore
    • [youtube] Fix automatic captions
    • [youtube] Fix n-sig extraction for phone player JS by MinePlayersPE
    • [youtube] Further de-prioritize 3gp format
    • [youtube] Label original auto-subs
    • [youtube] Prefer UTC upload date for videos by coletdjnz
    • [zaq1] Remove dead extractor by marieell
    • [zee5] Support web-series by Aniruddh-J
    • [zingmp3] Fix extractor by hatienl0i261299
    • [zoom] Add support for screen cast by Mipsters
    Source code(tar.gz)
    Source code(zip)
    yt-dlp(2.30 MB)
    yt-dlp.exe(12.97 MB)
    yt-dlp.tar.gz(4.24 MB)
    yt-dlp_macos(13.46 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.79 MB)
    yt-dlp_win.zip(12.88 MB)
    yt-dlp_x86.exe(10.79 MB)
  • 2022.02.04(Feb 4, 2022)

    A description of the various files are in the README


    Changelog:

    • [youtube:search] Fix extractor by coletdjnz
    • [youtube:search] Add tests
    • [twitcasting] Enforce UTF-8 for POST payload by Lesmiscore
    • [mediaset] Fix extractor by nixxo
    • [websocket] Make syntax error in websockets module non-fatal
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.26 MB)
    yt-dlp.exe(12.37 MB)
    yt-dlp.tar.gz(4.16 MB)
    yt-dlp_macos(12.62 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.57 MB)
    yt-dlp_win.zip(12.28 MB)
    yt-dlp_x86.exe(10.26 MB)
  • 2022.02.03(Feb 3, 2022)

    A description of the various files are in the README


    Changelog:

    • Merge youtube-dl: Upto commit/78ce962
    • Add option --print-to-file
    • Make nested --config-locations relative to parent file
    • Ensure _type is present in info.json
    • Fix --compat-options list-formats
    • Fix/improve InAdvancePagedList
    • [downloader/ffmpeg] Handle unknown formats better
    • [outtmpl] Handle -o "" better
    • [outtmpl] Handle hard-coded file extension better
    • [extractor] Add convinience function _yes_playlist
    • [extractor] Allow non-fatal title extraction
    • [extractor] Extract video inside Article json_ld
    • [generic] Allow further processing of json_ld URL
    • [cookies] Fix keyring selection for unsupported desktops
    • [utils] Strip double spaces in clean_html by dirkf
    • [aes] Add unpad_pkcs7
    • [test] Fix test_youtube_playlist_noplaylist
    • [docs,cleanup] Misc cleanup
    • [dplay] Add extractors for site changes by Sipherdrakon
    • [ertgr] Add extractors by zmousm, dirkf
    • [Musicdex] Add extractors by Ashish0804
    • [YandexVideoPreview] Add extractor by KiberInfinity
    • [youtube] Add extractor YoutubeMusicSearchURLIE
    • [archive.org] Ignore unnecessary files
    • [Bilibili] Add 8k support by u-spec-png
    • [bilibili] Fix extractor, make anthology title non-fatal
    • [CAM4] Add thumbnail extraction by alerikaisattera
    • [cctv] De-prioritize sample format
    • [crunchyroll:beta] Add cookies support by tejing1
    • [crunchyroll] Fix login by tejing1
    • [doodstream] Fix extractor
    • [fc2] Fix extraction by Lesmiscore
    • [FFmpegConcat] Abort on --skip-download and download errors
    • [Fujitv] Extract metadata and support premium by YuenSzeHong
    • [globo] Fix extractor by Bricio
    • [glomex] Simplify embed detection
    • [GoogleSearch] Fix extractor
    • [Instagram] Fix extraction when logged in by MinePlayersPE
    • [iq.com] Add VIP support by MinePlayersPE
    • [mildom] Fix extractor by lazypete365
    • [MySpass] Fix video url processing by trassshhub
    • [Odnoklassniki] Improve embedded players extraction by KiberInfinity
    • [orf:tvthek] Lazy playlist extraction and obey --no-playlist
    • [Pladform] Fix redirection to external player by KiberInfinity
    • [ThisOldHouse] Improve Premium URL check by Ashish0804
    • [TikTok] Iterate through app versions by MinePlayersPE
    • [tumblr] Fix 403 errors and handle vimeo embeds by foghawk
    • [viki] Fix "Bad request" for manifest by nyuszika7h
    • [Vimm] add recording extractor by alerikaisattera
    • [web.archive:youtube] Add ytarchive: prefix and misc cleanup
    • [youtube:api] Do not use seek when reading HTTPError response by coletdjnz
    • [youtube] Fix n-sig for player e06dea74
    • [youtube, cleanup] Misc fixes and cleanup

    Release created in the middle of the night so people will stop posting duplicates of https://github.com/yt-dlp/yt-dlp/issues/2569 https://github.com/yt-dlp/yt-dlp/issues/2575 https://github.com/yt-dlp/yt-dlp/issues/2576 https://github.com/yt-dlp/yt-dlp/issues/2588 https://github.com/yt-dlp/yt-dlp/issues/2602 https://github.com/yt-dlp/yt-dlp/issues/2615 https://github.com/yt-dlp/yt-dlp/issues/2618 https://github.com/yt-dlp/yt-dlp/issues/2619 and https://github.com/yt-dlp/yt-dlp/issues/2476 https://github.com/yt-dlp/yt-dlp/issues/2488 https://github.com/yt-dlp/yt-dlp/issues/2534 https://github.com/yt-dlp/yt-dlp/issues/2582 https://github.com/yt-dlp/yt-dlp/issues/2595 https://github.com/yt-dlp/yt-dlp/issues/2611

    Seriously!! Is it that hard to search before opening an issue!? Most of the issues even have the same titles as their duplicates!

    G'night

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.26 MB)
    yt-dlp.exe(12.37 MB)
    yt-dlp.tar.gz(4.16 MB)
    yt-dlp_macos(12.62 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.57 MB)
    yt-dlp_win.zip(12.28 MB)
    yt-dlp_x86.exe(10.26 MB)
  • 2022.01.21(Jan 21, 2022)

    A description of the various files are in the README


    Changelog:

    • Add option --concat-playlist to concat videos in a playlist
    • Allow multiple and nested configuration files
    • Add more post-processing stages (after_video, playlist)
    • Allow --exec to be run at any post-processing stage (Deprecates --exec-before-download)
    • Allow --print to be run at any post-processing stage
    • Allow listing formats, thumbnails, subtitles using --print by pukkandan, Zirro
    • Add fields video_autonumber, modified_date, modified_timestamp, playlist_count, channel_follower_count
    • Add key requested_downloads in the root info_dict
    • Write download_archive only after all formats are downloaded
    • [FfmpegMetadata] Allow setting metadata of individual streams using meta<n>_ prefix
    • Add option --legacy-server-connect by xtkoba
    • Allow escaped , in --extractor-args
    • Allow unicode characters in info.json
    • Check for existing thumbnail/subtitle in final directory
    • Don't treat empty containers as None in sanitize_info
    • Fix -s --ignore-no-formats --force-write-archive
    • Fix live title for multiple formats
    • List playlist thumbnails in --list-thumbnails
    • Raise error if subtitle download fails
    • [cookies] Fix bug when keyring is unspecified
    • [ffmpeg] Ignore unknown streams, standardize use of -map 0
    • [outtmpl] Alternate form for D and fix suffix's case
    • [utils] Add Sec-Fetch-Mode to std_headers
    • [utils] Fix format_bytes output for Bytes by pukkandan, mdawar
    • [utils] Handle ss:xxx in parse_duration
    • [utils] Improve parsing for nested HTML elements by zmousm, pukkandan
    • [utils] Use key None in traverse_obj to return as-is
    • [extractor] Detect more subtitle codecs in MPD manifests by fstirlitz
    • [extractor] Extract chapters from JSON-LD by iw0nderhow, pukkandan
    • [extractor] Extract thumbnails from JSON-LD by nixxo
    • [extractor] Improve url_result and related
    • [generic] Improve KVS player extraction by trassshhub
    • [build] Reduce dependency on third party workflows
    • [extractor,cleanup] Use _search_nextjs_data, format_field
    • [cleanup] Minor fixes and cleanup
    • [docs] Improvements
    • [test] Fix TestVerboseOutput
    • [afreecatv] Add livestreams extractor by wlritchi
    • [callin] Add extractor by foghawk
    • [CrowdBunker] Add extractors by Ashish0804
    • [daftsex] Add extractors by k3ns1n
    • [digitalconcerthall] Add extractor by teridon
    • [Drooble] Add extractor by u-spec-png
    • [EuropeanTour] Add extractor by Ashish0804
    • [iq.com] Add extractors by MinePlayersPE
    • [KelbyOne] Add extractor by Ashish0804
    • [LnkIE] Add extractor by Ashish0804
    • [MainStreaming] Add extractor by coletdjnz
    • [megatvcom] Add extractors by zmousm
    • [Newsy] Add extractor by Ashish0804
    • [noodlemagazine] Add extractor by trassshhub
    • [PokerGo] Add extractors by Ashish0804
    • [Pornez] Add extractor by mozlima
    • [PRX] Add Extractors by coletdjnz
    • [RTNews] Add extractor by Ashish0804
    • [Rule34video] Add extractor by trassshhub
    • [tvopengr] Add extractors by zmousm
    • [Vimm] Add extractor by alerikaisattera
    • [glomex] Add extractors by zmousm
    • [instagram] Add story/highlight extractor by u-spec-png
    • [openrec] Add movie extractor by Lesmiscore
    • [rai] Add Raiplaysound extractors by nixxo, pukkandan
    • [aparat] Fix extractor
    • [ard] Extract subtitles by fstirlitz
    • [BiliIntl] Add login by MinePlayersPE
    • [CeskaTelevize] Use http for manifests
    • [CTVNewsIE] Add fallback for video search by Ashish0804
    • [dplay] Migrate DiscoveryPlusItaly to DiscoveryPlus by timendum
    • [dplay] Re-structure DiscoveryPlus extractors
    • [Dropbox] Support password protected files and more formats by zenerdi0de
    • [facebook] Fix extraction from groups
    • [facebook] Improve title and uploader extraction
    • [facebook] Parse dash manifests
    • [fox] Extract m3u8 from preview by ischmidt20
    • [funk] Support origin URLs
    • [gfycat] Fix uploader
    • [gfycat] Support embeds by coletdjnz
    • [hotstar] Add extractor args to ignore tags by Ashish0804
    • [hrfernsehen] Fix ardloader extraction by CreaValix
    • [instagram] Fix username extraction for stories and highlights by nyuszika7h
    • [kakao] Detect geo-restriction
    • [line] Remove tv.line.me by sian1468
    • [mixch] Add MixchArchiveIE by Lesmiscore
    • [mixcloud] Detect restrictions by llacb47
    • [NBCSports] Fix extraction of platform URLs by ischmidt20
    • [Nexx] Extract more metadata by MinePlayersPE
    • [Nexx] Support 3q CDN by MinePlayersPE
    • [pbs] de-prioritize AD formats
    • [PornHub,YouTube] Refresh onion addresses by unit193
    • [RedBullTV] Parse subtitles from manifest by Ashish0804
    • [streamcz] Fix extractor by arkamar, pukkandan
    • [Ted] Rewrite extractor by pukkandan, trassshhub
    • [Theta] Fix valid URL by alerikaisattera
    • [ThisOldHouseIE] Add support for premium videos by Ashish0804
    • [TikTok] Fix extraction for sigi-based webpages, add API fallback by MinePlayersPE
    • [TikTok] Pass cookies to formats, and misc fixes by MinePlayersPE
    • [TikTok] Extract captions, user thumbnail by MinePlayersPE
    • [TikTok] Change app version by MinePlayersPE, llacb47
    • [TVer] Extract message for unaired live by Lesmiscore
    • [twitcasting] Refactor extractor by Lesmiscore
    • [twitter] Fix video in quoted tweets
    • [veoh] Improve extractor by foghawk
    • [vk] Capture clip URLs
    • [vk] Fix VKUserVideosIE by Ashish0804
    • [vk] Improve _VALID_URL by k3ns1n
    • [VrtNU] Handle empty title by pgaig
    • [XVideos] Check HLS formats by MinePlayersPE
    • [yahoo:gyao] Improved playlist handling by hyano
    • [youtube:tab] Extract more playlist metadata by coletdjnz, pukkandan
    • [youtube:tab] Raise error on tab redirect by krichbanana, coletdjnz
    • [youtube] Update Innertube clients by coletdjnz
    • [youtube] Detect live-stream embeds
    • [youtube] Do not return upload_date for playlists
    • [youtube] Extract channel subscriber count by coletdjnz
    • [youtube] Make invalid storyboard URL non-fatal
    • [youtube] Enforce UTC, update innertube clients and tests by coletdjnz
    • [zdf] Add chapter extraction by iw0nderhow
    • [zee5] Add geo-bypass
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.24 MB)
    yt-dlp.exe(12.35 MB)
    yt-dlp.tar.gz(4.13 MB)
    yt-dlp_macos(12.60 MB)
    yt-dlp_macos.zip(186 bytes)
    yt-dlp_min.exe(12.55 MB)
    yt-dlp_win.zip(12.26 MB)
    yt-dlp_x86.exe(10.24 MB)
  • 2021.12.27(Dec 27, 2021)

    A description of the various files are in the README


    Changelog:

    • Avoid recursion error when re-extracting info
    • [ffmpeg] Fix position of --ppa
    • [aria2c] Don't show progress when --no-progress
    • [cookies] Support other keyrings by mbway
    • [EmbedThumbnail] Prefer AtomicParsley over ffmpeg if available
    • [generic] Fix HTTP KVS Player by git-anony-mouse
    • [ThumbnailsConvertor] Fix for when there are no thumbnails
    • [docs] Add examples for using TYPES: in -P/-o
    • [PixivSketch] Add extractors by nao20010128nao
    • [tiktok] Add music, sticker and tag IEs by MinePlayersPE
    • [BiliIntl] Fix extractor by MinePlayersPE
    • [CBC] Fix URL regex
    • [tiktok] Fix extractor_key used in archive
    • [youtube] End live-from-start properly when stream ends with 403
    • [Zee5] Fix VALID_URL for tv-shows by Ashish0804
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.18 MB)
    yt-dlp.exe(12.21 MB)
    yt-dlp.tar.gz(4.02 MB)
    yt-dlp_macos(12.45 MB)
    yt-dlp_macos.zip(12.24 MB)
    yt-dlp_min.exe(12.47 MB)
    yt-dlp_win.zip(12.10 MB)
    yt-dlp_x86.exe(10.10 MB)
  • 2021.12.25(Dec 25, 2021)

    A description of the various files are in the README


    Changelog:

    • [dash,youtube] Download live from start to end by nao20010128nao, pukkandan
      • Add option --live-from-start to enable downloading live videos from start
      • Add key is_from_start in formats to identify formats (of live videos) that downloads from start
      • [dash] Create protocol http_dash_segments_generator that allows a function to be passed instead of fragments
      • [fragment] Allow multiple live dash formats to download simultaneously
      • [youtube] Implement fragment re-fetching for the live dash formats
      • [youtube] Re-extract dash manifest every 5 hours (manifest expires in 6hrs)
      • [postprocessor/ffmpeg] Add FFmpegFixupDuplicateMoovPP to fixup duplicated moov atoms
      • Known issues:
        • Ctrl+C doesn't work on Windows when downloading multiple formats
        • If video becomes private, download hangs
    • [SponsorBlock] Add Filler and Highlight categories by nihil-admirari, pukkandan
      • Change --sponsorblock-cut all to --sponsorblock-cut default if you do not want filler sections to be removed
    • Add field webpage_url_domain
    • Add interactive format selection with -f -
    • Add option --file-access-retries by ehoogeveen-medweb
    • [outtmpl] Add alternate forms S, D and improve id detection
    • [outtmpl] Add operator & for replacement text by PilzAdam
    • [EmbedSubtitle] Disable duration check temporarily
    • [extractor] Add _search_nuxt_data by nao20010128nao
    • [extractor] Ignore errors in comment extraction when -i is given
    • [extractor] Standardize _live_title
    • [FormatSort] Prevent incorrect deprecation warning
    • [generic] Extract m3u8 formats from JSON-LD
    • [postprocessor/ffmpeg] Always add faststart
    • [utils] Fix parsing YYYYMMDD dates in Nov/Dec by wlritchi
    • [utils] Improve parse_count
    • [utils] Update std_headers by kikuyan, fstirlitz
    • [lazy_extractors] Fix for search IEs
    • [extractor] Support default implicit graph in JSON-LD by zmousm
    • Allow --no-write-thumbnail to override --write-all-thumbnail
    • Fix --throttled-rate
    • Fix control characters being printed to --console-title
    • Fix PostProcessor hooks not registered for some PPs
    • Pre-process when using --flat-playlist
    • Remove known invalid thumbnails from info_dict
    • Add warning when using -f best
    • Use parse_duration for --wait-for-video and some minor fix
    • [test/download] Add more fields
    • [test/download] Ignore field webpage_url_domain by std-move
    • [compat] Suppress errors in enabling VT mode
    • [docs] Improve manpage format by iw0nderhow, pukkandan
    • [docs,cleanup] Minor fixes and cleanup
    • [cleanup] Fix some typos by unit193
    • [ABC:iview] Add show extractor by pabs3
    • [dropout] Add extractor by TwoThousandHedgehogs, pukkandan
    • [GameJolt] Add extractors by MinePlayersPE
    • [gofile] Add extractor by Jertzukka, Ashish0804
    • [hse] Add extractors by cypheron, pukkandan
    • [NateTV] Add NateIE and NateProgramIE by Ashish0804, Hyeeji
    • [OpenCast] Add extractors by bwildenhain, C0D3D3V
    • [rtve] Add RTVEAudioIE by kebianizao
    • [Rutube] Add RutubeChannelIE by Ashish0804
    • [skeb] Add extractor by nao20010128nao
    • [soundcloud] Add related tracks extractor by Lapin0t
    • [toggo] Add extractor by nyuszika7h
    • [TrueID] Add extractor by MinePlayersPE
    • [audiomack] Update album and song VALID_URL by abdullah-if, dirkf
    • [CBC Gem] Extract 1080p formats by DavidSkrundz
    • [ceskatelevize] Fetch iframe from nextJS data by mkubecek
    • [crackle] Look for non-DRM formats by raleeper
    • [dplay] Temporary fix for discoveryplus.com/it
    • [DiscoveryPlusShowBaseIE] yield actual video id by Ashish0804
    • [Facebook] Handle redirect URLs
    • [fujitv] Extract 1080p from tv_android m3u8 by YuenSzeHong
    • [gronkh] Support new URL pattern by Sematre
    • [instagram] Expand valid URL by u-spec-png
    • [Instagram] Try bypassing login wall with embed page by MinePlayersPE
    • [Jamendo] Fix use of _VALID_URL_RE by jaller94
    • [LBRY] Support livestreams by Ashish0804, pukkandan
    • [NJPWWorld] Extract formats from m3u8 by aarubui
    • [NovaEmbed] update player regex by std-move
    • [npr] Make SMIL extraction non-fatal by r5d
    • [ntvcojp] Extract NUXT data by nao20010128nao
    • [ok.ru] add mobile fallback by nao20010128nao
    • [olympics] Add uploader and cleanup by u-spec-png
    • [ondemandkorea] Update jw_config regex by julien-hadleyjack
    • [PlutoTV] Expand _VALID_URL
    • [RaiNews] Fix extractor by nixxo
    • [RCTIPlusSeries] Lazy extraction and video type selection by MinePlayersPE
    • [redtube] Handle formats delivered inside a JSON by dirkf, nixxo
    • [SonyLiv] Add OTP login support by Ashish0804
    • [Steam] Fix extractor by u-spec-png
    • [TikTok] Pass cookies to mobile API by MinePlayersPE
    • [trovo] Fix inheritance of TrovoChannelBaseIE
    • [TVer] Extract better thumbnails by YuenSzeHong
    • [vimeo] Extract chapters
    • [web.archive:youtube] Improve metadata extraction by coletdjnz
    • [youtube:comments] Add more options for limiting number of comments extracted by coletdjnz
    • [youtube:tab] Extract more metadata from feeds/channels/playlists by coletdjnz
    • [youtube:tab] Extract video thumbnails from playlist by coletdjnz, pukkandan
    • [youtube:tab] Ignore query when redirecting channel to playlist and cleanup of related code
    • [youtube] Fix ytsearchdate
    • [zdf] Support videos with different ptmd location by iw0nderhow
    • [zee5] Support /episodes in URL
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.18 MB)
    yt-dlp.exe(12.20 MB)
    yt-dlp.tar.gz(4.01 MB)
    yt-dlp_macos(12.44 MB)
    yt-dlp_macos.zip(12.24 MB)
    yt-dlp_min.exe(12.46 MB)
    yt-dlp_win.zip(12.10 MB)
    yt-dlp_x86.exe(10.09 MB)
  • 2021.12.01(Dec 1, 2021)

    A description of the various files are in the README


    Changelog:

    • Add option --wait-for-video to wait for scheduled streams
    • Add option --break-per-input to apply --break-on... to each input URL
    • Add option --embed-info-json to embed info.json in mkv
    • Add compat-option embed-metadata
    • Allow using a custom format selector through API
    • [AES] Add ECB mode by nao20010128nao
    • [build] Fix MacOS Build
    • [build] Save Git HEAD at release alongside version info
    • [build] Use workflow_dispatch for release
    • [downloader/ffmpeg] Fix for direct videos inside mpd manifests
    • [downloader] Add colors to download progress
    • [EmbedSubtitles] Slightly relax duration check and related cleanup
    • [ExtractAudio] Fix conversion to wav and vorbis
    • [ExtractAudio] Support alac
    • [extractor] Extract average_rating from JSON-LD
    • [FixupM3u8] Fixup MPEG-TS in MP4 container
    • [generic] Support mpd manifests without extension by shirt
    • [hls] Better FairPlay DRM detection by nyuszika7h
    • [jsinterp] Fix splice to handle float (for youtube js player f1ca6900)
    • [utils] Allow alignment in render_table and add tests
    • [utils] Fix PagedList
    • [utils] Fix error when copying LazyList
    • Clarify video/audio-only formats in -F
    • Ensure directory exists when checking formats
    • Ensure path for link files exists by Zirro
    • Ensure same config file is not loaded multiple times
    • Fix postprocessor_hooks
    • Fix --break-on-archive when pre-checking
    • Fix --check-formats for mhtml
    • Fix --load-info-json of playlists with failed entries
    • Fix --trim-filename when filename has .
    • Fix bug in parsing --add-header
    • Fix error in report_unplayable_conflict by shirt
    • Fix writing playlist infojson with --no-clean-infojson
    • Validate --get-bypass-country
    • [blogger] Add extractor by pabs3
    • [breitbart] Add extractor by Grabien
    • [CableAV] Add extractor by j54vc1bk
    • [CanalAlpha] Add extractor by Ashish0804
    • [CozyTV] Add extractor by Ashish0804
    • [CPTwentyFour] Add extractor by Ashish0804
    • [DiscoveryPlus] Add DiscoveryPlusItalyShowIE by Ashish0804
    • [ESPNCricInfo] Add extractor by Ashish0804
    • [LinkedIn] Add extractor by u-spec-png
    • [mixch] Add extractor by nao20010128nao
    • [nebula] Add NebulaCollectionIE and rewrite extractor by hheimbuerger
    • [OneFootball] Add extractor by Ashish0804
    • [peer.tv] Add extractor by u-spec-png
    • [radiozet] Add extractor by 0xA7404A (Aurora)
    • [redgifs] Add extractor by chio0hai
    • [RedGifs] Add Search and User extractors by Deer-Spangle
    • [rtrfm] Add extractor by pabs3
    • [Streamff] Add extractor by cntrl-s
    • [Stripchat] Add extractor by zulaport
    • [Aljazeera] Fix extractor by u-spec-png
    • [AmazonStoreIE] Fix regex to not match vdp urls by Ashish0804
    • [ARDBetaMediathek] Handle new URLs
    • [bbc] Get all available formats by nyuszika7h
    • [Bilibili] Fix title extraction by u-spec-png
    • [CBC Gem] Fix for shows that don't have all seasons by makeworld-the-better-one
    • [curiositystream] Add more metadata
    • [CuriosityStream] Fix series
    • [DiscoveryPlus] Rewrite extractors by Ashish0804, pukkandan
    • [HotStar] Set language field from tags by Ashish0804
    • [instagram, cleanup] Refactor extractors
    • [Instagram] Display more login errors by MinePlayersPE
    • [itv] Fix extractor by staubichsauger, pukkandan
    • [mediaklikk] Expand valid URL
    • [MTV] Improve mgid extraction by Sipherdrakon, kikuyan
    • [nexx] Better error message for unsupported format
    • [NovaEmbed] Fix extractor by pukkandan, std-move
    • [PatreonUser] Do not capture RSS URLs
    • [Reddit] Add support for 1080p videos by xenova
    • [RoosterTeethSeries] Fix for multiple pages by MinePlayersPE
    • [sbs] Fix for movies and livestreams
    • [Senate.gov] Add SenateGovIE and fix SenateISVPIE by Grabien, pukkandan
    • [soundcloud:search] Fix pagination
    • [tiktok:user] Set webpage_url correctly
    • [Tokentube] Fix description by u-spec-png
    • [trovo] Fix extractor by nyuszika7h
    • [tv2] Expand valid URL
    • [Tvplayhome] Fix extractor by pukkandan, 18928172992817182
    • [Twitch:vod] Add chapters by mpeter50
    • [twitch:vod] Extract live status by DEvmIb
    • [VidLii] Add 720p support by mrpapersonic
    • [vimeo] Add fallback for config URL
    • [vimeo] Sort http formats higher
    • [WDR] Expand valid URL
    • [willow] Add extractor by aarubui
    • [xvideos] Detect embed URLs by 4a1e2y5
    • [xvideos] Fix extractor by Yakabuff
    • [youtube, cleanup] Reorganize Tab and Search extractor inheritances
    • [youtube:search_url] Add playlist/channel support
    • [youtube] Add default player client by coletdjnz
    • [youtube] Add storyboard formats
    • [youtube] Decrypt n-sig for URLs with ratebypass
    • [youtube] Minor improvement to format sorting
    • [cleanup] Add deprecation warnings
    • [cleanup] Minor cleanup
    • [cleanup] Misc cleanup
    • [cleanup] Refactor JSInterpreter._seperate
    • [Cleanup] Remove some unnecessary groups in regexes by Ashish0804
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.15 MB)
    yt-dlp.exe(12.16 MB)
    yt-dlp.tar.gz(3.95 MB)
    yt-dlp_macos(12.40 MB)
    yt-dlp_macos.zip(12.19 MB)
    yt-dlp_min.exe(12.42 MB)
    yt-dlp_win.zip(12.06 MB)
    yt-dlp_x86.exe(10.05 MB)
  • 2021.11.10(Nov 10, 2021)

    A description of the various files are in the README


    Changelog:

    • [youtube] Fix throttling by decrypting n-sig
    • Merging extractors from haruhi-dl by selfisekai
      • [extractor] Add _search_nextjs_data
      • [tvp] Fix extractors
      • [tvp] Add TVPStreamIE
      • [wppilot] Add extractors
      • [polskieradio] Add extractors
      • [radiokapital] Add extractors
      • [polsatgo] Add extractor by selfisekai, sdomi
    • Separate --check-all-formats from --check-formats
    • Approximate filesize from bitrate
    • Don't create console in windows_enable_vt_mode
    • Fix bug in --load-infojson of playlists
    • [minicurses] Add colors to -F and standardize color-printing code
    • [outtmpl] Add type link for internet shortcut files
    • [outtmpl] Add alternate forms for q and j
    • [outtmpl] Do not traverse None
    • [fragment] Fix progress display in fragmented downloads
    • [downloader/ffmpeg] Fix vtt download with ffmpeg
    • [ffmpeg] Detect presence of setts and libavformat version
    • [ExtractAudio] Rescale --audio-quality correctly by CrypticSignal, pukkandan
    • [ExtractAudio] Use libfdk_aac if available by CrypticSignal
    • [FormatSort] eac3 is better than ac3
    • [FormatSort] Fix some fields' defaults
    • [generic] Detect more json_ld
    • [generic] parse jwplayer with only the json URL
    • [extractor] Add keyword automatically to SearchIE descriptions
    • [extractor] Fix some errors being converted to ExtractorError
    • [utils] Add join_nonempty
    • [utils] Add jwt_decode_hs256 by Ashish0804
    • [utils] Create DownloadCancelled exception
    • [utils] Parse vp09 as vp9
    • [utils] Sanitize URL when determining protocol
    • [test/download] Fallback test to bv
    • [docs] Minor documentation improvements
    • [cleanup] Improvements to error and debug messages
    • [cleanup] Minor fixes and cleanup
    • [3speak] Add extractors by Ashish0804
    • [AmazonStore] Add extractor by Ashish0804
    • [Gab] Add extractor by u-spec-png
    • [mediaset] Add playlist support by nixxo
    • [MLSScoccer] Add extractor by Ashish0804
    • [N1] Add support for nova.rs by u-spec-png
    • [PlanetMarathi] Add extractor by Ashish0804
    • [RaiplayRadio] Add extractors by frafra
    • [roosterteeth] Add series extractor
    • [sky] Add SkyNewsStoryIE by ajj8
    • [youtube] Fix sorting for some videos
    • [youtube] Populate thumbnail with the best "known" thumbnail
    • [youtube] Refactor itag processing
    • [youtube] Remove unnecessary no-playlist warning
    • [youtube:tab] Add Invidious list for playlists/channels by rhendric
    • [Bilibili:comments] Fix infinite loop by u-spec-png
    • [ceskatelevize] Fix extractor by flashdagger
    • [Coub] Fix media format identification by wlritchi
    • [crunchyroll] Add extractor-args language and hardsub
    • [DiscoveryPlus] Allow language codes in URL
    • [imdb] Fix thumbnail by ozburo
    • [instagram] Add IOS URL support by u-spec-png
    • [instagram] Improve login code by u-spec-png
    • [Instagram] Improve metadata extraction by u-spec-png
    • [iPrima] Fix extractor by stanoarn
    • [itv] Add support for ITV News by ajj8
    • [la7] Fix extractor by nixxo
    • [linkedin] Don't login multiple times
    • [mtv] Fix some videos by Sipherdrakon
    • [Newgrounds] Fix description by u-spec-png
    • [Nrk] Minor fixes by fractalf
    • [Olympics] Fix extractor by u-spec-png
    • [piksel] Fix sorting
    • [twitter] Do not sort by codec
    • [viewlift] Add cookie-based login and series support by Ashish0804, pukkandan
    • [vimeo] Detect source extension and misc cleanup by flashdagger
    • [vimeo] Fix ondemand videos and direct URLs with hash
    • [vk] Fix login and add subtitles by kaz-us
    • [VLive] Add upload_date and thumbnail by Ashish0804
    • [VRT] Fix login by pgaig
    • [Vupload] Fix extractor by u-spec-png
    • [wakanim] Add support for MPD manifests by nyuszika7h
    • [wakanim] Detect geo-restriction by nyuszika7h
    • [ZenYandex] Fix extractor by u-spec-png
    Source code(tar.gz)
    Source code(zip)
    yt-dlp(2.12 MB)
    yt-dlp.exe(12.12 MB)
    yt-dlp.tar.gz(3.91 MB)
    yt-dlp_min.exe(11.86 MB)
    yt-dlp_win.zip(12.02 MB)
    yt-dlp_x86.exe(10.00 MB)
  • 2021.10.22(Oct 22, 2021)

    Changelog:

    • [build] Improvements
      • Build standalone MacOS packages by smplayer-dev
      • Release windows exe built with py2exe
      • Enable lazy-extractors in releases.
        • Set env var YTDLP_NO_LAZY_EXTRACTORS to forcefully disable this (experimental)
      • Clean up error reporting in update
      • Refactor pyinst.py, misc cleanup and improve docs
    • [docs] Migrate issues to use forms by Ashish0804
    • [downloader] Fix slow progress hooks
      • This was causing HLS/DASH downloads to be extremely slow in some situations
    • [downloader/ffmpeg] Improve simultaneous download and merge
    • [EmbedMetadata] Allow overwriting all default metadata with meta_default key
    • [ModifyChapters] Add ability for --remove-chapters to remove sections by timestamp
    • [utils] Allow duration strings in --match-filter
    • Add HDR information to formats
    • Add negative option --no-batch-file by Zirro
    • Calculate more fields for merged formats
    • Do not verify thumbnail URLs unless --check-formats is specified
    • Don't create console for subprocesses on Windows
    • Fix --restrict-filename when used with default template
    • Fix check_formats output being written to stdout when -qv
    • Fix bug in storyboards
    • Fix conflict b/w id and ext in format selection
    • Fix verbose head not showing custom configs
    • Load archive only after printing verbose head
    • Make duration_string and resolution available in --match-filter
    • Re-implement deprecated option --id
    • Reduce default --socket-timeout
    • Write verbose header to logger
    • [outtmpl] Fix bug in expanding environment variables
    • [cookies] Local State should be opened as utf-8
    • [extractor,utils] Detect more codecs/mimetypes
    • [extractor] Detect EXT-X-KEY Apple FairPlay
    • [utils] Use importlib to load plugins by sulyi
    • [http] Retry on socket timeout and show the last encountered error
    • [fragment] Print error message when skipping fragment
    • [aria2c] Fix --skip-unavailable-fragment
    • [SponsorBlock] Obey extractor-retries and sleep-requests
    • [Merger] Do not add aac_adtstoasc to non-hls audio
    • [ModifyChapters] Do not mutate original chapters by nihil-admirari
    • [devscripts/run_tests] Use markers to filter tests by sulyi
    • [7plus] Add cookie based authentication by nyuszika7h
    • [AdobePass] Fix RCN MSO by jfogelman
    • [CBC] Fix Gem livestream by makeworld-the-better-one
    • [CBC] Support CBC Gem member content by makeworld-the-better-one
    • [crunchyroll] Add season to flat-playlist Closes #1319
    • [crunchyroll] Add support for beta.crunchyroll URLs and fix series URLs with language code
    • [EUScreen] Add Extractor by Ashish0804
    • [Gronkh] Add extractor by Ashish0804
    • [hidive] Fix typo
    • [Hotstar] Mention Dynamic Range in format_id by Ashish0804
    • [Hotstar] Raise appropriate error for DRM
    • [instagram] Add login by u-spec-png
    • [instagram] Show appropriate error when login is needed
    • [microsoftstream] Add extractor by damianoamatruda, nixklai
    • [on24] Add extractor by damianoamatruda
    • [patreon] Fix vimeo player regex by zenerdi0de
    • [SkyNewsAU] Add extractor by Ashish0804
    • [tagesschau] Fix extractor by u-spec-png
    • [tbs] Add tbs live streams by llacb47
    • [tiktok] Fix typo and update tests
    • [trovo] Support channel clips and VODs by Ashish0804
    • [Viafree] Add support for Finland by 18928172992817182
    • [vimeo] Fix embedded player.vimeo
    • [vlive:channel] Fix extraction by kikuyan, pukkandan
    • [youtube] Add auto-translated subtitles
    • [youtube] Expose different formats with same itag
    • [youtube:comments] Fix for new layout by coletdjnz
    • [cleanup] Cleanup bilibili code by pukkandan, u-spec-png
    • [cleanup] Remove broken youtube login code
    • [cleanup] Standardize timestamp formatting code
    • [cleanup] Generalize getcomments implementation for extractors
    • [cleanup] Simplify search extractors code
    • [cleanup] misc

    See this for a description of the release files

    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(635 bytes)
    SHA2-512SUMS(1.12 KB)
    yt-dlp(2.09 MB)
    yt-dlp.exe(12.08 MB)
    yt-dlp.tar.gz(3.85 MB)
    yt-dlp_macos(12.32 MB)
    yt-dlp_macos.zip(12.11 MB)
    yt-dlp_min.exe(11.82 MB)
    yt-dlp_win.zip(11.98 MB)
    yt-dlp_x86.exe(9.96 MB)
  • 2021.10.10(Oct 10, 2021)

    There was a couple of serious bugs in last release (#1215, #1211) So here's a hotfix

    Changelog:

    • [downloader/ffmpeg] Fix bug in initializing FFmpegPostProcessor
    • [minicurses] Fix when printing to file
    • [downloader] Fix throttledratelimit
    • [francetv] Fix extractor by fstirlitz, sarnoud
    • [NovaPlay] Add extractor by Bojidarist
    • [ffmpeg] Revert "Set max probesize" - No longer needed
    • [docs] Remove incorrect dependency on VC++10
    • [build] Allow to release without changelog
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(388 bytes)
    SHA2-512SUMS(708 bytes)
    yt-dlp(2.00 MB)
    yt-dlp.exe(11.95 MB)
    yt-dlp.tar.gz(3.67 MB)
    yt-dlp.zip(11.85 MB)
    yt-dlp_x86.exe(9.82 MB)
  • 2021.10.09(Oct 9, 2021)

    Changelog:

    • Improved progress reporting
      • Separate --console-title and --no-progress
      • Add option --progress to show progress-bar even in quiet mode
      • Fix and refactor minicurses and use it for all progress reporting
      • Standardize use of terminal sequences and enable color support for windows 10
      • Add option --progress-template to customize progress-bar and console-title
      • Add postprocessor hooks and progress reporting
    • [postprocessor] Add plugin support with option --use-postprocessor
    • [extractor] Extract storyboards from SMIL manifests by fstirlitz
    • [outtmpl] Alternate form of format type l for \n delimited list
    • [outtmpl] Format type U for unicode normalization
    • [outtmpl] Allow empty output template to skip a type of file
    • Merge webm formats into mkv if thumbnails are to be embedded
    • [adobepass] Add RCN as MSO by jfogelman
    • [ciscowebex] Add extractor by damianoamatruda
    • [Gettr] Add extractor by i6t
    • [GoPro] Add extractor by i6t
    • [N1] Add extractor by u-spec-png
    • [Theta] Add video extractor by alerikaisattera
    • [Veo] Add extractor by i6t
    • [Vupload] Add extractor by u-spec-png
    • [bbc] Extract better quality videos by ajj8
    • [Bilibili] Add subtitle converter by u-spec-png
    • [CBC] Cleanup tests by makeworld-the-better-one
    • [Douyin] Rewrite extractor by MinePlayersPE
    • [Funimation] Fix for /v/ urls by pukkandan, Jules-A
    • [Funimation] Sort formats according to the relevant extractor-args
    • [Hidive] Fix duplicate and incorrect formats
    • [HotStarSeries] Fix cookies by Ashish0804
    • [LinkedInLearning] Add subtitles by Ashish0804
    • [Mediaite] Relax valid url by coletdjnz
    • [Newgrounds] Add age_limit and fix duration by u-spec-png
    • [Newgrounds] Fix view count on songs by u-spec-png
    • [parliamentlive.tv] Fix extractor by u-spec-png
    • [PolskieRadio] Fix extractors by jakubadamw, u-spec-png
    • [reddit] Add embedded url by u-spec-png
    • [reddit] Fix 429 by generating a random reddit_session by AjaxGb
    • [Rumble] Add RumbleChannelIE by Ashish0804
    • [soundcloud:playlist] Detect last page correctly
    • [SovietsCloset] Add duration from m3u8 by ChillingPepper
    • [Streamable] Add codecs by u-spec-png
    • [vidme] Remove extractor by alerikaisattera
    • [youtube:tab] Fallback to API when webpage fails to download by coletdjnz
    • [youtube] Fix non-fatal errors in fetching player
    • Fix --flat-playlist when neither IE nor id is known
    • Fix -f mp4 behaving differently from youtube-dl
    • Workaround for bug in ssl.SSLContext.load_default_certs
    • [aes] Improve performance slightly by sulyi
    • [cookies] Fix keyring fallback by mbway
    • [embedsubtitle] Fix error when duration is unknown
    • [ffmpeg] Fix error when subtitle file is missing
    • [ffmpeg] Set max probesize to workaround AAC HLS stream issues by shirt
    • [FixupM3u8] Remove redundant run if merged is needed
    • [hls] Fix decryption issues by shirt, pukkandan
    • [http] Respect user-provided chunk size over extractor's
    • [utils] Let traverse_obj accept functions as keys
    • [docs] Add note about our custom ffmpeg builds
    • [docs] Write embedding and contributing documentation by pukkandan, timethrow
    • [update] Check for new version even if not updateable
    • [build] Add more files to the tarball
    • [build] Allow building with py2exe (and misc fixes)
    • [build] Use pycryptodomex by shirt, pukkandan
    • [cleanup] Some minor refactoring, improve docs and misc cleanup
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(388 bytes)
    SHA2-512SUMS(708 bytes)
    yt-dlp(2.00 MB)
    yt-dlp.exe(11.95 MB)
    yt-dlp.tar.gz(3.67 MB)
    yt-dlp.zip(11.85 MB)
    yt-dlp_x86.exe(9.82 MB)
  • 2021.09.25(Sep 25, 2021)

    Changelog:

    • Add new option --netrc-location
    • [outtmpl] Allow alternate fields using ,
    • [outtmpl] Add format type B to treat the value as bytes (eg: to limit the filename to a certain number of bytes)
    • Separate the options --ignore-errors and --no-abort-on-error
    • Basic framework for simultaneous download of multiple formats by nao20010128nao
    • [17live] Add 17.live extractor by nao20010128nao
    • [bilibili] Add BiliIntlIE and BiliIntlSeriesIE by Ashish0804
    • [CAM4] Add extractor by alerikaisattera
    • [Chingari] Add extractors by Ashish0804
    • [CGTN] Add extractor by chao813
    • [damtomo] Add extractor by nao20010128nao
    • [gotostage] Add extractor by poschi3
    • [Koo] Add extractor by Ashish0804
    • [Mediaite] Add Extractor by Ashish0804
    • [Mediaklikk] Add Extractor by tmarki, mrx23dot, coletdjnz
    • [MuseScore] Add Extractor by Ashish0804
    • [Newgrounds] Add NewgroundsUserIE and improve extractor by u-spec-png
    • [nzherald] Add NZHeraldIE by coletdjnz
    • [Olympics] Add replay extractor by Ashish0804
    • [Peertube] Add channel and playlist extractors by u-spec-png
    • [radlive] Add extractor by nyuszika7h
    • [SovietsCloset] Add extractor by ChillingPepper
    • [Streamanity] Add Extractor by alerikaisattera
    • [Theta] Add extractor by alerikaisattera
    • [Yandex] Add ZenYandexIE and ZenYandexChannelIE by Ashish0804
    • [9Now] handle episodes of series by dalanmiller
    • [AnimalPlanet] Fix extractor by Sipherdrakon
    • [Arte] Improve description extraction by renalid
    • [atv.at] Use jwt for API by NeroBurner
    • [brightcove] Extract subtitles from manifests
    • [CBC] Fix CBC Gem extractors by makeworld-the-better-one
    • [cbs] Report appropriate error for DRM
    • [comedycentral] Support collection-playlist by nixxo
    • [DIYNetwork] Support new format by Sipherdrakon
    • [downloader/niconico] Pass custom headers by nao20010128nao
    • [dw] Fix extractor
    • [Fancode] Fix live streams by zenerdi0de
    • [funimation] Fix for locations outside US by Jules-A, pukkandan
    • [globo] Fix GloboIE by Ashish0804
    • [HiDive] Fix extractor by Ashish0804
    • [Hotstar] Add referer for subs by Ashish0804
    • [itv] Fix extractor, add subtitles and thumbnails by coletdjnz, sleaux-meaux, Vangelis66
    • [lbry] Show error message from API response
    • [Mxplayer] Use mobile API by Ashish0804
    • [NDR] Rewrite NDRIE by Ashish0804
    • [Nuvid] Fix extractor by u-spec-png
    • [Oreilly] Handle new web url by MKSherbini
    • [pbs] Fix subtitle extraction by coletdjnz, gesa, raphaeldore
    • [peertube] Update instances by u-spec-png
    • [plutotv] Fix extractor for URLs with /en
    • [reddit] Workaround for 429 by redirecting to old.reddit.com
    • [redtube] Fix exts
    • [soundcloud] Make playlist extraction lazy
    • [soundcloud] Retry playlist pages on 502 error and update _CLIENT_ID
    • [southpark] Fix SouthParkDE by coletdjnz
    • [SovietsCloset] Fix playlists for games with only named categories by ConquerorDopy
    • [SpankBang] Fix uploader by f4pp3rk1ng, coletdjnz
    • [tiktok] Use API to fetch higher quality video by MinePlayersPE, llacb47
    • [TikTokUser] Fix extractor using mobile API by MinePlayersPE, llacb47
    • [videa] Fix some extraction errors by nyuszika7h
    • [VrtNU] Handle login errors by llacb47
    • [vrv] Don't raise error when thumbnails are missing
    • [youtube] Cleanup authentication code by coletdjnz
    • [youtube] Fix --mark-watched with --cookies-from-browser
    • [youtube] Improvements to JS player extraction and add extractor-args to skip it by coletdjnz
    • [youtube] Retry on 'Unknown Error' by coletdjnz
    • [youtube] Return full URL instead of just ID
    • [youtube] Warn when trying to download clips
    • [zdf] Improve format sorting
    • [zype] Extract subtitles from the m3u8 manifest by fstirlitz
    • Allow --force-write-archive to work with --flat-playlist
    • Download subtitles in order of --sub-langs
    • Allow 0 in --playlist-items
    • Handle more playlist errors with -i
    • Fix --no-get-comments
    • Fix extra_info being reused across runs
    • Fix compat options no-direct-merge and playlist-index
    • Dump files should obey --trim-filename by sulyi
    • [aes] Add aes_gcm_decrypt_and_verify by sulyi, pukkandan
    • [aria2c] Fix IV for some AES-128 streams by shirt
    • [compat] Don't ignore HOME (if set) on windows
    • [cookies] Make browser names case insensitive
    • [cookies] Print warning for cookie decoding error only once
    • [extractor] Fix root-relative URLs in MPD by DigitalDJ
    • [ffmpeg] Add aac_adtstoasc when merging if needed
    • [fragment,aria2c] Generalize and refactor some code
    • [fragment] Avoid repeated request for AES key
    • [fragment] Fix range header when using -N and media sequence by shirt
    • [hls,aes] Fallback to native implementation for AES-CBC and detect Cryptodome in addition to Crypto
    • [hls] Byterange + AES128 is supported by native downloader
    • [ModifyChapters] Improve sponsor chapter merge algorithm by nihil-admirari
    • [ModifyChapters] Minor fixes
    • [WebVTT] Adjust parser to accommodate PBS subtitles
    • [utils] Improve extract_timezone by dirkf
    • [options] Fix --no-config and refactor reading of config files
    • [options] Strip spaces and ignore empty entries in list-like switches
    • [test/cookies] Improve logging
    • [build] Automate more of the release process by animelover1984, pukkandan
    • [build] Fix sha256 by nihil-admirari
    • [build] Bring back brew taps by nao20010128nao
    • [build] Provide --onedir zip for windows by pukkandan
    • [cleanup,docs] Add deprecation warning in docs for some counter intuitive behaviour
    • [cleanup] Fix line endings for nebula.py by glenn-slayden
    • [cleanup] Improve make clean-test by sulyi
    • [cleanup] Misc
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(388 bytes)
    SHA2-512SUMS(708 bytes)
    yt-dlp(1.99 MB)
    yt-dlp.exe(11.93 MB)
    yt-dlp.tar.gz(3.60 MB)
    yt-dlp.zip(11.83 MB)
    yt-dlp_x86.exe(9.81 MB)
  • 2021.09.02(Sep 2, 2021)

    Changelog:

    • Native SponsorBlock implementation by nihil-admirari, pukkandan
      • --sponsorblock-remove CATS removes specified chapters from file
      • --sponsorblock-mark CATS marks the specified sponsor sections as chapters
      • --sponsorblock-chapter-title TMPL to specify sponsor chapter template
      • --sponsorblock-api URL to use a different API
      • No re-encoding is done unless --force-keyframes-at-cuts is used
      • The fetched sponsor sections are written to the infojson
      • Deprecates: --sponskrub, --no-sponskrub, --sponskrub-cut, --no-sponskrub-cut, --sponskrub-force, --no-sponskrub-force, --sponskrub-location, --sponskrub-args
    • Split --embed-chapters from --embed-metadata (it still implies the former by default)
    • Add option --remove-chapters to remove arbitrary chapters by nihil-admirari, pukkandan
    • Add option --force-keyframes-at-cuts for more accurate cuts when removing and splitting chapters by nihil-admirari
    • Let --match-filter reject entries early
      • Makes redundant: --match-title, --reject-title, --min-views, --max-views
    • [lazy_extractor] Improvements (It now passes all tests)
      • Bugfix for when plugin directory doesn't exist by kidonng
      • Create instance only after pre-checking archive
      • Import actual class if an attribute is accessed
      • Fix suitable and add flake8 test
    • [downloader/ffmpeg] Experimental support for DASH manifests (including live)
      • Your ffmpeg must have this patch applied for YouTube DASH to work
    • [downloader/ffmpeg] Allow passing custom arguments before -i

    New extractors

    Fixed extractors

    • [adobepass] Fix Verizon SAML login by nyuszika7h, ParadoxGBB
    • [afreecatv] Fix adult VODs by wlritchi
    • [afreecatv] Tolerate failure to parse date string by wlritchi
    • [aljazeera] Fix extractor by MinePlayersPE
    • [ATV.at] Fix extractor for ATV.at by NeroBurner, coletdjnz
    • [bitchute] Fix test by mahanstreamer
    • [camtube] Remove obsolete extractor by alerikaisattera
    • [CDA] Add more formats by u-spec-png
    • [eroprofile] Fix page skipping in albums by jhwgh1968
    • [facebook] Fix format sorting
    • [facebook] Fix metadata extraction by kikuyan
    • [facebook] Update onion URL by Derkades
    • [HearThisAtIE] Fix extractor by Ashish0804
    • [instagram] Add referrer to prevent throttling by u-spec-png, kikuyan
    • [iwara.tv] Extract more metadata by BunnyHelp
    • [iwara] Add thumbnail by i6t
    • [kakao] Fix extractor
    • [mediaset] Fix extraction for some videos by nyuszika7h
    • [Motherless] Fix extractor by coletdjnz
    • [Nova] fix extractor by std-move
    • [ParamountPlus] Fix geo verification by shirt
    • [peertube] handle new video URL format by Chocobozzz
    • [pornhub] Separate and fix playlist extractor by mzbaulhaque
    • [reddit] Fix for quarantined subreddits by ouwou
    • [ShemarooMe] Fix extractor by Ashish0804
    • [soundcloud] Refetch client_id on 403
    • [tiktok] Fix metadata extraction
    • [TV2] Fix extractor by Ashish0804
    • [tv5mondeplus] Fix extractor by korli
    • [VH1,TVLand] Fix extractors by Sipherdrakon
    • [Viafree] Fix extractor and extract subtitles by coletdjnz
    • [XHamster] Extract uploader_id by octotherp
    • [youtube] Add shorts to _VALID_URL
    • [youtube] Add av01 itags to known formats list by blackjack4494
    • [youtube] Extract error messages from HTTPError response by coletdjnz
    • [youtube] Fix subtitle names
    • [youtube] Prefer audio stream that YouTube considers default
    • [youtube] Remove annotations and deprecate --write-annotations by coletdjnz
    • [Zee5] Fix extractor and add subtitles by Ashish0804

    Bug fixes

    • [aria2c] Obey --rate-limit
    • [EmbedSubtitle] Continue even if some files are missing
    • [extractor] Better error message for DRM
    • [extractor] Common function _match_valid_url
    • [extractor] Show video id in error messages if possible
    • [FormatSort] Remove priority of lang
    • [options] Add _set_from_options_callback
    • [SubtitleConvertor] Fix bug during subtitle conversion
    • [utils] Add parse_qs
    • [webvtt] Fix timestamp overflow adjustment by fstirlitz
    • Bugfix for --replace-in-metadata
    • Don't try to merge with final extension
    • Fix --force-overwrites when using -k
    • Fix --no-prefer-free-formats by CeruleanSky
    • Fix -F for extractors that directly return url
    • Fix -J when there are failed videos
    • Fix extra_info being reused across runs
    • Fix playlist_index not obeying playlist_start and add tests
    • Fix resuming of single formats when using --no-part
    • Revert erroneous use of the Content-Length header by fstirlitz
    • Use os.replace where applicable by; paulwrubel
    • [build] Add homebrew taps yt-dlp/taps/yt-dlp by nao20010128nao
    • [build] Fix bug in making yt-dlp.tar.gz
    • [docs] Fix some typos by pukkandan, zootedb0t
    • [cleanup] Replace improper use of tab in trovo by glenn-slayden

    For sponskrub users:

    • sponskrub support has been deprecated in favor of a native implementation
    • If you were using sponskrub to mark chapters in video, use --sponsorblock-mark all instead
    • If you were cutting out portions, use --sponsorblock-remove all
    • There are a few more new options available now. See SponsorBlock Options for details
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(247 bytes)
    SHA2-512SUMS(423 bytes)
    yt-dlp(1.95 MB)
    yt-dlp.exe(11.67 MB)
    yt-dlp.tar.gz(3.52 MB)
    yt-dlp_x86.exe(9.58 MB)
  • 2021.08.10(Aug 10, 2021)

    Changelog:

    • Add option --replace-in-metadata
    • Add option --no-simulate to not simulate even when --print or --list... are used - Deprecates --print-json
    • Allow entire infodict to be printed using %()s - makes --dump-json redundant
    • Allow multiple --exec and --exec-before-download
    • Add regex to --match-filter
    • Add all format filtering operators also to --match-filter by max-te
    • Add compat-option no-keep-subs
    • [adobepass] Add MSO Cablevision by Jessecar96
    • [BandCamp] Add BandcampMusicIE by Ashish0804
    • [blackboardcollaborate] Add new extractor by mzbaulhaque
    • [eroprofile] Add album downloader by jhwgh1968
    • [mirrativ] Add extractors by nao20010128nao
    • [openrec] Add extractors by nao20010128nao
    • [nbcolympics:stream] Fix extractor by nchilada, pukkandan
    • [nbcolympics] Update extractor for 2020 olympics by wesnm
    • [paramountplus] Separate extractor and fix some titles by shirt, pukkandan
    • [RCTIPlus] Support events and TV by MinePlayersPE
    • [Newgrounds] Improve extractor and fix playlist by u-spec-png
    • [aenetworks] Update _THEPLATFORM_KEY and _THEPLATFORM_SECRET by wesnm
    • [crunchyroll] Fix thumbnail by funniray
    • [HotStar] Use API for metadata and extract subtitles by Ashish0804
    • [instagram] Fix comments extraction by u-spec-png
    • [peertube] Fix videos without description by u-spec-png
    • [twitch:clips] Extract display_id by dirkf
    • [viki] Print error message from API request
    • [Vine] Remove invalid formats by u-spec-png
    • [VrtNU] Fix XSRF token by pgaig
    • [vrv] Fix thumbnail extraction by funniray
    • [youtube] Add extractor-arg include-live-dash to show live dash formats
    • [youtube] Improve signature function detection by PSlava
    • [youtube] Raise appropriate error when API pages can't be downloaded
    • Ensure _write_ytdl_file closes file handle on error
    • Fix --compat-options filename by stdedos
    • Fix issues with infodict sanitization
    • Fix resuming when using --no-part
    • Fix wrong extension for intermediate files
    • Handle BrokenPipeError by kikuyan
    • Show libraries present in verbose head
    • [extractor] Detect sttp as subtitles in MPD by fstirlitz
    • [extractor] Reset non-repeating warnings per video
    • [ffmpeg] Fix streaming mp4 to stdout
    • [ffpmeg] Allow --ffmpeg-location to be a file with different name
    • [utils] Fix InAdvancePagedList.__getitem__
    • [utils] Fix traverse_obj depth when is_user_input
    • [webvtt] Merge daisy-chained duplicate cues by fstirlitz
    • [build] Use custom build of pyinstaller by shirt
    • [tests:download] Add batch testing for extractors (test_YourExtractor_all)
    • [docs] Document which fields --add-metadata adds to the file
    • [docs] Fix some mistakes and improve doc
    • [cleanup] Misc code cleanup
    Source code(tar.gz)
    Source code(zip)
    SHA2-256SUMS(247 bytes)
    SHA2-512SUMS(423 bytes)
    yt-dlp(1.92 MB)
    yt-dlp.exe(11.63 MB)
    yt-dlp.tar.gz(2.01 MB)
    yt-dlp_x86.exe(9.54 MB)
Using Youtube downloader is the fast and easy way to download and save any YouTube video.

Youtube video downloader using Django Using Django as a backend along with pytube module to create Youtbue Video Downloader. https://yt-videos-downloa

Suman Raj Khanal 10 Jun 18, 2022
Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio.

YouTube-Downloader Tkinter based YouTube video downloader works on pytube 11.0.2. Can download YouTube videos in 720p(HD), 144p and even only audio. G

Manav Grover 2 Dec 27, 2021
PyQt5 simple files , youtube videos and youtube playlist downloader

PyQt5 simple files , youtube videos and youtube playlist downloader

AmirHossein Mohammadi 7 Jul 25, 2022
YouTube Downloader is extremely simple program for downloading songs or playlists (in audio or video) from YouTube. Created using Python, PyTube and PySimpleGUI.

YouTube Downloader YouTube Downloader is extremely simple program for downloading songs or playlists (in audio or video) from YouTube. Disclaimer It's

Simeon Tsvetanov 3 Dec 14, 2022
DYA ( Ditch YouTube API ) is a package created to power the user with YouTube Data API functionality without any API Key

Ditch YouTubeAPI (BETA) DYA ( Ditch YouTube API ) is a package created to power the user with YouTube Data API functionality without any API Key Detai

Sougata Jana 23 Dec 22, 2022
Youtube Downloader is a Graphic User Interface(GUI) that lets users download a Youtube Video or Audio through a URL

Youtube Downloader This Python and Tkinter based GUI allows users to directly download the Best Resolution Videos and Audios from Youtube. Pa-fy Insta

Samarth Kumar 2 Jun 25, 2022
A simple Python program which uses youtube-dl for downloading YouTube videos as mp3 files.

yt-mp3 converter This is a simple Python program which uses youtube-dl for downloading YouTube videos as mp3 files. This program is for you if you are

nostalgicnerdpenguin 1 Oct 24, 2021
Youtube Downloader by PyTube é uma ferramenta simples com interface gráfica e escrito em python para baixar vídeos e playlists do youtube...

YouTube Downloader by PyTube O que é o YouTube Downloader by PyTube? YouTube Downloader by PyTube é um software simples para baixar vídeos no YouTube

Elizeu Barbosa Abreu 5 Jul 30, 2022
YouTube-Video-Downloader - Download Youtube Videos for free.

YouTube-Video-Downloader Download Youtube Videos for free. Installing Dependencies:- Windows pip install pytube Mac/Linux pip3 install pytube Clonin

Xception Inc. 1 Jan 1, 2022
Youtube_dl_helper - A hacky python script meant to automate the process of downloading mp3 files from YouTube using youtube-dl library

youtube_dl_helper A helper program meant to automate the process of downloading mp3 files from YouTube using youtube-dl library Dependencies In order

Guilherme Bittencourt de Borba 1 Jan 4, 2022
Youtube-music - Youtube music with python

youtube-music fzf on https://github.com/junegunn/fzf python3 ytb.py [no/yes] yes

direskyfer 0 Feb 3, 2022
YouTube Video publisher using youtube-dl & ROS2🐢

YouTube-publisher-ROS2 Publish sensor_msgs/Image by "YouTube" ?? ?? ?? ! You don't have to use webcamera or your video to check demos. Purpose Quick d

Ar-Ray 5 Dec 4, 2022
YouTube-Downloader - YouTube Video Downloader made using python

YouTube-Downloader YouTube Videos Downloder made using python.

Shivam 1 Jan 16, 2022
Youtube list to mp3 - Youtube list to mp3 downloader

Youtube list to mp3 downloader Tiny script to convert a list of youtube videos t

Papi Diagne 3 Feb 11, 2022
Python-Youtube-Downloader - An Open Source Python Youtube Downloader

Python-Youtube-Downloader Hello There This Is An Open Source Python Youtube Down

Flex Tools 3 Jun 14, 2022
Youtube Downloader is a simple but highly efficient Youtube Video Downloader, made completly using Python

Youtube Downloader is a simple but highly efficient Youtube Video Downloader, made completly using Python

Arsh 2 Nov 26, 2022
Youtube-downloader-using-Python - Youtube downloader using Python

Youtube-downloader-using-Python Hii guys !! Fancy to see here Welcome! built by

Lakshmi Deepak 2 Jun 9, 2022
FireDM is a python open source (Internet Download Manager) with multi-connections, high speed engine, it downloads general files and videos from youtube and tons of other streaming websites .

python open source (Internet Download Manager) with multi-connections, high speed engine, based on python, LibCurl, and youtube_dl https://github.com/firedm/FireDM

null 1.6k Apr 12, 2022
Most versatile Telegram torrent and youtube-dl bot.

TorToolkit Telegram So basically Tortoolkit is aimed to be the most versatile torrent leecher and Youtube-DL bot for telegram. This bot is highly cust

Yash Khadse 541 Dec 22, 2022