///////////////////////////////////////////////////////////////

常规选项

-h, --help                       打印帮助文本并退出
--version                        打印程序版本并退出
-U, --update                     将这个程序更新到最新版本。确保您有足够的权限(如果需要,可以使用sudo运行)
-i, --ignore-errors              忽略下载和后处理错误。即使后处理失败,downlocal也被认为是成功的
--no-abort-on-error              继续下一个关于下载错误的视频;例如跳过播放列表中不可用的视频(默认)
--abort-on-error                 如果发生错误,终止进一步的视频下载(别名:——no-ignore-errors)
--dump-user-agent                显示当前用户代理并退出
--list-extractors                列出所有支持的提取器并退出
--extractor-descriptions         所有支持的提取器和退出的输出描述
--force-generic-extractor        使用通用提取器强制提取
--default-search PREFIX          对不符合条件的url使用此前缀。
                                 例如“gvsearch2:”为搜索词“大苹果”从谷歌视频下载两个视频。
                                 使用值"auto"让yt-dlp进行猜测("auto_warning"在猜测时发出警告)"error"只是抛出一个错误。默认值“fixup_error”修复损坏的url,
                                 但如果无法进行搜索,则会发出错误
--ignore-config, --no-config     禁用加载除——config-location提供的配置文件外的任何配置文件。
                                 当在配置中给出时文件,不再加载进一步的配置文件。
                                 此外,(为了向后兼容)如果在系统配置文件中找到这个选项,
                                 则用户配置不会被加载
--config-location PATH           主配置文件的位置;到配置或其包含目录的路径
--flat-playlist                  不提取播放列表中的视频,只列出它们
--no-flat-playlist               提取一个playzist的视频
--mark-watched                   标记视频观看(甚至-模拟)。目前仅支持YouTube
--no-mark-watched                不标记观看的视频(默认)
--no-colors                      不发出彩色代码输出
--compat-options OPTS            可以帮助保持兼容性的选项使用youtube-dl或youtube-dlc
                                 通过恢复一些配置对yt-dlp的改动。看到“差异默认行为”的详细信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

网络选项

--proxy URL                      使用指定的HTTP/HTTPS/SOCKS代理。
                                 要启用SOCKS代理,请指定合适的代理
                                 计划。例如
                                 socks5: / / 127.0.0.1:1080 /。传入空的
                                 String(——proxy "")用于直接连接
--socket-timeout SECONDS         在放弃之前等待的时间,以秒为单位
--source-address IP              绑定到的客户端IP地址
-4, --force-ipv4                 通过IPv4进行所有连接
-6, --force-ipv6                 通过IPv6进行所有连接
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

地理限制

--geo-verification-proxy URL     使用此代理来验证的IP地址
                                 一些geo-restricted网站。默认的
                                 由——Proxy指定的代理(如果
                                 选项不存在)用于
                                 实际下载
--geo-bypass                     通过作假绕过地理限制X-Forwarded-For HTTP头
--no-geo-bypass                  不绕过地理限制通过伪造X-Forwarded-For HTTP报头

--geo-bypass-country CODE        武力绕过地理限制明确提供了两个字母的ISO 3166-2国家代码
--geo-bypass-ip-block IP_BLOCK  武力绕过地理限制在CIDR中明确提供的IP块符号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

视频选择

--playlist-start NUMBER          播放列表视频开始(默认为1)
--playlist-end NUMBER            播放列表视频结束(默认是最后)
--playlist-items ITEM_SPEC       播放列表视频项目下载。指定
                                 播放列表中视频的索引
                                 用逗号隔开,如:"——playlist-items
                                 1 2 5 8英寸,如果你想下载视频
                                 在播放列表中索引1,2,5,8。你可以
                                 指定范围:”——playlist-items
                                 1-3,7,10-13",它会下载视频
                                 在指数12 3 7 10 11 1213--max-downloads NUMBER           下载NUMBER文件后中止
--min-filesize SIZE              切勿下载任何小于尺寸(如50k或446m)的影片。
--max-filesize SIZE              切勿下载超过大小的影片(例如50k或446m)
--date DATE                      只下载在此日期上传的视频。日期可以是“YYYYMMDD”或以下格式"
                                 (now l today) [+-][0-9] (day lweek | month l year) (s)?"
--datebefore DATE                只下载在此日期或之前上传的视频。接受的日期格式与——date相同
--dateafter DATE                 只下载在此日期或之后上传的视频。接受的日期格式与——date相同
--match-filter FILTER            通用的视频滤镜。任何领域(见
                                 “输出模板”)可以与
                                 数字或使用运算符的字符串
                                 定义于“过滤格式”。你可以
                                 还可以简单地指定要匹配的字段
                                 Field is present and !字段"来检查是否
                                 该字段不存在。此外,
                                 Python风格的正则表达式匹配
                                 可以使用“~=”和多个
                                 过滤器可以用“&”进行检查。使用“\”
                                 转义"&"或引号(如果需要)。例如:
                                 ——match-filter”!is_live & like_count > ?One hundred.
                                 & description~='(?i)\bcats \& dogs\b'"
                                 只匹配那些不是直播的视频,有
                                 一个点赞数超过100(或类似数)
                                 字段不可用),并具有
                                 包含短语“猫”的描述
                                 &狗”(忽略案例)
--no-match-filter                不要使用通用的视频过滤器(默认)
--no-playlist                    如果URL指的是视频和播放列表,则只下载视频
--yes-playlist                   如果URL是指视频和播放列表,请下载播放列表
--age-limit YEARS                只下载适合特定年龄的视频
--download-archive FILE          只下载档案文件中没有列出的视频。记录所有下载视频的id
--break-on-existing              当遇到存档中的文件时,停止下载过程
--break-on-reject                当遇到已过滤掉的文件时,停止下载过程
--skip-playlist-after-errors N   允许的失败数,直到跳过播放列表的其余部分
--no-download-archive            不要使用存档文件(默认)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

下载选项

-N, --concurrent-fragments N     应该并发下载的dash/ hlnative视频片段数(默认为1)
-r, --limit-rate RATE            最大下载速率(字节/)(例如50K或4.2M)
--throttled-rate RATE            最小下载速率(以字节/秒为单位),低于此速率时将进行节流并重新提取视频数据(例如100K)


-R, --retries RETRIES            重试次数(默认为10),或“无限”
--fragment-retries RETRIES       一个片段的重试次数(默认为10),或“无限”(DASH, hLsnative和~ AAAISM)
--skip-unavailable-fragments     跳过DASH hlnative和ISM的不可用片段(默认)
                                 (Alias: --no-abort-on-unavailable-fragment)
--abort-on-unavailable-fragment  如果片段不可用,则中止下载
                                 (Alias: --no-skip-unavailable-fragments)
--keep-fragments                 下载完成后,将下载的片段保存在磁盘上
--no-keep-fragments              下载完成后删除下载的片段(默认)
--buffer-size SIZE               下载缓冲区的大小(例如1024或16K)(默认是1024)
--resize-buffer                  缓冲区大小从初始值——buffer-size(默认值)自动调整
--no-resize-buffer               不自动调整缓冲区大小
--http-chunk-size SIZE           基于块的HTTP下载块的大小(例如10485760或10M)(默认禁用)。
                                 可能对绕过网络服务器施加的带宽节流有用(实验)
--playlist-reverse               按倒序下载播放列表视频
--no-playlist-reverse            按默认顺序下载播放列表视频(默认)
--playlist-random                按随机顺序下载播放列表视频
--xattr-set-filesize             设置文件xattribute ytdl。文件大小与预期的文件大小
--hls-use-mpegts                 对HLS视频使用mpegts容器;允许一些播放器在下载时播放视频,
                                 并减少下载中断时文件损坏的机会。这在默认情况下为实时流启用
--no-hls-use-mpegts              不要在HLS视频中使用mpegts容器。当不下载实时流时,这是默认值
--downloader [PROTO:]NAME        要加载的外部下载程序的名称或路径
                                 使用(可选地)以协议为前缀
                                 (http, ftp, m3u8, dash, rstp, rtmp, mms)到
                                 用它来。目前支持本地,
                                 Aria2c avconv axel curl ffmpeg httpie
                                 wget(推荐:aria2c)。您可以使用
                                 此选项多次设置不同
                                 不同协议的下载程序。为
                                 示例:——downloader aria2c——downloader
                                 "dash,m3u8:native"将使用aria2c
                                 Http /ftp下载,和本机
                                 下载的dash/m3u8下载
                                 (别名:——external-downloader)
--downloader-args NAME:ARGS      把这些论点交给外部
                                 下载器。指定下载器名称和
                                 参数由冒号":"分隔。为
                                 Ffmpeg,参数可以传递给
                                 不同的位置使用相同的语法
                                 ——postprocessor-args。你可以用这个
                                 选择多次给予不同
                                 不同下载程序的参数
                                 (别名:——external-downloader-args)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

文件系统选项

-a, --batch-file FILE            包含要下载的url的文件('-' for
                                 stdin),每行一个URL。行开始
                                 '#'';'']'被认为是评论和忽视
--no-batch-file                  不从批处理文件中读取url(默认)
-P, --paths [TYPES:]PATH         文件所在的路径
                                 下载。指定文件类型和
                                 以冒号“:”分隔的路径。所有的
                                 支持与——output相同的类型。
                                 此外,您还可以提供“家”
                                 (默认)"temp"路径。所有
                                 中间文件首先被下载到
                                 临时路径和最终文件是
                                 下载后移动到主路径
                                 完成为止。如果。该选项将被忽略
                                 ——output是一个绝对路径
-o, --output [TYPES:]TEMPLATE    输出文件名模板;详见“输出模板”
--output-na-placeholder TEXT     不可用元的占位符值 输出文件名模板中的字段 (默认:“NA”)
--restrict-filenames             将文件名限制为ASCII字符,避免文件名中出现"&"和空格
--no-restrict-filenames          允许使用Unicode字符,"&"和空格文件名(默认)
--windows-filenames              强制文件名与窗口兼容
--no-windows-filenames           使文件名窗口兼容只有当使用windows(默认)
--trim-filenames LENGTH          限制文件名长度(不包括扩展)到指定的号码字符
-w, --no-overwrites              不覆盖任何文件
--force-overwrites               覆盖所有视频和元数据文件。他的选择包括——不继续
--no-force-overwrites            不覆盖视频,但覆盖相关文件(默认)
-c, --continue                   恢复部分下载的文件/片段(默认)
--no-continue                    不要恢复部分下载的片段。如果文件没有分片,则开始下载整个文件
--part                           使用.part文件而不是直接写入输出文件(默认)
--no-part                        不要使用。part文件-直接写入输出文件
--mtime                          使用Last-modified头来设置文件修改时间(默认)
--no-mtime                       不使用Last-modified头来设置文件修改时间
--write-description              将视频描述写入。description文件
--no-write-description           不写视频描述(默认)
--write-info-json                将视频元数据写入.info.json文件(可能包含个人信息)
--no-write-info-json             不写视频元数据(默认)
--write-playlist-metafiles       编写播放列表元数据,除了
                                 使用——write-info-json时的视频元数据,
                                 ——write-description等等。(默认)
--no-write-playlist-metafiles    当使用——write-info-json,——write-description等时,不要写入播放列表元数据。
--clean-infojson                 删除一些私有字段,例如
                                 infojson中的文件名。注意它
                                 还会有私人恩怨吗
                                 信息(默认)
--no-clean-infojson              将所有字段写入infojson
--write-comments                 检索视频评论放置在
                                 infojson。这些评论是牵强附会的
                                 没有这个选项,如果提取是
                                 以快速著称(别名:-get-comments)
--no-write-comments              不要检索视频评论,除非 撤离速度是众所周知的 (别名:——no-get-comments)
--load-info-json FILE            包含视频信息的JSON文件(使用"——write-info-json"选项创建)
--cookies FILE                   文件读取cookie和转储cookie罐子
--no-cookies                     不要从/文件默认读取/转储cookie)
--cookies-from-browser BROWSER[:PROFILE]
                                 的用户配置文件加载cookie
                                 给定的web浏览器。目前支持
                                 浏览器有:勇敢,铬,铬,
                                 Edge, firefox, opera, safari, vivaldi。你
                                 可以指定用户配置文件名称或
                                 使用"BROWSER:PROFILE_NAME"或
                                 “浏览器:PROFILE_PATH”。如果没有配置文件
                                 给定,最近访问的是
                                 使用
--no-cookies-from-browser        不要从浏览器加载cookie(默认)
--cache-dir DIR                  youtube-dl所在的文件系统中的位置
                                 可以存储一些下载的信息(如 作为客户端标识和签名)永久。
                                 默认情况下$XDG_CACHE_HOME/yt-dlp或
                                 ~ / .cache / yt-dlp
--no-cache-dir                   禁用文件系统缓存
--rm-cache-dir                   删除所有文件系统缓存文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

缩略图选项

--write-thumbnail                将缩略图图像写入磁盘
--no-write-thumbnail             不将缩略图图像写入磁盘(默认)
--write-all-thumbnails           将所有缩略图图像格式写入磁盘
--list-thumbnails                列出每个视频的可用缩略图。模拟除非使用-no- simulation

  • 1
  • 2
  • 3
  • 4
  • 5

互联网快捷方式选项

--write-link                     写一个互联网快捷方式文件,取决于
                                 在当前平台上(。url, .webloc或
                                 desktop)。该URL可能被操作系统缓存
--write-url-link                 编写一个。url的Windows互联网快捷方式。操作系统根据文件路径缓存URL
--write-webloc-link              编写一个。webloc macOS互联网快捷方式
--write-desktop-link             编写一个。desktop Linux internet快捷方式

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

详细程度和模拟选项

-q, --quiet                      启动安静模式。如果与——verbose一起使用,则将日志打印到stderr
--no-warnings                    忽略警告,
-s, --simulate                   不下载视频,不写任何东西到磁盘
--no-simulate                    即使使用了打印/列表选项,也可以下载视频
--ignore-no-formats-error        忽略“无视频格式”错误。有用 提取元数据,即使是视频
                                 实际上不是可以下载的吗 (实验)
--no-ignore-no-formats-error     当没有找到可下载的视频格式时抛出错误(默认)
--skip-download                  不下载视频,但写入所有相关文件(别名:——no-download)
-O, --print TEMPLATE             安静的,但要为每个字段打印给定的字段 视频。模拟除非——no- simulation是
                                 使用。一个字段名或相同的语法 可以使用输出模板
-j, --dump-json                  安静的,但是为每个输出JSON信息
                                 视频。模拟除非——no- simulation是
                                 使用。参见“输出模板”
                                 可用密钥描述
-J, --dump-single-json           安静,但是为每个输出JSON信息
                                 Url或infojson已传递。模拟,除非
                                 ——no-simulate使用。如果URL指向
                                 一个播放列表,整个播放列表信息
                                 在一条线上倾倒
--force-write-archive            即使使用了-s或其他模拟选项,只要没有发生错误,就强制写入下载存档项
                                 (Alias: --force-download-archive)
--newline                        以新行输出进度条
--no-progress                    不打印进度条
--progress                       显示进度条,即使在安静模式
--console-title                  在控制台标题栏显示进度
--progress-template [TYPES:]TEMPLATE
                                 可选的进度输出模板
                                 以“download:(默认)作为前缀,
                                 “download-title”(主机游戏名称),
                                 “后处理:”或“postprocess-title:”。
                                 视频的字段可以在
                                 "info"键和进度属性是
                                 可在“进度”键下访问。例如:
                                 ——console-title progress-template
                                 “download-title: % s - (info.id) % (progress.eta)-v, --verbose                    打印各种调试信息
--dump-pages                     打印使用base64编码的下载页面以调试问题(非常冗长)
--write-pages                    将下载的中间页面写入当前目录中的文件以调试问题
--print-traffic                  显示发送和读取的HTTP流量

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

解决方法

--encoding ENCODING              强制指定的编码(实验性)
--no-check-certificate           禁止HTTPS证书验证
--prefer-insecure                使用未加密的连接来检索有关视频的信息(目前仅支持YouTube)
--user-agent UA                  指定自定义用户代理
--referer URL                    指定一个自定义引用,如果视频访问被限制在一个域使用
--add-header FIELD:VALUE         指定一个自定义HTTP报头及其值,用冒号":"分隔。你可以多次使用这个方法
--bidi-workaround                解决缺乏双向文本支持的终端。在PATH中需要双div r fribidi可执行文件
--sleep-requests SECONDS         数据提取期间请求之间的休眠秒数
--sleep-interval SECONDS         入睡前的秒数
                                 下载。这是最小的睡眠时间
                                 当与——max-sleep-interval一起使用时
                                 (别名:——min-sleep-interval)
--max-sleep-interval SECONDS     睡眠的最大秒数。只能与-min-sleep-interval一起使用
--sleep-subtitles SECONDS        每次字幕下载前休眠的秒数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

视频格式选项

-f, --format FORMAT              视频格式代码,详见“格式选择”
-S, --format-sort SORTORDER      根据给定的字段对格式进行排序,详见“格式排序”
--S-force, --format-sort-force   强制用户指定的排序顺序优先于所有字段,详情请参阅“排序格式”
--no-format-sort-force           有些字段优先于用户指定的排序顺序(默认),请参阅“排序格式”了解更多细节
--video-multistreams             允许多个视频流合并成一个单一的文件
--no-video-multistreams          每个输出文件只下载一个视频流(默认)
--audio-multistreams             允许多个音频流合并成一个单一的文件
--no-audio-multistreams          每个输出文件只下载一个音频流(默认)
--prefer-free-formats            更喜欢带有免费容器的视频格式 而非同等质量的免费产品。使用
                                 与“-S ext”严格偏好免费 集装箱不论质量如何
--no-prefer-free-formats         不要给空闲容器任何特殊的优先级(默认)
--check-formats                  检查所选的格式是否确实可以下载
--no-check-formats               不检查所选的格式实际上是可下载的
-F, --list-formats               列出每个视频的可用格式。模拟除非使用-no- simulation
--merge-output-format FORMAT     如果需要合并(例如,bestvideo+bestaudio),输出到给定的容器格式。mkv mp4 ogg
                                 webm flv。如果不需要合并,则忽略

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

字幕选项

--write-subs                     编写字幕文件
--no-write-subs                  不写字幕文件(默认)
--write-auto-subs                写自动生成的字幕文件(别名:——Write -automatic-subs)
--no-write-auto-subs             不写自动生成的字幕(默认)(别名:——no-write-automatic-subs)
--list-subs                      列出每个视频可用的字幕。模拟除非使用-no- simulation
--sub-format FORMAT              字幕格式,接受格式优先,例如:“srt”或“ass/srt/best”
--sub-langs LANGS                语言字幕下载(可以是正则表达式)或用逗号分隔的“全部”。
                                 (例如:——sub-langs en.*,ja 带有"-"的语言代码免除了它
                                 从请求的语言。(:——子 使用——list-subs 可用语言标记列表
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

身份验证选项

-u, --username USERNAME          使用此帐户ID登录
-p, --password PASSWORD          账户密码。如果省略了这个选项,那么yt-dlp将会交互地询问
-2, --twofactor TWOFACTOR        双因素身份验证代码
-n, --netrc                      使用.netrc身份验证数据
--netrc-location PATH            .netrc认证数据的位置;路径或其包含的目录。默认为~ / . netrc
--video-password PASSWORD        视频密码(vimeo, youku)
--ap-mso MSO                     Adobe Pass多系统运营商(电视供应商)标识符,使用——ap-list-mso为可用的mso列表
--ap-username USERNAME           多系统操作员帐号登录
--ap-password PASSWORD           多系统操作员帐号密码。
                                 如果省略了这个选项,那么yt-dlp将会交互地询问
--ap-list-mso                    列出所有支持的多系统操作符
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

后处理选项

-x, --extract-audio              将视频文件转换为音频文件(需要ffmpeg和ffprobe)
--audio-format FORMAT            指定音频格式以转换音频
                                 当使用-x时。目前支持
                                 格式有:best(默认)或
                                 最好| aac | flac mp3 | | m4a格式|作品| vorbis | wav
--audio-quality QUALITY          指定ffmpeg音频质量,插入一个
                                 值介于0(较好)9(较差)之间
                                 VBR或特定的比特率,如128K (默认5)
--remux-video FORMAT             将视频重新放入另一个容器,如果 必要的
                                 (目前支持:mp4|mkv|flv | webm | mov avi mp3 | | | mka | m4a格式| ogg |作品)。
                                 如果 目标容器不支持 视频/音频编解码器,重放将失败。你
                                 可以指定多个规则;如。 “aac>m4a/mov>mp4/mkv”将重放aac到 M4a, mov到mp4,其他任何东西到mkv。
--recode-video FORMAT            重新编码成另一种格式,如果 重新编码是必要的。的语法和 支持的格式与——remux-video相同
--postprocessor-args NAME:ARGS   将这些参数给后处理器。
                                 指定后处理器/可执行程序名称
                                 参数由冒号":"分隔
                                 将参数赋给指定的
                                 后处理程序/可执行。支持页:
                                 合并,ModifyChapters SplitChapters,
                                 ExtractAudio、VideoRemuxer VideoConvertor,
                                 元数据、EmbedSubtitle EmbedThumbnail,
                                 SubtitlesConvertor ThumbnailsConvertor,
                                 FixupStretched、FixupM4a FixupM3u8,
                                 FixupTimestamp FixupDuration。的
                                 支持的可执行文件有:AtomicParsley,
                                 FFmpeg FFprobe。你也可以指定
                                 “PP+EXE:ARGS”给出了论证
                                 仅在使用时指定可执行文件
                                 由指定的后处理程序处理。
                                 此外,对于ffmpeg/ffprobe, "_i"/"_o"
                                 可以附加到前缀可选
                                 后面跟着一个数字来传递参数
                                 在指定的输入/输出文件之前。例如:
                                 ——ppa“合并+ ffmpeg_i1: - v安静”。你可以
                                 多次使用这个选项
                                 不同的论点
                                 后处理程序。(别名:——ppa)
-k, --keep-video                 后期处理后将中间视频文件保存在磁盘上
--no-keep-video                  后期处理后删除中间视频文件(默认)
--post-overwrites                覆盖后期处理的文件(默认)
--no-post-overwrites             不覆盖后期处理的文件
--embed-subs                     视频中嵌入字幕(仅mp4, webm和mkv视频)
--no-embed-subs                  不要嵌入字幕(默认)
--embed-thumbnail                嵌入缩略图在视频作为封面艺术
--no-embed-thumbnail             不嵌入缩略图(默认)
--embed-metadata                 在视频文件中嵌入元数据。还增加了
                                 章节文件除非-no-add-章
                                 别名:——add-metadata
--no-embed-metadata              不添加元数据到文件(默认)(别名:——no-add-metadata)
--embed-chapters                 添加章节标记到视频文件(别名:——Add -)
--no-embed-chapters              不添加章节标记(默认)(别名:——no-add-)
--parse-metadata FROM:TO         解析其他领域的元数据,如标题/艺术家;详情请参见“修改元数据”
--replace-in-metadata FIELDS REGEX REPLACE 使用给定的正则表达式替换元数据字段中的文本。这个选项可以多次使用
--xattrs                         将元数据写入视频文件的xattrs(使用dublin core和xdg标准)
--fixup POLICY                  自动纠正系统的已知故障
                                文件。一个永远(什么都不做),警告(只有)
                                发出警告),detect_or_warn
                                违约;如果可以,修复文件,警告
                                否则),强制(尝试修复即使文件
                                已经存在
--ffmpeg-location PATH          ffmpeg二进制文件的位置;二进制文件或其包含目录的路径
--exec CMD                       在文件上执行命令
                                 下载和后处理。相同
                                 语法作为输出模板可以使用
                                 将任何字段作为参数传递给
                                 命令。附加字段“filepath”
                                 它包含了
                                 下载的文件也可用。如果没有
                                 字段被传递,%(filepath)q被追加
                                 直到命令的最后。这个选项可以
                                 多次使用
--no-exec                        删除任何先前定义的——exec
--exec-before-download CMD       执行命令之前,实际下载。语法与——exec相同
                                 但是“filepath”不可用。这选项可以多次使用
--no-exec-before-download        删除任何以前定义的- execute -before-download
--convert-subs FORMAT            将字幕转换为另一种格式(目前支持:srt|vtt|ass|lrc)(别名:——Convert -副标题)
--convert-thumbnails FORMAT      将缩略图转换为另一种格式(目前支持:jpg|png)
--split-chapters                 将视频分割成多个文件基于
                                 内部章节。“章:”前缀
                                 可以与"——paths""——output"一起使用
                                 设置分割的输出文件名
                                 文件。详见“OUTPUT TEMPLATE”
--no-split-chapters              不要基于章节分割视频(默认)
--remove-chapters REGEX          删除标题匹配的章节
                                 给定的正则表达式。时间范围
                                 用“*”作为前缀也可以在适当的地方使用
                                 的章节,以删除指定的范围。
                                 如:remove-chapters“* 10:15-15:00”
                                 ——remove-chapters“介绍”。这个选项可以多次使用
--no-remove-chapters             不要从文件中删除任何章节(默认)
--force-keyframes-at-cuts       强制关键帧围绕章节之前
                                删除/分裂。需要一个
                                重新编码会很慢,但是
                                最终的视频可能有更少的伪影
                                在削减
--no-force-keyframes-at-cuts    当切割/分割章节时,不要强制关键帧(默认)插件的(区分大小写)名称
--use-postprocessor NAME[:ARGS]  启用后处理器,以及 (可选)传递给它的参数,
                                 由冒号":"分隔。参数是一个
                                 分号";"分隔的NAME=VALUE列表。
                                 "when"参数决定 后处理程序被调用。它可以是
                                 “pre_process”(提取), "before_dl"(视频下载前)"post_process"(视频下载后;"after_move"(在移动文件后
                                 最终到达目的地)。这个选项可以 可多次使用以添加不同 后处理程序
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103

提取器选项

--extractor-retries RETRIES      已知提取器错误的重试次数(默认为3),或“无限”
--allow-dynamic-mpd              进程动态DASH清单(默认)(别名:——no-ignore-dynamic-mpd)
--ignore-dynamic-mpd             不处理动态DASH清单(别名:—no-allow-dynamic-mpd)
--hls-split-discontinuity        将HLS播放列表分割成不同的格式,如广告中断
--no-hls-split-discontinuity     不要将HLS播放列表分割成不同的格式,如广告中断(默认)
--extractor-args KEY:ARGS        将这些参数传递给提取器。看到 详细信息请参见“EXTRACTOR ARGUMENTS”。
                                 你可以多次使用这个选项 不同提取器的参数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

输出模板

-o选项用于指示输出文件名的模板,而-P选项用于指定每种类型的文件应保存到的路径。

tl;dr: 导航到示例。

最简单的用法-o是在下载单个文件时不设置任何模板参数,例如 in yt-dlp -o funny_video.flv "https://some/video"(不推荐像这样的硬编码文件扩展名,可能会破坏一些后处理)。

然而,它也可能包含在下载每个视频时将被替换的特殊序列。特殊序列可以根据python字符串格式化操作进行格式化。例如,%(NAME)s或%(NAME)05d。澄清一下,这是一个百分比符号,后跟括号中的名称,后跟格式化操作。

字段名本身(括号内的部分)也可以有一些特殊的格式:

对象遍历:可以使用.(点)分隔符遍历元数据中可用的字典和列表。您还可以使用:. 例如:%(tags.0)s, %(subtitles.en.-1.ext)s, %(id.3:7:-1)s, %(formats.:.format_id)s。%()s指的是整个 infodict。请注意,下面未列出使用此方法可用的所有字段。使用-j看到这样的领域
加法:数字字段的加法和减法可以分别使用+和来完成-。例如:%(playlist_index+10)03d%(n_entries+1-playlist_index)d
日期/时间格式:可以根据strftime 格式设置日期/时间字段的格式,方法是使用>. 例如:%(duration>%H-%M-%S)s, %(upload_date>%Y-%m-%d)s,%(epoch-3600>%H-%M-%S)s
备选:备选字段可以用,. 例如:%(release_date>%Y,upload_date>%Y|Unknown)s
Default:可以使用|分隔符指定字段为空时的文字默认值。这将覆盖--output-na-template. 例如:%(uploader|Unknown)s
更换算:除了正常格式类型diouxXeEfFgGcrs,B,j,l,q可用于转化成乙ytes,Ĵ子,逗号分隔升IST(替代形式标志#使得新线\n分隔)和一个串q uoted为终端,分别
Unicode 规范化:格式类型U可用于 NFC Unicode 规范化。替代形式标志 ( #) 将规范化更改为 NFD,并且转换标志+可用于 NFKC/NFKD 兼容性等价规范化。例如:%(title)+.100U是 NFKC
总而言之,字段的一般语法是:

%(name[.keys][addition][>strf][,alternate][|default])[flags][width][.precision][length]type
此外,您可以通过指定文件类型,后跟以冒号分隔的模板,为各种元数据文件分别设置不同的输出模板与通用输出模板:。支持的不同文件类型是subtitle、thumbnail、description、annotation(已弃用)、infojson、link、pl_thumbnail、pl_description、pl_infojson、chapter。例如,-o '%(title)s.%(ext)s' -o 'thumbnail:%(title)s\%(title)s.%(ext)s' 将缩略图放在与视频同名的文件夹中。如果任何模板(默认除外)为空,则不会写入该类型的文件。例如:--write-thumbnail -o "thumbnail:"只会为播放列表而不是视频编写缩略图。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
id (字符串):视频标识符
title (字符串):视频标题
url (字符串):视频网址
ext (字符串):视频文件扩展名
alt_title (字符串):视频的次要标题
description (字符串):视频的描述
display_id (字符串):视频的替代标识符
uploader (string): 视频上传者的全名
license (字符串):视频许可的许可名称
creator (字符串):视频的创建者
timestamp (数字):视频可用时的 UNIX 时间戳
upload_date (字符串):视频上传日期(YYYYMMDD)
release_date (string): 视频发布的日期 (YYYYMMDD)
release_timestamp (数字):视频发布时刻的 UNIX 时间戳
uploader_id (字符串):视频上传者的昵称或 ID
channel (字符串):上传视频的频道的全名
channel_id (字符串):频道的 ID
location (字符串):视频拍摄的物理位置
duration (数字):以秒为单位的视频长度
duration_string (字符串):视频的长度(HH:mm:ss)
view_count (数字):有多少用户在平台上观看过视频
like_count (数字):视频的正面评价数
dislike_count (数字):视频的负面评价数
repost_count (数字):视频的转发次数
average_rating (数字):用户给出的平均评分,使用的比例取决于网页
comment_count (numeric): 视频的评论数(对于一些提取器,评论只在最后下载,所以这个字段不能使用)
age_limit (数字):视频的年龄限制(年)
live_status (字符串):“is_live”、“was_live”、“is_upcoming”、“not_live”之一
is_live (boolean): 这个视频是直播还是定长视频
was_live (boolean): 这个视频最初是否是直播
playable_in_embed (string): 此视频是否允许在其他网站的嵌入式播放器中播放
availability (string): 视频是“private”、“premium_only”、“subscriber_only”、“needs_auth”、“unlisted”还是“public”
start_time (数字):在 URL 中指定的应开始再现的时间(以秒为单位)
end_time (数字):复制结束的时间(以秒为单位),如 URL 中所指定
format (string): 人类可读的格式描述
format_id (string): 指定的格式代码 --format
format_note (字符串):关于格式的附加信息
width (数字):视频的宽度
height (数字):视频的高度
resolution (string): 宽度和高度的文字描述
tbr (数字):以 KBit/s 为单位的音频和视频的平均比特率
abr (数字):以 KBit/s 为单位的平均音频比特率
acodec (字符串):正在使用的音频编解码器的名称
asr (数字):以赫兹为单位的音频采样率
vbr (数字):以 KBit/s 为单位的平均视频比特率
fps (数字):帧率
dynamic_range (字符串):视频的动态范围
vcodec (字符串):正在使用的视频编解码器的名称
container (字符串):容器格式的名称
filesize (数字):字节数,如果事先知道
filesize_approx (数字):估计字节数
protocol (字符串):将用于实际下载的协议
extractor (字符串):提取器的名称
extractor_key (string): 提取器的键名
epoch (数字):创建文件时的 Unix 纪元
autonumber (numeric): 每次下载都会增加的数字,从 --autonumber-start
n_entries (数字):播放列表中提取的项目总数
playlist (字符串):包含视频的播放列表的名称或 ID
playlist_index (数字):播放列表中视频的索引,根据最终索引填充前导零
playlist_autonumber (数字):视频在播放列表下载队列中的位置,根据播放列表的总长度填充前导零
playlist_id (字符串):播放列表标识符
playlist_title (字符串):播放列表标题
playlist_uploader (字符串):播放列表上传者的全名
playlist_uploader_id (字符串):播放列表上传者的昵称或 ID
webpage_url (字符串):视频网页的 URL,如果提供给 yt-dlp 应该允许再次获得相同的结果
original_url(字符串):用户提供的 URL(或与webpage_url播放列表条目相同)

可用于属于某个逻辑章节或部分的视频:

chapter (字符串):视频所属章节的名称或标题
chapter_number (数字):视频所属章节的编号
chapter_id (string): 视频所属章节的 ID
可用于作为某些系列或节目的一集的视频:

series (字符串):视频剧集所属的系列或节目的标题
season (字符串):视频剧集所属的季节标题
season_number (数字):视频剧集所属的季节编号
season_id (字符串):视频剧集所属的季节 ID
episode (字符串):视频集的标题
episode_number (数字):一季内的视频集数
episode_id (字符串):视频片段的 ID
可用于作为曲目或音乐专辑一部分的媒体:

track (字符串):曲目的标题
track_number (数字):专辑或光盘中的曲目编号
track_id (字符串):曲目的 ID
artist (字符串):曲目的艺术家
genre (字符串):曲目的流派
album (字符串):曲目所属专辑的标题
album_type (string): 专辑类型
album_artist (字符串):专辑中出现的所有艺术家的列表
disc_number (数字):曲目所属的光盘或其他物理介质的编号
release_year (数字):专辑发行年份(YYYY)
用于带有内部章节的视频chapter:时可用于前缀--split-chapters:

section_title (string): 章节标题
section_number (数字):文件中的章节编号
section_start (数字):章节的开始时间(以秒为单位)
section_end (数字):以秒为单位的章节结束时间
仅在用于--print以下情况时可用:

urls (string): 所有请求格式的 URL,每行一个
filename(字符串):视频文件的名称。请注意,实际文件名可能因后期处理而有所不同。用于--exec echo在所有后处理完成后获取名称
仅适用于--sponsorblock-chapter-title:

start_time (数字):章节的开始时间(以秒为单位)
end_time (数字):以秒为单位的章节结束时间
categories (列表):章节所属的 SponsorBlock 类别
category (string): 章节所属的最小 SponsorBlock 类别
category_names (列表):类别的友好名称
name (string): 最小类别的友好名称
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
输出模板示例
请注意,在 Windows 上,您需要使用双引号而不是单引号。
yt-dlp --get-filename -o ' %(title)s.%(ext)s ' BaW_jenozKc 
  • 1
  • 2
  • 3

格式选择

默认情况下,如果您不传递任何选项,yt-dlp 会尝试下载最佳可用质量。
这通常等同于使用-f bestvideo*+bestaudio/best.
但是,如果启用了多个音频流 ( --audio-multistreams),
则默认格式更改为-f bestvideo+bestaudio/best. 
同样,如果 ffmpeg 不可用,或者如果您使用 yt-dlp 流式传输到stdout( -o -),
则默认值变为-f best/bestvideo+bestaudio.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

您还可以使用特殊名称来选择特定的边缘情况格式:

all: 选择所有格式
mergeall:选择和合并所有格式(必须与使用--audio-multistreams,--video-multistreams或两者)
b*, best*: 无论是否包含视频或音频,选择最佳质量格式
w*, worst*: 选择质量最差的格式,不管它是否包含视频或音频
b, best: 选择包含视频和音频的最佳质量格式。相当于best*[vcodec!=none][acodec!=none]
w, worst: 选择包含视频和音频的最差质量格式。相当于worst*[vcodec!=none][acodec!=none]
bv, bestvideo: 选择最佳质量的纯视频格式。相当于best*[acodec=none]
wv, worstvideo: 选择质量最差的纯视频格式。相当于worst*[acodec=none]
bv*, bestvideo*: 选择包含视频的最佳质量格式。它还可能包含音频。相当于best*[vcodec!=none]
wv*, worstvideo*: 选择包含视频的最差质量格式。它还可能包含音频。相当于worst*[vcodec!=none]
ba, bestaudio: 选择质量最好的纯音频格式。相当于best*[vcodec=none]
wa, worstaudio: 选择质量最差的纯音频格式。相当于worst*[vcodec=none]
ba*, bestaudio*: 选择包含音频的最佳质量格式。它还可能包含视频。相当于best*[acodec!=none]
wa*, worstaudio*: 选择包含音频的最差质量格式。它还可能包含视频。相当于worst*[acodec!=none]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

过滤格式


您还可以通过将条件放在括号中来过滤视频格式,如-f “best[height=720]”(或-f “[filesize>10M]”)。
以下数字元字段可用于比较<, <=, >, >=, =(equals), !=(not equals):

filesize: 字节数,如果事先知道的话
width:视频的宽度(如果已知)
height:视频的高度(如果已知)
tbr: 音频和视频的平均比特率 (KBit/s)
abr:以 KBit/s 为单位的平均音频比特率
vbr: 以 KBit/s 为单位的平均视频比特率
asr:以赫兹为单位的音频采样率
fps:帧率
还过滤比较=(equals), ^=(starts with), $=(ends with), *=(contains) 和以下字符串元字段的工作:

ext: 文件扩展名
acodec:正在使用的音频编解码器的名称
vcodec:正在使用的视频编解码器的名称
container: 容器格式的名称
protocol: 将用于实际下载的协议,小写 ( http, https, rtsp, rtmp, rtmpe, mms, f4m, ism, http_dash_segments, m3u8, or m3u8_native)
format_id: 格式的简短描述
language: 语言代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

排序格式

您可以best使用-S( --format-sort)更改被视为 的标准。这个的一般格式是--format-sort field1,field2....

可用的字段是:

hasvid:优先考虑具有视频流的格式
hasaud:优先考虑具有音频流的格式
ie_pref:提取器给出的格式首选项
lang:提取器给出的语言偏好
quality:提取器给出的格式质量
source: 提取器给出的来源偏好
proto: 用于下载的协议 ( https/ ftps> http/ ftp> m3u8_native/ m3u8> http_dash_segments> websocket_frag> 其他 > mms/ rtsp> > 未知 > f4f/ f4m)
vcodec:视频编解码器(av01> vp9.2> vp9> h265> h264> vp8> h263> theora>其它>未知)
acodec:音频编解码器(opus> vorbis> aac> mp4a> mp3> ac3> dts>其他>未知)
codec: 相当于 vcodec,acodec
vext: 视频扩展名 ( mp4> webm> flv> 其他 > 未知)。如果--prefer-free-formats使用,webm则首选。
aext:音频扩展(m4a> aac> mp3> ogg> opus> webm> 其他 > 未知)。如果--prefer-free-formats使用,则顺序更改为opus> ogg> webm> m4a> mp3> aac。
ext: 相当于 vext,aext
filesize: 确切的文件大小,如果事先知道的话。这将不适用于 mu38 和 DASH 格式。
fs_approx:根据清单计算的近似文件大小
size: 如果可用,则为精确文件大小,否则为近似文件大小
height: 视频高度
width: 视频宽度
res:视频分辨率,以最小尺寸计算。
fps: 视频帧率
hdr: 视频的动态范围 ( DV> HDR12> HDR10+> HDR10> HLG> SDR)
tbr:以 KBit/s 为单位的总平均比特率
vbr: 以 KBit/s 为单位的平均视频比特率
abr:以 KBit/s 为单位的平均音频比特率
br: 相当于使用 tbr,vbr,abr
asr:以Hz为单位的音频采样率
请注意,在 Windows 上,您可能需要使用双引号而不是单引号。

#下载并合并最好的纯视频格式和最好的纯音频格式,
#或者如果纯视频格式不可用,则下载最好的组合格式
$ yt-dlp -f ' bv+ba/b '
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

YT-DLP


这是一个更完整的程序示例,该程序仅输出错误(以及下载完成后的一条短消息),将视频转换为 mp3 文件,实现自定义后处理器并将最终 info_dict 打印为 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)))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52