一卒#005 | 自动化YouTube视频搬运至Bilibili的实现思路
一个非常有趣且具有挑战性的项目。下面是实现这个目标的整体思路。
总的来说,这个自动化流程可以分解为以下几个核心步骤:
- 监控:定期检查所订阅的 YouTube 频道是否有新视频发布。
- 下载:如果发现新视频,将其从 YouTube 下载到本地。
- 翻译:
- 提取视频的音频。
- 将音频转换成文字(语音识别, STT)。
- 将文字翻译成中文。
- (可选)将翻译好的文字生成为字幕文件(如
.srt
)。 - (可选,更高级)使用中文语音合成(TTS)生成新的音轨。
- 翻译视频的标题和简介。
- 合成:将翻译好的字幕(或新音轨)与原视频合并。
- 上传:将处理好的视频,连同翻译好的标题和简介,自动上传到指定的 Bilibili 账号。
技术选型与实现步骤详解
监控 YouTube 频道更新
这通常通过 YouTube Data API v3 来实现。
- 方案:需要一个 Google 账号,并在 Google Cloud Console 中创建一个项目,启用 YouTube Data API v3 并获取 API 密钥(API Key)。
- 逻辑:
- 通过 API 获取所订阅的所有频道的列表。
- 每个频道都有一个唯一的 "uploads" 播放列表 ID。
- 定期(例如每小时)调用 API,查询这些 "uploads" 播放列表,获取最新的视频列表。
- 需要一个简单的数据库(如 SQLite)或一个文本文件来记录已经处理过的视频 ID,以避免重复下载和上传。
下载视频
当监控到新视频后,就需要下载它。
- 工具:强烈推荐使用
yt-dlp
。它是youtube-dl
的一个非常活跃和强大的分支,支持下载高质量的视频和音频。 - 实现:脚本在检测到新视频的 URL 后,可以调用系统的
yt-dlp
命令来下载视频。bashyt-dlp "https-youtube-video-url"
视频翻译 (核心和最复杂部分)
这一步需要调用多个服务。
提取音频:
- 工具:
FFmpeg
是处理音视频的瑞士军刀。 - 实现:使用
FFmpeg
从下载好的视频文件中分离出音频轨道(如提取为.mp3
或.wav
文件)。
bashffmpeg -i video.mp4 -q:a 0 -map a audio.mp3
- 工具:
语音转文字 (STT - Speech-to-Text):
- 服务:
- OpenAI Whisper:效果非常好,支持多种语言,并且有开源模型可以在本地运行(需要较好的显卡),也有提供 API 服务。
- Google Cloud Speech-to-Text 或 Azure Speech Service:商业服务,准确度高,但有费用。
- 实现:将提取出的音频文件上传到所选的 STT 服务,获取带时间戳的文字稿。
- 服务:
文本翻译:
- 服务:
- DeepL API:翻译质量高,尤其在处理口语化内容时表现不错。
- Google Cloud Translation API:稳定可靠的服务。
- 实现:将 STT 生成的文字稿和视频的原标题/简介,通过 API 发送给翻译服务,获取中文结果。
- 服务:
生成字幕文件:
- 实现:根据 STT 返回的带时间戳的文本,以及翻译后的中文文本,生成
.srt
格式的字幕文件。这个文件格式很简单,可以手动拼接字符串生成。
- 实现:根据 STT 返回的带时间戳的文本,以及翻译后的中文文本,生成
视频合成 (可选但推荐)
为了让观众可以直接看到中文字幕,最好将字幕"嵌入"到视频中。
- 工具:同样使用
FFmpeg
。 - 实现:将
.srt
字幕文件硬编码(Hardcode)到视频画面中。bashffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output.mp4
上传到 Bilibili
这是整个流程中最具挑战性的一环,因为 Bilibili 官方没有为普通开发者提供开放的上传 API。
- 方案:
- 使用非官方的 Bilibili API 库:在 GitHub 等社区可以找到一些由开发者逆向工程实现的 Python 库(例如搜索
bilibili-api-python
或bili-up
)。这些库模拟了网页端的登录和上传过程。- 优点:可以实现全自动、后台上传。
- 缺点:因为是非官方的,B站网页或接口一更新,库就可能失效,需要维护。
- 使用浏览器自动化工具:
- 工具:
Selenium
或Playwright
。 - 实现:编写一个脚本来驱动一个真实的浏览器(如 Chrome),模拟人手动登录、点击"上传"、填写标题和简介、选择文件、最后发布的完整过程。
- 优点:相对稳定,只要 B 站前端页面不大改就能用。
- 缺点:需要在有图形界面的服务器上运行,效率较低,且过程可见。
- 工具:
- 使用非官方的 Bilibili API 库:在 GitHub 等社区可以找到一些由开发者逆向工程实现的 Python 库(例如搜索
技术栈
- 主力语言:Python。因为它有强大的生态系统来支持以上所有步骤。
- 核心工具:
yt-dlp
(下载),FFmpeg
(音视频处理)。 - 关键 API:
- YouTube Data API v3 (监控)
- 语音识别 API (如 Whisper)
- 翻译 API (如 DeepL)
- Bilibili 上传:非官方的 Python 库或浏览器自动化库 (如
Selenium
)。 - 调度:
- 在 Linux/macOS 上使用
cron
定时任务。 - 在 Windows 上使用 "任务计划程序" (Task Scheduler)。
- 在 Linux/macOS 上使用