YTB2BILI:YouTube 到 Bilibili 自动化转载系统完全指南
系统概述
YTB2BILI 是一个功能完整的视频自动化处理系统,专为内容创作者设计,能够实现从 YouTube 等平台下载视频,自动生成字幕、翻译内容、生成元数据,并定时上传到 Bilibili 的一站式解决方案。该系统采用模块化设计,通过智能任务链处理引擎,将复杂的视频处理流程分解为可控步骤,大幅提升内容转载效率。
核心功能详解
智能视频处理链
系统采用四步准备流程实现实时视频处理:
-
字幕生成:集成 Whisper AI 技术,自动识别视频语音并生成高质量字幕文件。支持多语言识别,准确率高达 95% 以上,平均处理时间 2-5 分钟(取决于视频长度)。 -
封面下载:自动获取视频原始封面,上传至腾讯云 COS 存储,生成 CDN 访问链接。支持高清封面下载,处理时间通常在 10-30 秒内完成。 -
字幕翻译:提供百度翻译和 DeepSeek AI 两种翻译方案,支持多语言互译。翻译过程智能化处理,保留时间轴信息,平均耗时 30-60 秒。 -
元数据生成:基于 AI 分析视频内容,自动生成符合 B 站规范的标题、描述和标签。系统会分析视频主题、关键词和内容特征,生成优化的元数据,耗时 30-90 秒。
定时上传策略
为避免频繁上传触发平台限制,系统采用智能调度机制:
-
视频上传:每小时仅上传一个处理完成的视频,通过时间间隔控制上传频率 -
字幕上传:视频上传成功后延迟 1 小时再上传字幕,确保视频审核通过 -
手动触发:提供 Web 界面手动控制,可跳过队列立即执行上传任务
可视化管理面板
系统提供直观的 Web 管理界面,包含以下功能:
-
视频列表:实时展示所有视频处理状态,支持按状态筛选(待处理/处理中/已完成/失败) -
详细信息:查看完整视频信息和处理步骤追踪,包含每个步骤的执行时间和结果 -
单步重试:对失败的任务步骤支持单独重新执行,无需从头开始 -
进度监控:实时显示处理进度百分比和已执行时长 -
文件管理:提供视频、字幕、封面等所有生成文件的在线查看和下载功能
B 站账户集成
系统深度集成 B 站认证体系:
-
扫码登录:支持 Bilibili TV 版二维码快速登录 -
二维码生成:后端自动生成 PNG 格式登录二维码 -
状态检测:前端实时轮询检测登录状态变化 -
用户信息:获取并展示用户名、头像等账户信息 -
状态持久化:自动保存登录 Token 和 Cookie,避免重复登录 -
登录验证:智能检测账户登录状态,异常时自动提示重新认证
技术架构解析
后端技术栈
-
开发语言:Go 1.24+,利用最新语言特性提升性能 -
Web 框架:Gin 高性能 HTTP 框架,支持高并发请求 -
数据库支持:GORM v2 ORM 框架,兼容 MySQL 8.0+、PostgreSQL 15+ 和 SQLite -
文件存储:腾讯云 COS 对象存储,支持大文件分片上传 -
依赖管理:Uber FX 实现声明式依赖注入 -
定时任务:Robfig Cron v3 提供秒级精度的任务调度 -
日志系统:Zap + Lumberjack 实现结构化日志和自动轮转
前端技术栈
-
框架:Next.js 15+,支持 App Router 路由模式 -
开发语言:TypeScript 5.x,确保类型安全 -
UI 组件:React 18 + Tailwind CSS 3.x 响应式设计 -
图标系统:Lucide React 现代化图标库 -
HTTP 客户端:Axios 支持请求拦截和自动重试 -
部署方式:静态导出 + 嵌入式部署,简化运维
外部服务集成
| 服务名称 | 功能描述 | 集成方式 |
|---|---|---|
| yt-dlp | 多平台视频下载 | 命令行工具调用 |
| Whisper AI | 语音识别与字幕生成 | 本地模型部署 |
| 百度翻译 API | 专业机器翻译 | RESTful API |
| DeepSeek AI | AI 翻译与内容生成 | RESTful API |
| Bilibili SDK | 视频上传与用户认证 | 官方 API |
| 腾讯云 COS | 对象存储服务 | SDK 集成 |
项目结构说明
ytb2bili/
├── main.go # 应用程序入口
├── Makefile # 自动化构建脚本
├── config.toml # 主配置文件
├── config.toml.example # 配置模板
├── go.mod # Go 模块依赖
└── README.md # 项目文档
internal/ # 内部业务逻辑
├── chain_task/ # 任务链处理引擎
│ ├── chain_task_handler.go # 任务链执行器
│ ├── upload_scheduler.go # 上传调度器
│ ├── handlers/ # 任务处理器
│ │ ├── generate_subtitles.go # 字幕生成
│ │ ├── translate_subtitle.go # 字幕翻译
│ │ ├── generate_metadata.go # 元数据生成
│ │ ├── download_img_handler.go # 封面处理
│ │ ├── upload_to_bilibili.go # 视频上传
│ │ └── upload_subtitle_to_bilibili.go # 字幕上传
│ └── manager/ # 任务管理
├── core/ # 核心业务层
│ ├── app_server.go # HTTP 服务器
│ ├── models/ # 数据模型
│ ├── services/ # 业务服务
│ └── types/ # 类型定义
├── handler/ # HTTP 请求处理器
├── storage/ # 存储抽象层
└── web/ # 前端资源
pkg/ # 可重用组件
├── analytics/ # 数据分析
├── cos/ # 腾讯云 COS 客户端
├── logger/ # 日志组件
├── services/ # 通用服务
├── store/ # 数据库操作
├── translator/ # 翻译服务
└── utils/ # 工具函数
快速部署指南
环境要求
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Go | 1.24+ | 后端运行环境 |
| Node.js | 18+ | 前端构建(仅构建时需要) |
| 数据库 | MySQL 8.0+/PostgreSQL 15+/SQLite | 数据存储 |
| yt-dlp | 最新版 | 视频下载工具(自动安装) |
一键部署方案
# 克隆项目
git clone https://github.com/difyz9/ytb2bili.git
cd ytb2bili/bili-up-api
# 一键构建(前端+后端)
make build
# 启动服务
./bili-up-api-server
部署完成后访问 http://localhost:8096 即可使用完整功能。
配置文件设置
-
复制配置模板:
cp config.toml.example config.toml
-
编辑配置文件:
# 服务配置
listen = ":8096"
environment = "production"
debug = false
FileUpDir = "/data/ytb2bili/media"
# 数据库配置
[database]
type = "mysql"
host = "localhost"
port = 3306
username = "ytb2bili"
password = "your_password"
database = "ytb2bili"
timezone = "Asia/Shanghai"
# 腾讯云 COS 配置
[TenCosConfig]
enabled = true
CosBucketURL = "https://your-bucket.cos.ap-guangzhou.myqcloud.com"
CosSecretId = "您的SecretId"
CosSecretKey = "您的SecretKey"
CosRegion = "ap-guangzhou"
CosBucket = "your-bucket"
SubAppId = "您的AppId"
数据库设计
核心表结构
视频主表 (tb_videos):
CREATE TABLE `tb_videos` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`video_id` varchar(100) NOT NULL COMMENT 'YouTube视频ID',
`title` varchar(500) DEFAULT NULL COMMENT '视频标题',
`description` text COMMENT '视频描述',
`cover_url` varchar(1000) DEFAULT NULL COMMENT '封面URL',
`file_path` varchar(1000) DEFAULT NULL COMMENT '本地文件路径',
`status` varchar(20) DEFAULT '001' COMMENT '处理状态',
`bilibili_bvid` varchar(20) DEFAULT NULL COMMENT 'B站BV号',
`bilibili_aid` bigint DEFAULT NULL COMMENT 'B站AV号',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_video_id` (`video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
任务步骤表 (task_steps):
CREATE TABLE `task_steps` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`video_id` varchar(100) NOT NULL,
`step_name` varchar(100) NOT NULL,
`step_order` int NOT NULL,
`status` enum('pending','running','completed','failed','skipped') DEFAULT 'pending',
`start_time` timestamp NULL DEFAULT NULL,
`end_time` timestamp NULL DEFAULT NULL,
`duration` int DEFAULT NULL COMMENT '执行耗时(秒)',
`error_msg` text COMMENT '错误信息',
`result_data` json DEFAULT NULL,
`can_retry` tinyint(1) DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_video_step` (`video_id`,`step_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
状态流转机制
系统采用六种状态标记视频处理进度:
-
001:待处理 -
002:处理中 -
200:准备上传 -
300:视频已上传 -
400:完成 -
999:失败
状态转换遵循严格流程,确保处理步骤按序执行。
常见问题解答
安装与配置问题
Q:数据库连接失败怎么办?
-
检查配置文件中的数据库参数是否正确 -
验证数据库服务是否运行: sudo systemctl status mysql -
确认用户权限: mysql -u username -p -e "SHOW DATABASES"
Q:如何切换到 SQLite 数据库?
修改配置文件:
[database]
type = "sqlite"
database = "./data/ytb2bili.db"
视频处理问题
Q:字幕生成失败的原因?
-
检查 Whisper 模型是否正确安装 -
确认系统内存充足(推荐 4GB+) -
查看日志获取具体错误信息
Q:视频下载速度慢怎么解决? -
更新 yt-dlp: pip install --upgrade yt-dlp -
检查网络连接质量 -
在配置中设置代理(如需)
Q:翻译服务不可用如何处理?
百度翻译验证:
curl -X POST "https://fanyi-api.baidu.com/api/trans/vip/translate" \
-d "q=test&from=en&to=zh&appid=YOUR_APPID&salt=123&sign=YOUR_SIGN"
DeepSeek 验证:
curl -X POST "https://api.deepseek.com/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"model":"deepseek-chat","messages":[{"role":"user","content":"test"}]}'
上传与认证问题
Q:B 站登录二维码无法显示?
-
检查服务端口是否正常开放: netstat -tulpn | grep 8096 -
验证接口响应: curl http://localhost:8096/api/v1/auth/qrcode -
确认防火墙设置允许访问
Q:视频上传被限制怎么办?
系统已内置智能调度策略:
-
自动控制上传频率(每小时 1 个视频) -
视频与字幕上传间隔 1 小时 -
支持手动触发紧急上传
生产部署建议
Docker 部署方案
创建 docker-compose.yml:
version: '3.8'
services:
ytb2bili:
image: ytb2bili:latest
ports:
- "8096:8096"
volumes:
- ./config.toml:/app/config.toml
- ./data:/data/ytb2bili
environment:
- CONFIG_FILE=/app/config.toml
depends_on:
- mysql
restart: unless-stopped
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: ytb2bili
MYSQL_USER: ytb2bili
MYSQL_PASSWORD: app_password
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
启动命令:
docker-compose up -d
Nginx 反向代理配置
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
client_max_body_size 10G;
location / {
proxy_pass http://localhost:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
监控与维护
日志监控:
# 实时查看应用日志
tail -f logs/app.log
# 查看错误日志
grep "ERROR" logs/app.log
性能分析:
# HTTP 请求分析
curl -w "@curl-format.txt" -s -o /dev/null http://localhost:8096/api/v1/videos
# 内存分析
go tool pprof http://localhost:8096/debug/pprof/heap
定期维护任务:
-
每周清理临时文件: find /data/ytb2bili -name "*.tmp" -delete -
每月备份数据库: mysqldump -u root -p ytb2bili > backup.sql -
季度更新依赖: go mod tidy && go mod download
系统扩展性
支持的视频平台
通过 yt-dlp 集成,系统支持以下平台:
-
YouTube -
TikTok -
Instagram -
Twitter -
Bilibili -
以及其他 1000+ 网站
翻译服务扩展
系统采用模块化翻译架构:
// 当前支持的服务
type Translator interface {
Translate(text string, from string, to string) (string, error)
}
// 可轻松扩展新服务
type GoogleTranslator struct {}
func (g *GoogleTranslator) Translate(text, from, to string) (string, error) {
// 实现逻辑
}
存储方案扩展
除腾讯云 COS 外,系统预留存储接口:
type Storage interface {
Upload(file io.Reader, key string) error
Download(key string) (io.ReadCloser, error)
GetURL(key string) string
}
可轻松扩展支持:
-
阿里云 OSS -
AWS S3 -
自建 MinIO
总结
YTB2BILI 系统通过智能化的任务链处理引擎,实现了从视频下载到平台上传的全流程自动化。其模块化架构设计确保了系统的可扩展性和可维护性,而可视化面板则大幅降低了使用门槛。无论是个人内容创作者还是团队运营,该系统都能显著提升视频处理效率,减少重复性劳动。
系统采用 Go 语言后端配合 Next.js 前端的现代技术栈,保证了高性能和良好的用户体验。通过定时上传策略和智能错误处理机制,有效解决了平台限制问题。完善的数据库设计和状态管理系统,确保了处理过程的可靠性和可追溯性。
对于需要大规模处理视频内容的用户,系统提供了 Docker 部署方案和 Nginx 代理配置,支持生产环境的高可用部署。丰富的日志和监控功能,使得系统运维更加便捷。
