概述
VDDT-beta.py 是一款基于 yt-dlp 的多功能下载器,旨在为用户提供了一个简单易用的命令行界面,用于下载和管理各种在线视频和音频内容。它支持多种下载模式、格式选择、自定义配置以及批量下载功能,满足不同用户的多样化需求。
功能特点
- 多种下载模式 :支持视频 + 音频自动合并、仅视频、仅音频以及手动选择视频 + 音频格式等多种下载模式,满足不同场景下的下载需求。
- 丰富的格式选择 :能够获取并列出给定 URL 的所有可用格式,包括视频和音频的编码、分辨率、文件大小等详细信息,方便用户根据需求选择合适的格式进行下载。
- 自定义配置 :提供自定义文件名模板、下载目录设置、Cookie 文件管理等功能,用户可以根据自己的喜好和需求对下载文件进行个性化定制。
- 下载辅助功能 :支持下载字幕、嵌入视频封面、下载 B 站弹幕等辅助功能,丰富下载内容,提升用户体验。
- 转码与调整 :在下载后可对视频进行转码或调整分辨率、码率等操作,满足用户对视频质量和文件大小的不同要求。
- 批量下载 :支持从文本文件读取多个链接进行批量下载,提高下载效率,方便用户一次性处理大量下载任务。
环境依赖
- Python :确保已安装 Python 3.x 版本。
- yt-dlp :通过 pip 安装,命令为
pip install yt-dlp
。 - ffmpeg :用于视频合并、转码、嵌入封面等功能,需提前安装并配置好环境变量。
使用方法
单个视频下载
- 运行脚本 :在命令行中输入
python VDDT-beta.py
启动下载器。 - 选择操作 :输入
1
选择下载单个视频 / 链接。 - 输入链接 :输入目标视频的 URL 地址。
- 模式选择 :根据提示选择下载模式,如视频 + 音频自动合并、仅视频、仅音频或手动选择视频 + 音频格式。
- 格式选择 :如果是视频 + 音频自动合并模式,脚本会自动选择最佳视频格式和音频格式进行合并;如果是手动选择模式,根据列出的格式列表输入对应的序号选择所需的格式。
- 自定义配置(可选) :根据需要选择是否使用自定义文件名模板、下载字幕、嵌入视频封面、下载弹幕以及进行转码或调整分辨率等操作。
- 开始下载 :确认配置后,脚本开始下载任务,并显示下载进度。
批量下载
- 准备链接文件 :将多个视频链接保存到一个文本文件中,每行一个链接。
- 运行脚本并选择操作 :运行脚本后输入
2
选择批量下载。 - 输入文件路径 :输入包含链接的文本文件路径,或者按回车使用默认的
download_list.txt
文件。 - 后续步骤 :后续操作与单个视频下载类似,脚本会依次处理文件中的每个链接,按照用户的选择进行下载和相关配置。
代码结构与关键函数说明
主函数 main()
main()
- 负责整个下载器的启动和运行流程控制。
- 显示欢迎信息、使用提示以及当前的下载目录等基本设置。
- 提供操作选择菜单,根据用户输入调用相应的下载处理函数。
函数 ask(prompt)
ask(prompt)
- 用于向用户询问是 / 否问题,并返回布尔值,方便在脚本中根据用户选择进行不同的操作分支。
函数 convert_to_netscape_cookie(cookie_str, output_file)
convert_to_netscape_cookie(cookie_str, output_file)
- 将原始 cookie 字符串转换为 Netscape 格式,并保存到指定文件中。这在需要使用 cookie 进行登录或访问受限制内容时非常有用。
函数 sanitize_filename(name)
sanitize_filename(name)
- 对文件名进行清洗,移除 Windows 文件名中的非法字符,确保下载的文件能够正常保存。
函数 progress_hook(d)
progress_hook(d)
- yt-dlp 下载进度的回调函数,用于在下载过程中实时显示下载进度、已下载数据量、总数据量以及预计剩余时间等信息,以可视化的方式让用户了解下载状态。
函数 suggest_best_quality(formats)
suggest_best_quality(formats)
- 基于视频的高度,从可用格式中推荐最佳的视频质量格式 ID,方便用户快速选择高质量的视频进行下载。
函数 get_format_lists(url, ydl_opts)
get_format_lists(url, ydl_opts)
- 获取并列出给定 URL 的所有可用格式信息,包括格式 ID、扩展名、分辨率、视频编码、音频编码和文件大小等,为用户选择下载格式提供依据。
函数 download(url, format_id, output_dir, ydl_opts, info_dict=None)
download(url, format_id, output_dir, ydl_opts, info_dict=None)
- 核心的下载函数,根据用户选择的格式 ID 和相关配置,使用 yt-dlp 进行视频或音频的下载操作,并处理下载过程中的各种情况,如成功完成、下载失败或错误等。
函数 handle_single_download(url, base_ydl_opts, output_dir)
handle_single_download(url, base_ydl_opts, output_dir)
- 负责处理单个 URL 的下载过程,包括引导用户选择下载模式、获取格式列表、选择格式以及应用各种自定义配置等操作。
函数 prepare_cookies_netscape(target_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 也有望进一步提升性能和功能,为用户带来更加出色的使用体验。