Skip to content

articuly/batch_download_video

Repository files navigation

批量视频下载

一款功能强大的命令行工具,支持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 - 音视频处理工具

ASR服务要求(可选,用于语音识别功能)

🚀 快速开始

1. 安装依赖

pip install -r requirements.txt

2. 准备外部程序

确保以下程序已添加到系统PATH:

3. 配置文件

# 复制配置模板(Windows使用copy,Linux/macOS使用cp)
# Windows:
copy config.json.template config.json
# Linux/macOS:
cp config.json.template config.json

# 按需修改配置(可选)
# 主要配置项:下载并发数、ASR服务地址、默认输出路径等

4. 使用示例

🎬 下载视频 (命令别名: dl)

# 下载单个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

🎤 语音识别 (命令别名: rc)

# 识别单个音视频文件,输出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" # 默认下载目录
}

ASR识别配置

"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"             # 默认输出格式
}

🔍 常见问题

Q: B站下载高清视频需要登录?

A: 是的,B站1080P+及以上分辨率需要登录会员账号。使用python main.py login bilibili扫码登录即可。

Q: YouTube下载速度慢?

A: 可以在配置文件中设置代理地址,或者使用yt-dlp的代理参数。

Q: 语音识别服务怎么部署?

A: 请参考Qwen ASR API项目的README文档,按照其说明部署本地ASR服务,部署完成后在config.json中配置服务地址即可。

Q: 支持其他平台下载吗?

A: 目前仅支持B站和YouTube,后续可以通过扩展下载器支持更多平台。

📄 许可证

本项目仅供学习研究使用,请遵守对应平台的用户协议和版权法律,请勿用于非法用途。

🤝 贡献

欢迎提交Issue和Pull Request!

About

一款命令行工具,支持高效批量下载B站与YouTube视频,并可无缝对接本地Qwen ASR API服务,实现音视频到文本的自动化转录。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors