写给AI时代播客视频转字幕阅读、翻译的spec
1. 系统概述
本系统是一套完整的视频音频处理自动化流水线,用于将外语视频转化为中文配音视频。系统涵盖以下核心能力:
- 视频获取:从 YouTube、Bilibili、Instagram 等平台下载视频和字幕
- 语音识别 (ASR):使用 faster-whisper (large-v3) + VAD 将音频转为文字
- 字幕处理:自动优化时间轴、合并短句、过滤幻觉和噪音
- AI 翻译:通过 Claude API 将字幕翻译为中文
- 语音合成 (TTS):使用 IndexTTS2 将中文字幕合成为语音
- 音视频合成:背景音分离、配音混合、字幕烧录,输出最终视频
运行平台:macOS (Apple Silicon M4)。
1.1 术语表
| 术语 |
全称 |
含义 |
| ASR |
Automatic Speech Recognition |
自动语音识别,将音频转为文字 |
| TTS |
Text-to-Speech |
文本转语音,将文字合成为音频 |
| VAD |
Voice Activity Detection |
语音活动检测,区分语音和静音段 |
| BPE |
Byte Pair Encoding |
子词分词算法,用于文本 token 化 |
| Mel |
Mel Spectrogram |
梅尔频谱图,音频的频域表示 |
| CFM |
Conditional Flow Matching |
条件流匹配,一种扩散生成方法 |
| DiT |
Diffusion Transformer |
扩散 Transformer,用于频谱生成 |
| VQ-VAE |
Vector Quantized VAE |
向量量化变分自编码器,用于离散化连续特征 |
| SRT |
SubRip Text |
字幕文件格式 |
2. 整体流水线
系统按以下顺序执行,每步产出的文件作为下一步的输入。每步均支持断点续传(检查输出文件是否已存在)。
graph TD
Input[视频输入 URL / 本地文件] --> Step1{Step 1: 字幕下载 yt-dlp}
Step1 -- 下载成功 --> Skip[跳过 Step 3-5]
Step1 -- 无字幕/失败 --> Step2[Step 2: 视频下载 yt-dlp]
Step2 --> Step3[Step 3: 音频提取 ffmpeg]
Step3 -->|WAV 16kHz Mono| Step4[Step 4: 语音识别 ASR]
Step4 -->|SRT| Step5[Step 5: 字幕优化 SubtitleOptimizer]
Skip --> Step6[Step 6: AI 翻译 Claude API]
Step5 --> Step6
Step6 -->|中文 SRT| Step7[Step 7: TTS 语音合成 IndexTTS2]
Step7 -->|语音 WAV| Step8[Step 8: 音频混合 ffmpeg]
subgraph AudioMixing [音频处理]
Step8a[背景音分离 karaoke算法]
Step8b[TTS配音 + 背景音混合]
end
Step8 --> Step8a --> Step8b
Step8b --> Step9[Step 9: 视频合成 ffmpeg]
Step9 -->|字幕烧录/饱和度增强| Output((最终输出 MP4))
style Input fill:#f9f,stroke:#333,stroke-width:2px
style Output fill:#9f9,stroke:#333,stroke-width:2px
关键脚本对应关系:
| 步骤 |
脚本 |
说明 |
| 总调度 |
download_and_process.sh |
串联所有步骤的主入口 |
| Step 1-2 |
getvideo.sh |
视频和字幕下载 |
| Step 3-5 |
process_video_part1.sh |
音频提取 + ASR + 字幕优化 |
| Step 4-5 |
get_srt_by_wisper.py |
faster-whisper 转录 + 字幕优化 |
| Step 6 |
translate_by_claude.sh |
Claude API 翻译 |
| Step 7-9 |
process_video_part2.sh / _plus.sh |
TTS + 混音 + 视频合成 |
3. 组件详细规格
3.1 视频下载组件 — yt-dlp
使用 yt-dlp 从多个平台下载视频和字幕。优先尝试下载平台自带字幕(可跳过语音识别步骤)。
| 工具 |
yt-dlp |
| 认证方式 |
--cookies-from-browser edge |
| SD 下载格式 |
18/93/91/worst[ext=mp4]/worst (优先 360p) |
| HD 下载格式 |
bestvideo[height>=720]+bestaudio (720p+) |
| 字幕下载 |
--write-auto-subs --sub-format srt --skip-download --all-subs |
3.2 音频提取组件 — ffmpeg
将音频转为 Whisper 所需的标准格式。
| 输出编码 |
PCM 16-bit Little-Endian (pcm_s16le) |
| 采样率 |
16000 Hz |
| 声道数 |
1 (Mono) |
ffmpeg -i {input} -vn -acodec pcm_s16le -ar 16000 -ac 1 {output}.wav
3.3 语音识别组件 — faster-whisper
系统优先使用 faster-whisper(支持 VAD 防幻觉)。
为什么需要 VAD? Whisper 在静音段容易生成"幻觉"文本(如"请订阅")。VAD 只对有语音的部分进行转录,从根本上避免此问题。
3.3.1 配置与参数
| 模型 |
large-v3 (int8 量化) |
| 设备 |
CPU (适配 Mac M4) |
| VAD 开关 |
vad_filter=True |
| VAD 参数 |
静音时长: 500ms, 阈值: 0.5 |
| 防幻觉参数 |
condition_on_previous_text=False, temperature=0 |
3.4 字幕优化组件 — SubtitleOptimizer
对 ASR 结果进行四步优化:
- 时间戳优化:相邻片段间隔 < 1000ms 时对齐。
- 短句合并:片段 < 5 词且合并后不超长时合并。
- 噪音过滤:移除
【, ♪ 等开头及空片段。
- 幻觉过滤:基于规则(重复文本、中文"谢谢订阅"、英文"Subscribe"等)。
3.5 AI 翻译组件 — Claude API
- API: Anthropic Claude
- 功能: 支持自定义 Prompt 和 术语表 (Glossary)。
- 策略: 长字幕分批发送,保持 SRT 时间轴不变。
3.6 TTS 语音合成组件 — IndexTTS2
IndexTTS2 是一个零样本(Zero-Shot)文本转语音系统,支持音色克隆和 8 维情感控制。
3.6.1 架构概览
graph TD
subgraph Input [输入处理]
RefAudio((参考音频))
Text([文本/情感描述])
end
subgraph Features [特征提取]
W2V[W2V-BERT 2.0]
CAMP[CAMPPlus 风格编码]
MelExt[Mel 频谱提取]
Qwen[QwenEmotion 情感模型]
end
subgraph Semantic [语义编码]
VQ[Semantic Codec VQ-VAE]
Codes[离散 Codes]
end
subgraph Synthesis [生成模型]
GPT[GPT UnifiedVoice]
Latent[Latent Features]
Diff[S2Mel 扩散模型 DiT+CFM]
end
subgraph Output [声码器]
BigVGAN[BigVGAN]
Wave((输出波形))
end
RefAudio -->|音色/情感| W2V
RefAudio -->|风格| CAMP
RefAudio -->|Mel参考| MelExt
Text --> Qwen
W2V --> VQ --> Codes
CAMP --> GPT
Qwen --> GPT
MelExt --> GPT
Codes --> GPT
GPT -->|Mel Codes| Latent
Latent -->|Prompt Condition| Diff
Diff -->|80-band Mel| BigVGAN
BigVGAN --> Wave
style RefAudio fill:#fff3cd,stroke:#d6b656
style Wave fill:#d4edda,stroke:#c3e6cb
style GPT fill:#e2e3e5,stroke:#333
style Diff fill:#e2e3e5,stroke:#333
3.6.2 关键模型参数
| 子模型 |
关键参数 / 说明 |
| GPT UnifiedVoice |
24 层, 1280 维, 20 头。文本 Token 上限 600,Mel Token 上限 1815。 |
| S2Mel 扩散 |
DiT 架构 + CFM 采样。步数:25,CFG Rate: 0.7。 |
| Semantic Codec |
码本大小: 8192。提取 W2V-BERT 第 17 层特征。 |
| BigVGAN |
22kHz, 80-band Mel 输入。 |
3.6.3 情感控制
支持 8 维情感向量控制(喜、怒、哀、惧、厌恶、低落、惊喜、平静)。情感向量经归一化(总和 0.8)后与音色嵌入混合。
3.7 音频混合与视频合成 — ffmpeg
3.7.1 背景音分离 (Karaoke 算法)
默认使用卡拉OK算法配合带通滤波:
pan=mono|c0=0.5*c0+-0.5*c1,highpass=f=200,lowpass=f=3400
3.7.2 混合参数
- 背景音音量: 0.2 (20%)
- 配音音量: 1.0 (100%)
- TTS 语速: 1.5x (默认)
- 字幕烧录: 白色字体,黑色描边,垂直边距 50。
4. 文件组织结构
{工作目录}/
├── {video}.mp4 # 原始视频 (SD)
├── {video}_hd.mp4 # 高清视频 (可选)
├── {video}_temp/ # 工作临时目录
│ ├── *.wav # 提取的音频 / TTS 单句 / 混合音频
│ ├── *.srt # ASR 字幕 / 优化字幕 / 翻译字幕
│ ├── *.mp4 # 中间视频文件
│ └── *.md # 文案
├── ttstasks/
│ └── {video}.json # TTS 任务配置
└── checkpoints/ # IndexTTS2 模型文件
5. 关键设计决策
- VAD 防幻觉:三重防护机制(VAD 过滤 + 禁用上下文依赖 + 高置信度阈值),解决 Whisper 静音段幻觉问题。
- Mac 适配:ASR 使用 CPU + INT8 量化;IndexTTS2 禁用 MPS FP16(因性能倒退)强制使用 FP32。
- 音质提升:引入 S2Mel 扩散模型(25步 CFM),相比直接 GPT 生成波形,显著提升了频谱的细节还原度。
- 音色解耦:使用 W2V-BERT 提取语义 + VQ-VAE 量化,将内容与音色分离,实现更准确的零样本克隆。
- 断点续传:全流程基于文件存在性检查,支持随时中断和恢复。