菜单

下载系统

相关源文件

下载系统是 you-get 工具的核心组件,负责处理从远程服务器检索媒体内容并将其保存到磁盘的过程。本页文档介绍了下载功能的架构和工作流程,包括 HTTP 请求处理、进度显示、文件管理和媒体处理。

有关 URL 路由和站点检测,请参阅 URL 路由。有关下载后的媒体处理,请参阅 媒体处理

概述

you-get 下载系统提供了一个强大的框架,用于从各种网站检索媒体文件。它处理下载过程的所有方面,包括:

  1. 使用合适的标头发送 HTTP 请求
  2. 向用户显示下载进度
  3. 管理部分下载和续传
  4. 处理重定向和重试
  5. 处理和合并媒体片段

来源:src/you_get/common.py985-1123

关键组件

HTTP 客户端

下载系统包含一个全面的 HTTP 客户端实现,用于处理 Web 请求的各个方面。

  1. 请求处理:管理标头、Cookie 和重定向。
  2. 响应处理:处理压缩、内容类型和字符编码。
  3. 错误恢复:为超时和服务器错误实现重试机制。

来源:src/you_get/common.py451-499 src/you_get/common.py427-449

HTTP 客户端使用 Python 的 urllib 库,但对其进行了扩展,增加了如

功能实现目的
重试机制urlopen_with_retry()处理网络不稳定
压缩ungzip()undeflate()支持压缩响应
字符解码Content-Type 解析处理各种编码
Cookie处理手动 Cookie 管理支持身份验证

来源:src/you_get/common.py327-343 src/you_get/common.py466-478

下载功能

核心下载功能在 url_save() 中实现,该函数处理实际的文件传输并与进度显示集成。

来源:src/you_get/common.py670-833

下载功能的主要特点包括:

  1. 文件存在性检查:避免重新下载已存在的文件。
  2. 自动重命名:可以选择重命名已存在的文件。
  3. 续传支持:从中断处继续下载。
  4. 分块下载:高效处理大文件。
  5. 进度报告:与进度显示类集成。

进度显示

下载系统包含多种进度条实现,可在下载过程中提供视觉反馈。

  1. SimpleProgressBar:详细的进度条,显示百分比、大小和速度。
  2. PiecesProgressBar:多部分下载的简化进度条。
  3. DummyProgressBar:用于静默操作的空操作实现。

来源:src/you_get/common.py836-945

进度条提供有关以下方面的实时信息:

  • 下载百分比
  • 已下载大小与总大小
  • 下载速度
  • 多部分下载进度

下载流程

主要下载工作流程在 download_urls() 中实现,该函数协调整个过程。

来源:src/you_get/common.py985-1123

错误处理和恢复

下载系统包含强大的错误处理功能,可应对各种网络和服务器问题。

  1. 超时恢复:连接超时时自动重试。
  2. HTTP 错误处理:服务器错误时重试。
  3. 中断的下载:从中断处继续下载。
  4. 文件冲突:提供跳过、覆盖或重命名的选项。

来源:src/you_get/common.py427-449 src/you_get/common.py670-833

与媒体处理的集成

下载完成后,系统可以使用 FFmpeg 处理和合并媒体文件。

来源:src/you_get/common.py1067-1123 src/you_get/processor/ffmpeg.py57-238

系统支持合并各种媒体格式:

  • FLV/F4V 文件到 MP4
  • MP4 片段到单个 MP4
  • TS 片段到 MKV
  • MP3 片段到单个 MP3
  • 音频和视频流到单个文件

使用示例

示例 1:下载单个视频

下载单个视频文件时,下载系统会:

  1. 分析 URL 以确定文件类型和大小。
  2. 创建一个显示下载状态的进度条。
  3. 使用合适的标头下载文件。
  4. 以正确的扩展名保存文件。

YouTube、Bilibili 等提取器使用了这种模式。

来源:src/you_get/common.py1038-1046

示例 2:下载和合并片段

对于分段内容(例如 HLS 流),下载系统会:

  1. 单独下载每个片段。
  2. 跟踪所有片段的进度。
  3. 使用 FFmpeg 合并片段。
  4. 清理临时片段文件。

这在 Coub 提取器等提取器中有体现。

来源:src/you_get/extractors/coub.py10-40

示例 3:音频和视频处理

在下载音乐或音频内容时,下载系统会处理特定的要求:

  1. 正确的内容类型检测和文件扩展名映射。
  2. 正确处理专辑/播放列表结构。
  3. 音频内容的专门合并。

这在 Netease 提取器中有所展示。

来源:src/you_get/extractors/netease.py24-165

配置选项

下载系统的行为可以通过几个全局变量进行修改:

选项默认描述
dry_run仅显示 URL,而不下载。
force覆盖现有文件。
skip_existing_file_size_check跳过文件,不检查大小。
playerNone在外部播放器中启动 URL。
cookiesNone用于身份验证下载的 Cookie。
auto_rename自动重命名现有文件。

来源:src/you_get/common.py129-141