Miyuki
Python 脚本 miyuki.py 详细分析大纲
1. 脚本概述
- 用途:从特定网站(如
missav.ai或相关域名)批量下载视频,支持多线程、分辨率选择、封面下载、错误重试等功能。 - 核心功能:
- 命令行参数解析(URL、认证、播放列表、搜索等)。
- 多线程下载视频片段(JPEG 格式)。
- 使用
ffmpeg合并片段为 MP4 文件。 - 封面下载与嵌入视频。
- 错误记录与重试机制。
2. 关键模块与函数
2.1 初始化与配置
- 常量定义:
- 记录文件(
RECORD_FILE、ERROR_RECORD_FILE)。 - 视频保存路径(
movie_save_path_root)。 - 正则表达式(匹配 UUID、标题、分辨率等)。
- HTTP 请求头:模拟浏览器访问(
User-Agent)。 - Banner 显示:启动时显示 ASCII 艺术字。
2.2 多线程与进度管理
- 线程安全计数器:
ThreadSafeCounter类,用于跟踪下载进度。 - 进度条:
display_progress_bar显示实时下载进度。 - 区间分割:
split_integer_into_intervals将总任务分片供多线程处理。
2.3 网络请求与重试
- 重试机制:
https_request_with_retry实现带重试的 HTTP 请求。 - UUID 与标题解析:
get_movie_uuid、get_movie_title通过正则从 HTML 提取关键信息。
2.4 视频处理
- 下载视频片段:
thread_task多线程下载 JPEG 片段。 - 合并视频:
video_write_jpegs_to_mp4:直接拼接片段。generate_mp4_by_ffmpeg:调用ffmpeg生成高质量视频。- 封面嵌入:
ffcover选项将封面设为视频预览图。
2.5 命令行参数解析
- 参数定义:支持
-urls、-auth、-plist、-search、-file等多种输入方式。 - 参数验证:
validate_args检查参数合法性(如分辨率、重试次数)。
2.6 高级功能
- 播放列表解析:
get_public_playlist抓取公开播放列表的视频 URL。 - 用户收藏:
get_movie_collections通过登录获取用户收藏视频。 - 代理支持:通过
-proxy配置 HTTP 代理。
3. 工作流程
- 参数解析:根据输入参数(如 URL、播放列表、文件等)生成下载任务列表。
- UUID 与分辨率获取:解析视频页 HTML,提取 UUID 和可选分辨率。
- 多线程下载:分片下载所有 JPEG 视频片段。
- 合并与后处理:
- 使用
ffmpeg合并片段(可选封面嵌入)。 - 重命名文件为完整标题(
-title选项)。 - 清理与记录:
- 删除临时文件夹(
delete_all_subfolders)。 - 记录成功/失败的 URL(
RECORD_FILE、ERROR_RECORD_FILE)。
4. 依赖项
- 外部库:
curl_cffi(模拟浏览器请求)、ffmpeg(视频合并)。 - 系统命令:依赖
ffmpeg可执行文件(需安装并加入环境变量)。
5. 风险与注意事项
- 法律风险:需确保下载行为符合目标网站的服务条款及相关法律法规。
- 网站结构依赖:正则表达式匹配可能因网站改版失效。
- 安全性:忽略 SSL 验证(
verify=False)可能存在安全风险。 - 资源占用:多线程下载可能占用较高网络和存储资源。
6. 示例用法
# 从播放列表下载前50个视频,使用ffmpeg合并并嵌入封面
miyuki.py -plist "https://missav.ai/search/JULIA" -limit 50 -ffmpeg -ffcover
# 使用账号下载收藏视频
miyuki.py -auth [email protected] password -ffmpeg
# 搜索并下载特定视频
miyuki.py -search sw-950 -quality 1080 -retry 5
7. 代码改进建议
- 异常处理增强:部分网络请求缺乏详细错误日志。
- 配置文件支持:将常量(如路径、重试次数)外置为配置文件。
- 动态 UA 生成:防止被网站封禁。
- 异步优化:使用异步库(如
aiohttp)提升性能。
总结:miyuki.py 是一个功能全面的视频下载工具,适合从特定网站批量获取内容,但需谨慎使用以避免法律和伦理问题。