Skip to main content

video-dubbing

视频多语言配音工具链。将英文视频/音频转换为中文字幕并完成AI语音克隆配音。 当用户提到"视频配音"、"配音clone"、"中文配音"、"语音克隆"、"video dubbing"、"多语言配音"时触发此skill。 适用于视频国际化、多语言内容发布、播客配音等场景。

Aller à l'installation

Informations de source

Dépôt
yang0/videodubbing
Dernière activité de la source
9 mai 2026 à 08:24
Langue détectée de SKILL.md
chinois
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
video-dubbing
description
视频多语言配音工具链。将英文视频/音频转换为中文字幕并完成AI语音克隆配音。 当用户提到"视频配音"、"配音clone"、"中文配音"、"语音克隆"、"video dubbing"、"多语言配音"时触发此skill。 适用于视频国际化、多语言内容发布、播客配音等场景。
tags
["video","dubbing","voice-clone","subtitle","translation","ai-voice","i18n"]
# 视频多语言配音工具链 将英文视频/音频自动转换为中文字幕并完成AI语音克隆配音的完整工作流。 ## 何时使用 - 用户要求将英文视频转为中文字幕 - 需要为视频生成中文配音(语音克隆) - 多语言视频内容制作 - 播客/课程/教程的国际配音 - 已有音频文件需要转录+翻译+配音 ## 前置条件 确保以下CLI工具已全局安装: ```bash # 1. 字幕提取(火山引擎语音识别) pip install volcengine # 或全局安装 volc-srt # 2. 音频切片 cd cutaudio && npm install -g # 3. AI语音克隆(VoxCPM2) cd voxclone && npm install -g # 4. 视频下载(YouTube)→ 使用 youtube-downloader skill # 见步骤1,自动通过 CDP + PoToken 绕过反爬 # 5. 音频提取 # getaudio依赖ffmpeg # 6. 视频处理工具(removeaudio, align-video, subburn) # 这些工具依赖ffmpeg,请确保ffmpeg已安装并加入PATH ``` **系统要求**: - Python 3.10+ - ffmpeg(音频处理) - youtube-downloader skill(YouTube 视频下载,替代直接 yt-dlp) - CUDA GPU(推荐,用于语音克隆) - 火山引擎API Key(语音识别) ## 工作流程 ### 概览 ``` YouTube URL → [youtube-downloader skill] → 视频文件 ↓ [getaudio] → 音频文件 ↓ 英文音频 → [volc-srt] → 英文字幕(带说话人) ↓ [翻译+合句] → 配音优化版字幕(时间轴已合并) ↓ ↓ [cutaudio] ← ─────────┘ 按合并时间轴切片 ↓ [voxclone] → 中文配音克隆(完整句子+数字转文字) ↓ [removeaudio] → 无声视频 ↓ [align-video] → 配音视频(fade + 24kHz) ↓ [getaudio] → 对齐后音频 ↓ [volc-srt] → 最终字幕 ↓ [subburn] → 字幕视频 ``` ### 步骤 1:下载 YouTube 视频 使用 **youtube-downloader skill** 下载视频。该 skill 自动处理认证问题 (通过 Chrome CDP 提取 cookies + bgutil PoToken 绕过反爬): ```bash # youtube-downloader skill 自动执行: # 1. 启动 bgutil PoToken 服务(端口 4416) # 2. 启动 Chrome CDP 从预登录 profile 提取 cookies # 3. 用 yt-dlp + cookies + PoToken 下载视频 ``` **示例**: 对用户来说,只需提供 YouTube URL,skill 自动处理整个下载链: ``` 为这个视频配音:https://www.youtube.com/watch?v=WIrDQYGpIbg ``` **输出**:视频文件保存为 `video.mp4` **工作原理**:youtube-downloader skill 会: 1. 确保 `bgutil-start` 服务在 4416 端口运行 2. 启动 Chrome(使用 `G:\chrome_data\remote_debug` 预登录 profile)开启 CDP 3. 通过 CDP `Network.getCookies` 提取 YouTube 认证 cookies 4. 转换为 Netscape 格式供 yt-dlp 使用 5. 执行 `yt-dlp URL --cookies cookies.txt` 下载视频 > ⚠️ 不再直接使用 `yt-dlp URL` 命令。 > 当 yt-dlp 提示 "Sign in to confirm you're not a bot" 或 DPAPI 错误时, > youtube-downloader skill 自动处理认证问题。 --- ### 步骤 2:提取音频(含人声/背景音分离) 使用 `getaudio` 从视频中提取音频,推荐开启人声分离: ```bash getaudio <视频文件路径> [-o <输出音频路径>] [--separate] ``` **示例**: ```bash # 推荐:提取并分离人声/背景音 getaudio test/video.mp4 -o test/video.mp3 --separate # 输出三个文件: # video.mp3 — 全频音频 # video_vocals.mp3 — 纯净人声(给 volc-srt 和 cutaudio 用) # video_bgm.mp3 — 背景音乐(最终混音用) ``` **参数说明**: - `input`: 输入视频文件路径(位置参数,不需要 `-i`) - `-o, --output`: 输出音频文件路径 - `--separate`: 启用 Demucs 人声/背景音分离(默认关闭,配音推荐开启) - `--model <name>`: Demucs 模型(默认 htdemucs_ft) --- ### 步骤 3:提取英文字幕 使用 `volc-srt` 将音频转为SRT字幕文件: ```bash volc-srt <音频文件路径> -o <输出字幕路径> -f srt ``` **示例**: ```bash # 使用纯净人声(video_vocals.mp3),而非全频音频,提升识别准确度 volc-srt test/video_vocals.mp3 -o test/video_en.srt --max-chars 100 ``` **参数说明**: - `audio`: 音频文件路径(mp3/wav/flac等) - `-o, --output`: 输出字幕路径(默认与音频同名) - `-f, --format`: 输出格式(srt/vtt/txt,默认srt) - `--speaker`: 说话人分离(默认开启,自动识别多人对话,10人以内效果好) - `--no-speaker`: 禁用说话人分离(单说话人场景可用,略快) - `--no-punc`: 禁用自动标点(不建议) **环境变量**(可选): ```bash set VOLC_API_KEY=your_api_key # 优先使用环境变量配置API Key ``` **预期输出**: - 有效SRT文件,包含连续序号、时间轴和文本 - 时间格式:`HH:MM:SS,mmm --> HH:MM:SS,mmm` - 常见时长:10分钟音频约100-150条字幕 **常见问题**: - API超时:增加 `--timeout 300` 参数 - 识别质量差:检查音频是否清晰,避免背景音乐过大 --- ### 步骤 4:翻译为中文字幕 使用 **srt-translator skill** 进行翻译: ```bash # 自动触发skill模式 /srt-translator test/video_en.srt --target-lang zh ``` **或手动执行**: 1. 读取SRT文件并解析 2. 提取专业术语,生成术语表 3. 用 merge_srt.py 预处理:计算合并组 + 数字批量转换 4. 分批次翻译合并后的条目(每批40-60条,可并行) 5. 输出最终配音优化版 `video_zh_dub.srt` **翻译要求**: - 保持时间轴格式完全不变 - 口语化、自然流畅 - 单行不超过40个中文字符 - 技术术语统一(参考术语表) - ⚠️ 数字必须转文字(2%→百分之二,防止TTS念错) - ⚠️ 语义不截断(半截句子合并) - ⚠️ 同人不截断(间隙<300ms的连续语句合并) **预期输出**: - `video_zh_dub.srt`: 配音优化版(已合句+数字转文字,供 voxclone 使用) - `video_glossary_zh.md`: 术语对照表 > ⚠️ 不在此步输出原版字幕,因为后续 align-video 会导致时间戳漂移。 > 烧字幕用的字幕在步骤11由 volc-srt 重新生成。 --- ### 步骤 5:音频切片(获取参考音频) 使用 `cutaudio` 按**配音优化版字幕**(已合句)的时间轴将原音频切片: > ⚠️ 不能按原版英文字幕切!翻译时会合并字幕条目(460→186),时间轴已变化。 > 必须用合并后的时间轴切,保证切片数量和顺序与 voxclone 字幕一一对应。 ```bash cutaudio -s <配音优化版字幕文件> -a <原音频文件> -o <输出目录> [--no-separate] ``` **示例**: ```bash # 用配音优化版字幕(已合句)的时间轴来切,使用纯净人声作为参考音频 # cutaudio 会自动给每个切片加 80ms 前/160ms 后 padding,给 VoxCPM2 更多上下文 cutaudio -s test/video_zh_dub.srt -a test/video_vocals.mp3 -o test/audio_clips --no-separate ``` **参数说明**: - `-s, --srt`: 配音优化版字幕路径(`video_zh_dub.srt`,不要用 `video_en.srt`) - `-a, --audio`: 音频文件路径(mp3/wav/flac,必需) - `-o, --out`: 输出目录(默认:`./output`) - `--no-separate`: 跳过人声分离(如果音频已是纯净人声) **重要提示**: - 切片数量应与 `video_zh_dub.srt` 条目数一致 - **默认输出格式为 .mp3**,但 `voxclone` 要求 **.wav 格式** **预期输出**: ``` audio_clips/ ├── 0001.mp3 ├── 0002.mp3 ├── ... └── 0321.mp3 ``` --- ### 步骤 6:格式转换(MP3 → WAV) **关键步骤**:voxclone 只接受 `.wav` 格式参考音频 使用 ffmpeg 批量转换: ```bash # Windows PowerShell $clips = Get-ChildItem audio_clips/*.mp3 foreach ($clip in $clips) { $wavPath = $clip.FullName -replace '\.mp3$', '.wav' ffmpeg -i $clip.FullName -ar 16000 -ac 1 $wavPath -y 2>$null } # Linux/macOS for f in audio_clips/*.mp3; do ffmpeg -i "$f" -ar 16000 -ac 1 "${f%.mp3}.wav" -y done ``` **参数说明**: - `-ar 16000`: 采样率16kHz(VoxCPM2推荐) - `-ac 1`: 单声道 - `-y`: 覆盖已存在文件 **验证**:确保 `.wav` 文件数量与字幕条数完全一致。 --- ### 步骤 7:中文配音克隆 使用 `voxclone` 生成中文配音(注意使用配音优化版字幕): ```bash voxclone dub -s <配音优化版字幕文件> [-a <参考音频目录>] -o <输出目录> [options] ``` **示例**: ```bash # 语音克隆模式(提供参考音频) voxclone dub -s test/video_zh_dub.srt -a test/audio_clips -o test/dubbed_output --device cuda --steps 10 # Voice Design 模式(无参考音频,纯文本合成) voxclone dub -s test/video_zh_dub.srt -o test/dubbed_output --voice-style "沉稳男性声音" ``` **参数说明**: - `-s, --subtitles`: 配音优化版字幕路径(`video_zh_dub.srt`) - `-a, --audio-dir`: 参考音频切片目录(包含 `.wav` 文件,语音克隆模式需要) - `--voice-style`: Voice Design 风格描述(与 `-a` 互斥,如 "沉稳男声") - `-o, --output`: 输出目录(默认:`output_dubbed`) - `--device`: 计算设备(`cuda`/`cpu`,默认cuda) - `--steps`: 推理步数(默认10,越高越好但越慢) - `--guidance-scale`: 引导强度(默认2.0) - `--python-env`: Python 解释器路径(默认自动检测,VoxCPM2 需要特定环境) - `--model`: VoxCPM2 模型 ID(默认 `openbmb/VoxCPM2`) - `--denoise`: 对参考音频降噪 - `--normalize`: 文本归一化 **Voice Design 模式**(无需参考音频): ```bash voxclone dub -s test/video_zh_dub.srt -o test/dubbed_output --voice-style "沉稳男性声音" --steps 10 ``` **重要提示**: - 必须使用 `video_zh_dub.srt`(配音优化版),不要用原版 - VoxCPM2 输出 48kHz 高品质音频,内置 fade + RMS 归一化 - VoxCPM2 比 OmniVoice 音质更好,tokenizer-free 连续表示 **预期输出**: ``` dubbed_output/ ├── 0001.wav ├── 0002.wav ├── ... └── 0321.wav ``` --- ### 步骤 7:去除原视频音频 使用 `removeaudio` 获取无声视频: ```bash removeaudio <视频文件路径> [-o <输出视频路径>] ``` **示例**: ```bash removeaudio test/video.mp4 -o test/video_no_audio.mp4 ``` **参数说明**: - `input`: 输入视频文件路径(位置参数,不需要 `-i`) - `-o, --output`: 输出无声视频文件路径(默认:`input_no_audio.<ext>`) - `-y`: 覆盖已存在文件 --- ### 步骤 8:对齐音频和视频 使用 `align-video` 将配音后的音频与无声视频对齐: ```bash align-video <中文字幕路径> <视频路径> <配音音频目录> <输出视频路径> ``` **示例**: ```bash # 两级变速对齐默认开启(全局+局部双调,防止极端变速导致音质劣化) # 如需关闭:--no-adaptive-speed align-video test/video_zh_dub.srt test/video_no_audio.mp4 test/dubbed_output test/aligned.mp4 ``` **参数说明**(位置参数): 1. `srt`: 配音优化版字幕(`video_zh_dub.srt`) 2. `video`: 无声视频路径 3. `dubbed_dir`: 配音音频切片目录 4. `output`: 输出对齐后的视频路径 **可选参数**: - `--workers`: 并发线程数(默认4) - `--resume`: 断点续传 - `--rife`: 使用 RIFE GPU 插帧 - `--adaptive-speed`: 启用两级变速对齐(默认关闭) - `--audio-stretch`: 旧版音频拉伸模式 - `--scene-snap`: 智能场景边界对齐 **可选参数**: - `--workers`: 并发处理线程数(默认4) - `--resume`: 断点续传(从上次中断处继续) - `--no-audio-stretch`: 禁用音频拉伸 - `--scene-snap`: 智能场景边界对齐 - `--rife`: 使用 RIFE GPU 插帧(默认关闭) **重要提示**: - 确保字幕时间轴与视频画面匹配 - 对齐后的视频会自动匹配原始视频时长 - 处理时间较长,支持断点续传(`--resume`) --- ### 步骤 9:混入背景音乐 将保留的背景音以 30% 音量混入配音视频,掩盖片段衔接痕迹: ```bash ffmpeg -i test/aligned.mp4 -i test/video_bgm.mp3 \ -filter_complex "[0:a]volume=1.0[a0];[1:a]volume=0.30[a1];[a0][a1]amix=inputs=2:duration=longest:normalize=0[aout]" \ -map 0:v -map "[aout]" -c:v copy -c:a aac -b:a 192k test/aligned_with_bgm.mp4 -y ``` > 背景音来自步骤2的 `--separate` 输出 (`video_bgm.mp3`)。 > 如果步骤2未开启 `--separate`,跳过此步。 --- ### 步骤 10:提取对齐后的音频 align-video 处理后配音位置和时间戳已变化,必须重新提取音频: ```bash getaudio <对齐后的视频路径> -o <输出音频路径> ``` **示例**: ```bash getaudio test/aligned.mp4 -o test/aligned_dubbed.wav ``` --- ### 步骤 10:提取最终字幕 从对齐后的音频重新获取字幕(时间戳已变化): ```bash # --max-chars 20: 适合字幕显示,避免单行过长 # --no-speaker: 不输出说话人标记(最终字幕是给人看的,不需要 [说话人1]) volc-srt <对齐后的音频路径> -o <输出字幕路径> --max-chars 20 --no-speaker ``` **示例**: ```bash volc-srt test/aligned_dubbed.wav -o test/final.srt --max-chars 20 --no-speaker ``` > ⚠️ 这里的参数与步骤3不同: > - `--max-chars 20`(步骤3是100):最终字幕要分行显示,字符数越少越好 > - `--no-speaker`(步骤3是默认开启):最终字幕不需要 [说话人X] 标记 --- ### 步骤 11:烧制字幕到视频 使用 `subburn` 将翻译后的字幕烧制到视频上: ```bash subburn <视频路径> <字幕路径> [输出路径] ``` **示例**: ```bash subburn test/dubbed_video.mp4 test/video_zh.srt test/final_dubbed_video.mp4 ``` **参数说明**(位置参数): 1. `video`: 输入视频文件路径 2. `srt`: 字幕SRT文件路径 3. `output`: 输出带字幕的视频路径(默认自动生成) --- ### 步骤 6(可选):合并配音片段 如果需要合并为完整音频: ```bash # 使用ffmpeg合并(按文件名排序) ffmpeg -f concat -safe 0 -i <(for f in dubbed_output/*.wav; do echo "file '$PWD/$f'"; done) -c copy final_dubbed.wav ``` --- ## 完整工作流示例 ```bash # 1. 下载YouTube视频(使用 youtube-downloader skill,自动处理认证)
Voir sur GitHub
Ce SKILL.md est tres volumineux, SkillsMP affiche donc ici seulement la premiere section. Voir sur GitHub