Skip to content

一卒#005 | 自动化YouTube视频搬运至Bilibili的实现思路

一个非常有趣且具有挑战性的项目。下面是实现这个目标的整体思路。

总的来说,这个自动化流程可以分解为以下几个核心步骤:

  1. 监控:定期检查所订阅的 YouTube 频道是否有新视频发布。
  2. 下载:如果发现新视频,将其从 YouTube 下载到本地。
  3. 翻译
    • 提取视频的音频。
    • 将音频转换成文字(语音识别, STT)。
    • 将文字翻译成中文。
    • (可选)将翻译好的文字生成为字幕文件(如 .srt)。
    • (可选,更高级)使用中文语音合成(TTS)生成新的音轨。
    • 翻译视频的标题和简介。
  4. 合成:将翻译好的字幕(或新音轨)与原视频合并。
  5. 上传:将处理好的视频,连同翻译好的标题和简介,自动上传到指定的 Bilibili 账号。

技术选型与实现步骤详解

监控 YouTube 频道更新

这通常通过 YouTube Data API v3 来实现。

  • 方案:需要一个 Google 账号,并在 Google Cloud Console 中创建一个项目,启用 YouTube Data API v3 并获取 API 密钥(API Key)。
  • 逻辑
    1. 通过 API 获取所订阅的所有频道的列表。
    2. 每个频道都有一个唯一的 "uploads" 播放列表 ID。
    3. 定期(例如每小时)调用 API,查询这些 "uploads" 播放列表,获取最新的视频列表。
    4. 需要一个简单的数据库(如 SQLite)或一个文本文件来记录已经处理过的视频 ID,以避免重复下载和上传。

下载视频

当监控到新视频后,就需要下载它。

  • 工具:强烈推荐使用 yt-dlp。它是 youtube-dl 的一个非常活跃和强大的分支,支持下载高质量的视频和音频。
  • 实现:脚本在检测到新视频的 URL 后,可以调用系统的 yt-dlp 命令来下载视频。
    bash
    yt-dlp "https-youtube-video-url"

视频翻译 (核心和最复杂部分)

这一步需要调用多个服务。

  1. 提取音频

    • 工具FFmpeg 是处理音视频的瑞士军刀。
    • 实现:使用 FFmpeg 从下载好的视频文件中分离出音频轨道(如提取为 .mp3.wav 文件)。
    bash
    ffmpeg -i video.mp4 -q:a 0 -map a audio.mp3
  2. 语音转文字 (STT - Speech-to-Text)

    • 服务
      • OpenAI Whisper:效果非常好,支持多种语言,并且有开源模型可以在本地运行(需要较好的显卡),也有提供 API 服务。
      • Google Cloud Speech-to-TextAzure Speech Service:商业服务,准确度高,但有费用。
    • 实现:将提取出的音频文件上传到所选的 STT 服务,获取带时间戳的文字稿。
  3. 文本翻译

    • 服务
      • DeepL API:翻译质量高,尤其在处理口语化内容时表现不错。
      • Google Cloud Translation API:稳定可靠的服务。
    • 实现:将 STT 生成的文字稿和视频的原标题/简介,通过 API 发送给翻译服务,获取中文结果。
  4. 生成字幕文件

    • 实现:根据 STT 返回的带时间戳的文本,以及翻译后的中文文本,生成 .srt 格式的字幕文件。这个文件格式很简单,可以手动拼接字符串生成。

视频合成 (可选但推荐)

为了让观众可以直接看到中文字幕,最好将字幕"嵌入"到视频中。

  • 工具:同样使用 FFmpeg
  • 实现:将 .srt 字幕文件硬编码(Hardcode)到视频画面中。
    bash
    ffmpeg -i input.mp4 -vf "subtitles=subtitle.srt" output.mp4

上传到 Bilibili

这是整个流程中最具挑战性的一环,因为 Bilibili 官方没有为普通开发者提供开放的上传 API。

  • 方案
    1. 使用非官方的 Bilibili API 库:在 GitHub 等社区可以找到一些由开发者逆向工程实现的 Python 库(例如搜索 bilibili-api-pythonbili-up)。这些库模拟了网页端的登录和上传过程。
      • 优点:可以实现全自动、后台上传。
      • 缺点:因为是非官方的,B站网页或接口一更新,库就可能失效,需要维护。
    2. 使用浏览器自动化工具
      • 工具SeleniumPlaywright
      • 实现:编写一个脚本来驱动一个真实的浏览器(如 Chrome),模拟人手动登录、点击"上传"、填写标题和简介、选择文件、最后发布的完整过程。
      • 优点:相对稳定,只要 B 站前端页面不大改就能用。
      • 缺点:需要在有图形界面的服务器上运行,效率较低,且过程可见。

技术栈

  • 主力语言Python。因为它有强大的生态系统来支持以上所有步骤。
  • 核心工具yt-dlp (下载), FFmpeg (音视频处理)。
  • 关键 API
    • YouTube Data API v3 (监控)
    • 语音识别 API (如 Whisper)
    • 翻译 API (如 DeepL)
  • Bilibili 上传:非官方的 Python 库或浏览器自动化库 (如 Selenium)。
  • 调度
    • 在 Linux/macOS 上使用 cron 定时任务。
    • 在 Windows 上使用 "任务计划程序" (Task Scheduler)。