update yt-dlp and fix some bugs with TPE2. Fixes #3
This commit is contained in:
@@ -265,7 +265,7 @@ One of \[dq]default\[dq] (only when known to be useful),
|
||||
.SS Video Selection:
|
||||
.TP
|
||||
-I, --playlist-items \f[I]ITEM_SPEC\f[R]
|
||||
Comma separated playlist_index of the items to download.
|
||||
Comma-separated playlist_index of the items to download.
|
||||
You can specify a range using \[dq][START]:[STOP][:STEP]\[dq].
|
||||
For backward compatibility, START-STOP is also supported.
|
||||
Use negative indices to count from the right and negative STEP to
|
||||
@@ -811,6 +811,9 @@ Video format code, see \[dq]FORMAT SELECTION\[dq] for more details
|
||||
Sort the formats by the fields given, see \[dq]Sorting Formats\[dq] for
|
||||
more details
|
||||
.TP
|
||||
--format-sort-reset
|
||||
Disregard previous user specified sort order and reset to the default
|
||||
.TP
|
||||
--format-sort-force
|
||||
Force user specified sort order to have precedence over all fields, see
|
||||
\[dq]Sorting Formats\[dq] for more details (Alias: --S-force)
|
||||
@@ -1513,7 +1516,7 @@ E.g.
|
||||
\f[V]diouxXeEfFgGcrs\f[R], yt-dlp additionally supports converting to
|
||||
\f[V]B\f[R] = \f[B]B\f[R]ytes, \f[V]j\f[R] = \f[B]j\f[R]son (flag
|
||||
\f[V]#\f[R] for pretty-printing, \f[V]+\f[R] for Unicode), \f[V]h\f[R] =
|
||||
HTML escaping, \f[V]l\f[R] = a comma separated \f[B]l\f[R]ist (flag
|
||||
HTML escaping, \f[V]l\f[R] = a comma-separated \f[B]l\f[R]ist (flag
|
||||
\f[V]#\f[R] for \f[V]\[rs]n\f[R] newline-separated), \f[V]q\f[R] = a
|
||||
string \f[B]q\f[R]uoted for the terminal (flag \f[V]#\f[R] to split a
|
||||
list into different arguments), \f[V]D\f[R] = add \f[B]D\f[R]ecimal
|
||||
@@ -1650,6 +1653,9 @@ scale used depends on the webpage
|
||||
some extractors, comments are only downloaded at the end, and so this
|
||||
field cannot be used)
|
||||
.IP \[bu] 2
|
||||
\f[V]save_count\f[R] (numeric): Number of times the video has been saved
|
||||
or bookmarked
|
||||
.IP \[bu] 2
|
||||
\f[V]age_limit\f[R] (numeric): Age restriction for the video (years)
|
||||
.IP \[bu] 2
|
||||
\f[V]live_status\f[R] (string): One of \[dq]not_live\[dq],
|
||||
@@ -2349,6 +2355,18 @@ filesize instead.
|
||||
So it is generally better to use
|
||||
\f[V]-f best -S +size,+br,+res,+fps\f[R].
|
||||
.PP
|
||||
If you use the \f[V]-S\f[R]/\f[V]--format-sort\f[R] option multiple
|
||||
times, each subsequent sorting argument will be prepended to the
|
||||
previous one, and only the highest priority entry of any duplicated
|
||||
field will be preserved.
|
||||
E.g.
|
||||
\f[V]-S proto -S res\f[R] is equivalent to \f[V]-S res,proto\f[R], and
|
||||
\f[V]-S res:720,fps -S vcodec,res:1080\f[R] is equivalent to
|
||||
\f[V]-S vcodec,res:1080,fps\f[R].
|
||||
You can use \f[V]--format-sort-reset\f[R] to disregard any previously
|
||||
passed \f[V]-S\f[R]/\f[V]--format-sort\f[R] arguments and reset to the
|
||||
default order.
|
||||
.PP
|
||||
\f[B]Tip\f[R]: You can use the \f[V]-v -F\f[R] to see how the formats
|
||||
have been sorted (worst to best).
|
||||
.SS Format Selection examples
|
||||
@@ -2582,12 +2600,13 @@ T}
|
||||
T{
|
||||
\f[V]genre\f[R]
|
||||
T}@T{
|
||||
\f[V]genre\f[R] or \f[V]genres\f[R]
|
||||
\f[V]genre\f[R], \f[V]genres\f[R], \f[V]categories\f[R] or
|
||||
\f[V]tags\f[R]
|
||||
T}
|
||||
T{
|
||||
\f[V]album\f[R]
|
||||
T}@T{
|
||||
\f[V]album\f[R]
|
||||
\f[V]album\f[R] or \f[V]series\f[R]
|
||||
T}
|
||||
T{
|
||||
\f[V]album_artist\f[R]
|
||||
@@ -2637,6 +2656,9 @@ $ yt-dlp --parse-metadata \[dq]title:%(artist)s - %(title)s\[dq]
|
||||
# Regex example
|
||||
$ yt-dlp --parse-metadata \[dq]description:Artist - (?P<artist>.+)\[dq]
|
||||
|
||||
# Copy the episode field to the title field (with FROM and TO as single fields)
|
||||
$ yt-dlp --parse-metadata \[dq]episode:title\[dq]
|
||||
|
||||
# Set title as \[dq]Series name S01E05\[dq]
|
||||
$ yt-dlp --parse-metadata \[dq]%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s\[dq]
|
||||
|
||||
@@ -2691,14 +2713,14 @@ respectively
|
||||
\f[V]player_client\f[R]: Clients to extract video data from.
|
||||
The currently available clients are \f[V]web\f[R], \f[V]web_safari\f[R],
|
||||
\f[V]web_embedded\f[R], \f[V]web_music\f[R], \f[V]web_creator\f[R],
|
||||
\f[V]mweb\f[R], \f[V]ios\f[R], \f[V]android\f[R],
|
||||
\f[V]android_sdkless\f[R], \f[V]android_vr\f[R], \f[V]tv\f[R],
|
||||
\f[V]mweb\f[R], \f[V]ios\f[R], \f[V]ios_downgraded\f[R],
|
||||
\f[V]android\f[R], \f[V]android_vr\f[R], \f[V]tv\f[R],
|
||||
\f[V]tv_simply\f[R], \f[V]tv_downgraded\f[R], and \f[V]tv_embedded\f[R].
|
||||
By default, \f[V]tv,android_sdkless,web\f[R] is used.
|
||||
If no JavaScript runtime is available, then
|
||||
\f[V]android_sdkless,web_safari,web\f[R] is used.
|
||||
By default, \f[V]android_vr,ios_downgraded,web,web_safari\f[R] is used.
|
||||
If no JavaScript runtime/engine is available, then
|
||||
\f[V]android_vr,ios_downgraded\f[R] is used.
|
||||
If logged-in cookies are passed to yt-dlp, then
|
||||
\f[V]tv_downgraded,web_safari,web\f[R] is used for free accounts and
|
||||
\f[V]tv_downgraded,web,web_safari\f[R] is used for free accounts and
|
||||
\f[V]tv_downgraded,web_creator,web\f[R] is used for premium accounts.
|
||||
The \f[V]web_music\f[R] client is added for \f[V]music.youtube.com\f[R]
|
||||
URLs when logged-in cookies are used.
|
||||
@@ -2757,13 +2779,18 @@ choose comment sorting mode (on YouTube\[aq]s side)
|
||||
.IP \[bu] 2
|
||||
\f[V]max_comments\f[R]: Limit the amount of comments to gather.
|
||||
Comma-separated list of integers representing
|
||||
\f[V]max-comments,max-parents,max-replies,max-replies-per-thread\f[R].
|
||||
Default is \f[V]all,all,all,all\f[R]
|
||||
\f[V]max-comments,max-parents,max-replies,max-replies-per-thread,max-depth\f[R].
|
||||
Default is \f[V]all,all,all,all,all\f[R]
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
A \f[V]max-depth\f[R] value of \f[V]1\f[R] will discard all replies,
|
||||
regardless of the \f[V]max-replies\f[R] or
|
||||
\f[V]max-replies-per-thread\f[R] values given
|
||||
.IP \[bu] 2
|
||||
E.g.
|
||||
\f[V]all,all,1000,10\f[R] will get a maximum of 1000 replies total, with
|
||||
up to 10 replies per thread.
|
||||
\f[V]all,all,1000,10,2\f[R] will get a maximum of 1000 replies total,
|
||||
with up to 10 replies per thread, and only 2 levels of depth (i.e.
|
||||
top-level comments plus their immediate replies).
|
||||
\f[V]1000,all,100\f[R] will get a maximum of 1000 comments, with a
|
||||
maximum of 100 replies total
|
||||
.RE
|
||||
@@ -2801,7 +2828,7 @@ If a session from a browser is wanted, you should pass cookies instead
|
||||
(which contain the Visitor ID)
|
||||
.IP \[bu] 2
|
||||
\f[V]po_token\f[R]: Proof of Origin (PO) Token(s) to use.
|
||||
Comma seperated list of PO Tokens in the format
|
||||
Comma-separated list of PO Tokens in the format
|
||||
\f[V]CLIENT.CONTEXT+PO_TOKEN\f[R], e.g.
|
||||
\f[V]youtube:po_token=web.gvs+XXX,web.player=XXX,web_safari.gvs+YYY\f[R].
|
||||
Context can be any of \f[V]gvs\f[R] (Google Video Server URLs),
|
||||
@@ -2818,20 +2845,23 @@ client requires one for the given context), \f[V]never\f[R] (never fetch
|
||||
a PO Token), or \f[V]auto\f[R] (default; only fetch a PO Token if the
|
||||
client requires one for the given context)
|
||||
.IP \[bu] 2
|
||||
\f[V]playback_wait\f[R]: Duration (in seconds) to wait inbetween the
|
||||
extraction and download stages in order to ensure the formats are
|
||||
available.
|
||||
The default is \f[V]6\f[R] seconds
|
||||
.IP \[bu] 2
|
||||
\f[V]jsc_trace\f[R]: Enable debug logging for JS Challenge fetching.
|
||||
Either \f[V]true\f[R] or \f[V]false\f[R] (default)
|
||||
.IP \[bu] 2
|
||||
\f[V]use_ad_playback_context\f[R]: Skip preroll ads to eliminate the
|
||||
mandatory wait period before download.
|
||||
Do NOT use this when passing premium account cookies to yt-dlp, as it
|
||||
will result in a loss of premium formats.
|
||||
Only effective with the \f[V]web\f[R], \f[V]web_safari\f[R],
|
||||
\f[V]web_music\f[R] and \f[V]mweb\f[R] player clients.
|
||||
Either \f[V]true\f[R] or \f[V]false\f[R] (default)
|
||||
.SS youtube-ejs
|
||||
.IP \[bu] 2
|
||||
\f[V]jitless\f[R]: Run suported Javascript engines in JIT-less mode.
|
||||
\f[V]jitless\f[R]: Run supported Javascript engines in JIT-less mode.
|
||||
Supported runtimes are \f[V]deno\f[R], \f[V]node\f[R] and \f[V]bun\f[R].
|
||||
Provides better security at the cost of performance/speed.
|
||||
Do note that \f[V]node\f[R] and \f[V]bun\f[R] are still considered
|
||||
unsecure.
|
||||
insecure.
|
||||
Either \f[V]true\f[R] or \f[V]false\f[R] (default)
|
||||
.SS youtubepot-webpo
|
||||
.IP \[bu] 2
|
||||
@@ -3045,9 +3075,10 @@ Default is \f[V]asc\f[R]
|
||||
.IP \[bu] 2
|
||||
\f[V]client\f[R]: Client to extract video data from.
|
||||
The currently available clients are \f[V]android\f[R], \f[V]ios\f[R],
|
||||
and \f[V]web\f[R].
|
||||
\f[V]macos\f[R] and \f[V]web\f[R].
|
||||
Only one client can be used.
|
||||
The \f[V]web\f[R] client is used by default.
|
||||
The \f[V]macos\f[R] client is used by default, but the \f[V]web\f[R]
|
||||
client is used when logged-in.
|
||||
The \f[V]web\f[R] client only works with account cookies or login
|
||||
credentials.
|
||||
The \f[V]android\f[R] and \f[V]ios\f[R] clients only work with
|
||||
@@ -3161,8 +3192,8 @@ Python versions 3.10+ (CPython) and 3.11+ (PyPy) are supported.
|
||||
Other versions and implementations may or may not work correctly.
|
||||
.PP
|
||||
While all the other dependencies are optional, \f[V]ffmpeg\f[R],
|
||||
\f[V]ffprobe\f[R], \f[V]yt-dlp-ejs\f[R] and a JavaScript runtime are
|
||||
highly recommended
|
||||
\f[V]ffprobe\f[R], \f[V]yt-dlp-ejs\f[R] and a supported JavaScript
|
||||
runtime/engine are highly recommended
|
||||
.SS Strongly recommended
|
||||
.IP \[bu] 2
|
||||
\f[B]ffmpeg\f[R] and \f[B]ffprobe\f[R] (https://www.ffmpeg.org) -
|
||||
@@ -3185,8 +3216,8 @@ for details on the specific issues solved by these builds
|
||||
name (https://pypi.org/project/ffmpeg)
|
||||
.RE
|
||||
.IP \[bu] 2
|
||||
\f[B]yt-dlp-ejs\f[R] (https://github.com/yt-dlp/ejs) - Required for
|
||||
deciphering YouTube n/sig values.
|
||||
\f[B]yt-dlp-ejs\f[R] (https://github.com/yt-dlp/ejs) - Required for full
|
||||
YouTube support.
|
||||
Licensed under
|
||||
Unlicense (https://github.com/yt-dlp/ejs/blob/main/LICENSE), bundles
|
||||
MIT (https://github.com/davidbonnet/astring/blob/main/LICENSE) and
|
||||
@@ -3194,7 +3225,7 @@ ISC (https://github.com/meriyah/meriyah/blob/main/LICENSE.md)
|
||||
components.
|
||||
.RS 2
|
||||
.PP
|
||||
A JavaScript runtime like \f[B]deno\f[R] (https://deno.land)
|
||||
A JavaScript runtime/engine like \f[B]deno\f[R] (https://deno.land)
|
||||
(recommended), \f[B]node.js\f[R] (https://nodejs.org),
|
||||
\f[B]bun\f[R] (https://bun.sh), or
|
||||
\f[B]QuickJS\f[R] (https://bellard.org/quickjs/) is also required to run
|
||||
@@ -3237,7 +3268,7 @@ Licensed under
|
||||
MIT (https://github.com/lexiforest/curl_cffi/blob/main/LICENSE)
|
||||
.RS 2
|
||||
.IP \[bu] 2
|
||||
Can be installed with the \f[V]curl-cffi\f[R] group, e.g.
|
||||
Can be installed with the \f[V]curl-cffi\f[R] extra, e.g.
|
||||
\f[V]pip install \[dq]yt-dlp[default,curl-cffi]\[dq]\f[R]
|
||||
.IP \[bu] 2
|
||||
Currently included in most builds \f[I]except\f[R] \f[V]yt-dlp\f[R]
|
||||
@@ -3326,7 +3357,7 @@ You can run the following commands:
|
||||
.IP
|
||||
.nf
|
||||
\f[C]
|
||||
python devscripts/install_deps.py --include-group pyinstaller
|
||||
python devscripts/install_deps.py --include-extra pyinstaller
|
||||
python devscripts/make_lazy_extractors.py
|
||||
python -m bundle.pyinstaller
|
||||
\f[R]
|
||||
@@ -4056,7 +4087,7 @@ default.
|
||||
Use \f[V]--mtime\f[R] or \f[V]--compat-options mtime-by-default\f[R] to
|
||||
revert this.
|
||||
.PP
|
||||
For ease of use, a few more compat options are available:
|
||||
For convenience, there are some compat option aliases available to use:
|
||||
.IP \[bu] 2
|
||||
\f[V]--compat-options all\f[R]: Use all compat options (\f[B]Do NOT use
|
||||
this!\f[R])
|
||||
@@ -4077,9 +4108,15 @@ this!\f[R])
|
||||
\f[V]--compat-options 2024,prefer-vp9-sort\f[R]
|
||||
.IP \[bu] 2
|
||||
\f[V]--compat-options 2024\f[R]: Same as
|
||||
\f[V]--compat-options mtime-by-default\f[R].
|
||||
\f[V]--compat-options 2025,mtime-by-default\f[R]
|
||||
.IP \[bu] 2
|
||||
\f[V]--compat-options 2025\f[R]: Currently does nothing.
|
||||
Use this to enable all future compat options
|
||||
.PP
|
||||
Using one of the yearly compat option aliases will pin yt-dlp\[aq]s
|
||||
default behavior to what it was at the \f[I]end\f[R] of that calendar
|
||||
year.
|
||||
.PP
|
||||
The following compat options restore vulnerable behavior from before
|
||||
security patches:
|
||||
.IP \[bu] 2
|
||||
|
||||
Reference in New Issue
Block a user