一款功能强大的命令行工具,支持B站、YouTube视频下载,与本人的另外一个语音识别项目 https://github.com/articuly/qwen_asr_api 配合,自动将音视频转换为文本。
- 支持B站(Bilibili)和YouTube视频下载
- 支持多线程并发下载,可自定义并发数
- 支持选择视频质量:4K/2K/1080P/720P等
- 支持多种下载模式:
- 完整视频(视频+音频+字幕)
- 仅下载音频
- 仅下载视频
- 仅下载字幕
- 支持批量下载,从文件读取URL列表
- 支持按发布日期范围下载视频 (after/before)
- 自动处理登录认证,支持Cookie保存
- 支持防进程挂死的超时控制与断点续传
- 全面消除硬编码,支持配置驱动
- 视频码率、格式自动优选
- 对接本地部署的Qwen ASR服务
- 支持几乎所有常见音视频格式:mp4、mkv、avi、mp3、m4a、flac等
- 支持批量识别整个目录下的音视频文件
- 支持多种输出格式:txt、markdown、docx
- 支持多线程并发识别
- 自动从视频中提取音频,无需手动转换
- 支持异步队列处理模式,无死锁的高效并行识别
- 识别结果自动保存到指定目录
- 查看视频可用格式列表
- 系统状态检查:依赖、服务、认证状态
- B站扫码登录,自动保存Cookie
- 完善的日志记录和错误提示
- 配置文件支持,自定义默认参数
- Windows 10/11
- Python 3.8+
- 外部程序(需要添加到系统PATH):
BBDown.exe- B站下载工具yt-dlp.exe- YouTube下载工具ffmpeg.exe- 音视频处理工具
- 本地部署的Qwen ASR服务(参考:https://github.com/articuly/qwen_asr_api)
- 推荐配置:RTX 3080 或更高配置的显卡
pip install -r requirements.txt确保以下程序已添加到系统PATH:
- BBDown(Windows: BBDown.exe):https://github.com/nilaoda/BBDown/releases
- yt-dlp(Windows: yt-dlp.exe):https://github.com/yt-dlp/yt-dlp/releases
- ffmpeg(Windows: ffmpeg.exe):https://ffmpeg.org/download.html
# 复制配置模板(Windows使用copy,Linux/macOS使用cp)
# Windows:
copy config.json.template config.json
# Linux/macOS:
cp config.json.template config.json
# 按需修改配置(可选)
# 主要配置项:下载并发数、ASR服务地址、默认输出路径等# 下载单个B站视频
python main.py dl https://www.bilibili.com/video/BVxxxxxxx
# 下载YouTube视频,仅下载音频
python main.py dl https://www.youtube.com/watch?v=xxxx --audio
# 下载1080p分辨率视频
python main.py dl <url> -q 1080
# 批量下载URL列表
python main.py dl -f urls.txt -o ./videos
# 仅下载字幕
python main.py dl <url> --sub
# 下载指定日期之间的视频
python main.py dl <url> --after 20250101 --before 20251231# 识别单个音视频文件,输出md格式
python main.py rc -f video.mp4 --format md
# 识别整个目录下的所有音视频
python main.py rc -d ./videos -o ./transcripts
# 指定语言为日语
python main.py rc -f japanese_video.mp4 -l ja# 登录B站(扫码登录)
python main.py login bilibili
# 检查系统状态
python main.py status
# 查看视频可用格式列表
python main.py list <url>batch_download_vedio/
├── config.json # 配置文件
├── config.json.template # 配置模板
├── main.py # 主程序入口
├── requirements.txt # Python依赖
├── downloader/ # 下载器模块
│ ├── __init__.py
│ ├── models.py # 数据模型和枚举
│ ├── config.py # 配置管理
│ ├── utils.py # 工具函数
│ ├── base_downloader.py # 下载器抽象基类
│ ├── bbdown_downloader.py # B站下载器
│ ├── ytdlp_downloader.py # YouTube下载器
│ ├── downloader_factory.py# 下载器工厂
│ └── download_manager.py # 下载管理器
├── recognition/ # 语音识别模块
│ ├── __init__.py
│ ├── base_recognizer.py # 识别器抽象基类
│ ├── qwen_asr_recognizer.py # Qwen ASR识别器
│ └── recognition_manager.py # 识别管理器
├── cookies/ # Cookie保存目录
├── downloads/ # 默认下载目录
└── recognitions/ # 默认识别结果输出目录
"download": {
"max_concurrent": 3, # 最大并发下载数
"default_quality": "best", # 默认下载质量
"retry_count": 3, # 失败重试次数
"output_dir": "./downloads" # 默认下载目录
}"recognition": {
"enabled": true,
"api_type": "qwen_asr",
"api_endpoint": "http://127.0.0.1:8000", # ASR服务地址
"output_dir": "./recognitions", # 默认输出目录
"max_concurrent": 2, # 最大并发识别数
"default_output_format": "md" # 默认输出格式
}A: 是的,B站1080P+及以上分辨率需要登录会员账号。使用python main.py login bilibili扫码登录即可。
A: 可以在配置文件中设置代理地址,或者使用yt-dlp的代理参数。
A: 请参考Qwen ASR API项目的README文档,按照其说明部署本地ASR服务,部署完成后在config.json中配置服务地址即可。
A: 目前仅支持B站和YouTube,后续可以通过扩展下载器支持更多平台。
本项目仅供学习研究使用,请遵守对应平台的用户协议和版权法律,请勿用于非法用途。
欢迎提交Issue和Pull Request!