概述

  VDDT-beta.py 是一款基于 yt-dlp 的多功能下载器,旨在为用户提供了一个简单易用的命令行界面,用于下载和管理各种在线视频和音频内容。它支持多种下载模式、格式选择、自定义配置以及批量下载功能,满足不同用户的多样化需求。

功能特点

  1. 多种下载模式 :支持视频 + 音频自动合并、仅视频、仅音频以及手动选择视频 + 音频格式等多种下载模式,满足不同场景下的下载需求。
  2. 丰富的格式选择 :能够获取并列出给定 URL 的所有可用格式,包括视频和音频的编码、分辨率、文件大小等详细信息,方便用户根据需求选择合适的格式进行下载。
  3. 自定义配置 :提供自定义文件名模板、下载目录设置、Cookie 文件管理等功能,用户可以根据自己的喜好和需求对下载文件进行个性化定制。
  4. 下载辅助功能 :支持下载字幕、嵌入视频封面、下载 B 站弹幕等辅助功能,丰富下载内容,提升用户体验。
  5. 转码与调整 :在下载后可对视频进行转码或调整分辨率、码率等操作,满足用户对视频质量和文件大小的不同要求。
  6. 批量下载 :支持从文本文件读取多个链接进行批量下载,提高下载效率,方便用户一次性处理大量下载任务。

环境依赖

  1. Python :确保已安装 Python 3.x 版本。
  2. yt-dlp :通过 pip 安装,命令为 pip install yt-dlp​。
  3. ffmpeg :用于视频合并、转码、嵌入封面等功能,需提前安装并配置好环境变量。

使用方法

单个视频下载
  1. 运行脚本 :在命令行中输入 python VDDT-beta.py​ 启动下载器。
  2. 选择操作 :输入 1​ 选择下载单个视频 / 链接。
  3. 输入链接 :输入目标视频的 URL 地址。
  4. 模式选择 :根据提示选择下载模式,如视频 + 音频自动合并、仅视频、仅音频或手动选择视频 + 音频格式。
  5. 格式选择 :如果是视频 + 音频自动合并模式,脚本会自动选择最佳视频格式和音频格式进行合并;如果是手动选择模式,根据列出的格式列表输入对应的序号选择所需的格式。
  6. 自定义配置(可选) :根据需要选择是否使用自定义文件名模板、下载字幕、嵌入视频封面、下载弹幕以及进行转码或调整分辨率等操作。
  7. 开始下载 :确认配置后,脚本开始下载任务,并显示下载进度。
批量下载
  1. 准备链接文件 :将多个视频链接保存到一个文本文件中,每行一个链接。
  2. 运行脚本并选择操作 :运行脚本后输入 2​ 选择批量下载。
  3. 输入文件路径 :输入包含链接的文本文件路径,或者按回车使用默认的 download_list.txt​ 文件。
  4. 后续步骤 :后续操作与单个视频下载类似,脚本会依次处理文件中的每个链接,按照用户的选择进行下载和相关配置。

代码结构与关键函数说明

主函数 main()

  • 负责整个下载器的启动和运行流程控制。
  • 显示欢迎信息、使用提示以及当前的下载目录等基本设置。
  • 提供操作选择菜单,根据用户输入调用相应的下载处理函数。

函数 ask(prompt)

  • 用于向用户询问是 / 否问题,并返回布尔值,方便在脚本中根据用户选择进行不同的操作分支。

函数 convert_to_netscape_cookie(cookie_str, output_file)

  • 将原始 cookie 字符串转换为 Netscape 格式,并保存到指定文件中。这在需要使用 cookie 进行登录或访问受限制内容时非常有用。

函数 sanitize_filename(name)

  • 对文件名进行清洗,移除 Windows 文件名中的非法字符,确保下载的文件能够正常保存。

函数 progress_hook(d)

  • yt-dlp 下载进度的回调函数,用于在下载过程中实时显示下载进度、已下载数据量、总数据量以及预计剩余时间等信息,以可视化的方式让用户了解下载状态。

函数 suggest_best_quality(formats)

  • 基于视频的高度,从可用格式中推荐最佳的视频质量格式 ID,方便用户快速选择高质量的视频进行下载。

函数 get_format_lists(url, ydl_opts)

  • 获取并列出给定 URL 的所有可用格式信息,包括格式 ID、扩展名、分辨率、视频编码、音频编码和文件大小等,为用户选择下载格式提供依据。

函数 download(url, format_id, output_dir, ydl_opts, info_dict=None)

  • 核心的下载函数,根据用户选择的格式 ID 和相关配置,使用 yt-dlp 进行视频或音频的下载操作,并处理下载过程中的各种情况,如成功完成、下载失败或错误等。

函数 handle_single_download(url, base_ydl_opts, output_dir)

  • 负责处理单个 URL 的下载过程,包括引导用户选择下载模式、获取格式列表、选择格式以及应用各种自定义配置等操作。

函数 prepare_cookies_netscape(target_url)

  • 根据目标 URL 准备和转换 Netscape 格式的 cookie 文件,以便在下载过程中能够正确使用 cookie 进行身份验证或访问受限制的内容。

自定义配置与高级使用技巧

自定义文件名模板

  在下载过程中,用户可以选择使用自定义文件名模板来命名下载的文件。脚本支持多种变量,如视频标题 (%(title)s​)、上传者名称 (%(uploader)s​)、上传日期 (%(upload_date)s​)、文件扩展名 (%(ext)s​)、视频 ID (%(id)s​) 和分辨率 (%(resolution)s​) 等。通过合理组合这些变量,用户可以创建符合自己需求的文件命名规则,方便文件的管理和查找。

Cookie 文件管理

  对于需要登录或有访问限制的视频内容,用户可以将获取到的 cookie 信息保存到指定文件中,并将其放置在脚本所在目录下的 cookies​ 文件夹内。脚本会自动检测并转换 cookie 文件为 Netscape 格式,以便在下载时正确使用。目前支持三种命名方式的 cookie 文件:完整域名(如 bilibili.com.ck​)、带下划线的域名(如 bilibili_com.ck​)和通用 cookie 文件(common.ck​),用户可以根据实际情况选择合适的文件命名方式。

批量下载任务管理

  在进行批量下载时,用户可以将多个链接保存到一个文本文件中,脚本会依次读取每个链接并按照指定的配置进行下载。为了提高批量下载的效率和灵活性,用户可以在链接文件中添加注释(以 #​ 开头的行),或者通过编辑链接文件来调整下载顺序或筛选特定的下载任务。

常见问题与解决方法

下载失败

  • 网络问题 :检查网络连接是否正常,是否能够正常访问目标视频链接所在的网站。
  • 链接无效或过期 :确认输入的视频链接是否正确,是否已经过期或被删除。
  • 需要登录或受地理限制 :如果视频需要登录才能访问,确保已正确配置并使用了有效的 cookie 文件;对于受地理限制的内容,可能需要使用代理服务器或 VPN 来绕过限制。

文件名乱码或无法保存

  • 检查输入的文件名是否包含非法字符,使用脚本提供的 sanitize_filename​ 函数清洗文件名后重试。
  • 确保系统的区域设置和编码格式正确,避免因编码问题导致文件名乱码。

转码失败

  • 检查 ffmpeg 是否已正确安装并配置好环境变量,确保脚本能够调用 ffmpeg 进行转码操作。
  • 确认转码参数是否正确,是否符合 ffmpeg 的要求和格式规范。

字幕或封面无法下载或嵌入

  • 部分视频可能不支持字幕或封面下载,检查目标视频是否提供字幕或封面资源。
  • 如果支持字幕或封面下载,但下载或嵌入失败,可能与视频格式或编码有关,尝试选择不同的下载格式或调整相关配置。

结语

  VDDT-beta.py 作为一个基于 yt-dlp 的多功能下载器,为用户提供了丰富实用的功能和灵活的配置选项,满足了不同用户在下载在线视频和音频内容时的多样化需求。无论是个人用户还是开发者,都可以通过这款工具轻松地获取和管理自己感兴趣的多媒体资源。在未来的发展中,随着 yt-dlp 的不断更新和优化,VDDT-beta.py 也有望进一步提升性能和功能,为用户带来更加出色的使用体验。