| name | youdub-dub |
| description | 视频配音编排器。将YouTube视频自动翻译成中文配音版本:下载→人声分离→语音识别→翻译→TTS→混音→压制字幕。依赖 youtube-downloader 子skill处理下载,依赖 youdub-pipeline 项目执行管线。 |
| tier | router |
/youdub-dub — 视频配音编排器
接收一个YouTube URL,自动完成:下载视频 → 分离人声 → 语音识别 → 翻译 → 生成配音 → 混音 → 压制字幕 → 输出最终MP4。
依赖项目
| 项目 | 路径 | 用途 |
|---|
| youtube-downloader (skill) | E:\projectHome\youtube-downloader\ | YouTube下载(CDP auth + bgutil) |
| youdub-pipeline | E:\projectHome\youdub-pipeline\ | 管线执行脚本 + 虚拟环境 |
前置条件(首次使用检查)
# 1. bgutil PoToken 服务(YouTube下载必需)
curl.exe -s --max-time 2 http://127.0.0.1:4416/ping
# 如果失败 → 启动: Start-Process node "build/main.js" -WorkingDir "E:\projectHome\bgutil-ytdlp-pot-provider\server" -WindowStyle Hidden
# 2. YouTube Cookie(24h内有效)
Test-Path E:\projectHome\YouDub-webui\data\cookies\youtube.txt
# 如果过期 → 执行 youtube-downloader 的 Quick Auth Recovery
# 3. 配置
Copy-Item E:\projectHome\youdub-pipeline\pipeline.env.example E:\projectHome\youdub-pipeline\pipeline.env
# 编辑 pipeline.env:设置 OPENAI_API_KEY、YT_PROXY_PORT 等
执行流程
第1步:下载视频
委托给 youtube-downloader skill 下载视频。
输出: {workdir}/{video_id}/media/video_source.mp4
如果已有cookie文件且bgutil运行中,可直接用:
python -m yt_dlp "URL" --no-playlist -f "bestvideo[height<=1080]+bestaudio/best" --merge-output-format mp4 -o "{workdir}/{video_id}/media/video_source.mp4"
第2步:运行配音管线
cd E:\projectHome\youdub-pipeline
.venv\Scripts\python scripts\youdub_pipeline.py run "URL" --session-dir "E:\path\to\workdir\{video_id}"
第3步:查看结果
最终视频在 {session_dir}/media/video_final.mp4
单阶段执行(调试用)
# 只跑 Demucs + ASR + 翻译
cd E:\projectHome\youdub-pipeline
.venv\Scripts\python scripts\youdub_pipeline.py run "URL" --stages separate,asr,asr_fix,translate
配置参考
编辑 E:\projectHome\youdub-pipeline\pipeline.env:
| 变量 | 说明 | 必填 |
|---|
OPENAI_API_KEY | DeepSeek/OpenAI API密钥 | 是 |
OPENAI_BASE_URL | API地址(DeepSeek: https://api.deepseek.com/v1) | 是 |
OPENAI_MODEL | 模型名(如 deepseek-chat, deepseek-v4-flash) | 是 |
YT_PROXY_PORT | 代理端口(如 7890) | 如果在中国 |
YT_COOKIE_FILE | Cookie文件路径 | 推荐 |
PIPELINE_DEVICE | cuda 或 cpu | 是 |
工作目录结构
workdir/{video_id}/
├── media/
│ ├── video_source.mp4 # 原始视频
│ ├── audio_vocals.wav # 分离人声
│ ├── audio_bgm.wav # 背景音乐
│ └── video_final.mp4 # 最终输出
├── metadata/ # 中间数据
├── segments/ # 音频片段
├── pipeline.log # 运行日志
└── .stage_status.json # 断点状态