YoutubeDL 类是 youtube-dl 系统的核心协调组件。它管理整个下载流程,协调提取器、下载器和后处理器,以提取视频信息、下载媒体内容并处理下载的文件。
本文档提供了 YoutubeDL 类、其初始化、核心功能以及与其他系统组件交互的详细概述。有关命令行界面的信息,请参阅 命令行界面。有关配置选项的详细信息,请参阅 配置和选项。
YoutubeDL 类是以编程方式使用 youtube-dl 的主要入口点。它充当一个协调器,负责:
来源: youtube_dl/YoutubeDL.py147-356 youtube_dl/__init__.py444-446
来源: youtube_dl/YoutubeDL.py147-497 youtube_dl/extractor/common.py97-416
来源: youtube_dl/YoutubeDL.py1260-1370 youtube_dl/YoutubeDL.py1930-2057
YoutubeDL 类通过一个控制其行为的参数字典进行初始化。这使得下载过程可以灵活配置。
构造函数接受一个参数字典和一个 auto_init 标志,该标志控制是否自动初始化提取器。
关键初始化步骤包括:
auto_init 为 True,则添加默认提取器该类维护几个重要的内部集合:
_ies:已注册的提取器类/实例列表_ies_instances:以 ID 为键的提取器实例字典_pps:后处理器列表来源: youtube_dl/YoutubeDL.py378-473 __init__.py319-442
YoutubeDL 类接受大量的配置参数。一些最重要的包括:
| 参数 | 类型 | 描述 |
|---|---|---|
| format | str | 视频格式代码或选择标准 |
| outtmpl | str | 输出文件名模板 |
| restrictfilenames | bool | 限制文件名,使其在文件系统中安全 |
| ignoreerrors | bool | 在下载错误时继续 |
| nocheckcertificate | bool | 不验证 SSL 证书 |
| postprocessors | list | 要应用的后处理器列表 |
| subtitleslangs | list | 要下载的字幕语言列表 |
| progress_hooks | list | 进度报告的钩子 |
| verbose | bool | 打印详细输出 |
| quiet | bool | 抑制正常输出 |
| simulate | bool | 不下载视频,仅提取信息 |
| cookiefile | str | 从中读取 cookie 的文件 |
有关所有可用参数的完整参考,请参阅 配置和选项。
来源: youtube_dl/YoutubeDL.py148-348 youtube_dl/options.py42-432
YoutubeDL 类提供了几个实现 youtube-dl 核心功能的方法。
来源: youtube_dl/YoutubeDL.py491-515
主下载方法接受一个 URL 列表并逐一处理
此方法作为下载过程的主要入口点。它处理各种错误情况、重试并可通过钩子报告进度。
来源: youtube_dl/YoutubeDL.py1260-1370
使用 extract_info 方法来提取有关 URL 的信息
此方法:
来源: youtube_dl/YoutubeDL.py1371-1566
使用 process_ie_result 方法处理提取器提取的信息
此方法处理不同类型的结果:
对于视频,它负责格式选择、年龄验证,并在请求时启动实际下载。
来源: youtube_dl/YoutubeDL.py1930-2057
YoutubeDL 类的关键功能之一是根据用户偏好选择最合适的格式。格式选择逻辑实现在 _build_format_selector 和相关方法中。
格式规范可以是:
来源: youtube_dl/YoutubeDL.py2267-2535
下载视频后,YoutubeDL 会应用后处理器来执行任务,例如:
后处理器使用 add_post_processor 方法添加,并在下载后按顺序应用。
来源: youtube_dl/YoutubeDL.py517-524 youtube_dl/YoutubeDL.py2738-2774
YoutubeDL 包含全面的错误处理和报告机制
系统使用几种自定义异常类型:
ExtractorError:用于提取器相关的错误DownloadError:用于下载相关的错误UnavailableVideoError:用于不可用的视频GeoRestrictedError:用于地理限制的内容YoutubeDL 提供几种报告信息的方法:
to_screen:将信息打印到屏幕to_stderr:打印到 stderrreport_warning:报告警告report_error:报告错误trouble:报告致命错误进度报告通过回调钩子进行
进度钩子接收关于下载状态、已下载字节数、总字节数和估计时间的信息。
来源: youtube_dl/YoutubeDL.py522-587 youtube_dl/YoutubeDL.py799-871
这是一个以编程方式使用 YoutubeDL 类的简化示例:
来源: youtube_dl/__init__.py444-446 test/test_YoutubeDL.py40-127
YoutubeDL 类是 youtube-dl 系统的核心组件,负责从 URL 处理到文件提取和后处理的整个下载过程。其灵活的配置选项和模块化架构使其能够处理各种各样的视频平台和下载场景。
YoutubeDL 设计的关键优势包括:
要以编程方式使用 youtube-dl 或扩展其功能(例如添加新的提取器或后处理器),理解 YoutubeDL 类至关重要。