视频下载与语音识别工作流
Z3 全文↑ Z2 条目
术-流程 · 术层 skill 全文
本页是 <code>rules/skills/workflow_bilibili_whisper_transcription.md</code> 的逐字投影(仅隐私清洗,零改写)。
时点提示:本页是仓内文件 rules/skills/workflow_bilibili_whisper_transcription.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。
视频下载与语音识别工作流
元数据
- 类型: Workflow
- 适用场景: Bilibili/YouTube/X 视频批量下载 + 语音转录
- 创建日期: 2025-02-12
- 最后更新: 2026-05-03
- 原项目已归档(不再保留在 workspace 中)
路径约定
- 临时下载与中间产物:
tmp/<task_name>/ - 最终可长期保留的 transcript:
adhoc_jobs/videos_transcribe/transcripts/ - 最终默认只保留不带时间轴的纯文本脚本,文件名建议:
YYYYMMDD_platform_videoid_short_slug.md - 音频、
.srt、.vtt、.tsv、.json等中间产物在 transcript 落盘后清理到废纸篓
可用工具
| 工具 | 路径 | 用途 |
|---|---|---|
bilibili_download | 查 tools/INDEX.md | B 站视频/音频下载(BBDown) |
video_download | 查 tools/INDEX.md | YouTube/X/Twitter 等通用下载(yt-dlp) |
audio_transcribe | 查 tools/INDEX.md | 音频转录(默认 Groq Whisper API,备选 Windows Remote GPU) |
核心流程
三阶段工作流:
- 获取列表 / 下载
- B 站 →
bilibili_download download <url> --audio-only(BBDown,反爬更稳定) - YouTube →
video_download download <url> --audio-only(yt-dlp + deno) - X/Twitter →
video_download download <url> --audio-only --cookies(必须带 cookie) - B 站批量下载注意间隔 2-3 秒,避免 352 错误
- 转录
- 默认:
audio_transcribe run.sh <file>(Groq Whisper API,不占用本机推理资源) - 备选:
audio_transcribe run.sh <file> --engine remote-gpu(Windows/WSL Remote GPU) - 批量:
audio_transcribe run.sh <dir> --batch - 后处理
- Whisper API / Remote GPU 输出仍需按内容质量决定是否做 LLM 后处理(繁简转换、标点、术语纠正、分段)
关键决策
| 决策点 | 选择 | 原因 |
|---|---|---|
| B 站下载工具 | BBDown(bilibili_download) | 比 yt-dlp 的 B 站 extractor 更稳定,支持弹幕/课程/杜比 |
| 其他平台下载 | yt-dlp(video_download) | 通用下载器之王,YouTube 需要 deno |
| 转录引擎 | Groq Whisper API(默认) | 远端 API 识别,避免占用本机 CPU/GPU/内存 |
| 下载并发 | 单线程 | 避免触发B站反爬机制 |
| 转录并发 | 批量模式 | audio_transcribe 的 --batch 参数 |
| 输出格式 | 最终保留纯文本 transcript | 后续检索更稳定,中间产物可回收 |
转录引擎选择
默认:Groq Whisper API。原则是所有识别计算走远端/API;本机只做文件枚举、必要的轻量 ffmpeg 分片、API/SSH 调用和结果写入。
| 引擎 | 运行位置 | 适用场景 | 注意事项 |
|---|---|---|---|
groq-whisper | Groq API | 默认首选,速度快,不占本机推理资源 | 大文件会按 25MB API 限制自动分片;遇到 429 会等待后重试 |
remote-gpu | Windows/WSL Remote GPU | Groq API 不可用、额度不足或需要远端 GPU 兜底 | 依赖 Windows 远端服务、SSH/Tailscale 和远端环境 |
当前工作流不提供本机识别 engine。
LLM 后处理
- 转换为简体中文 — 识别可能为繁体
- 添加标点符号 — 根据语义添加逗号、句号、问号
- 合理分段 — 按主题划分段落,添加小标题
- 纠正术语 — 专业名词识别错误(如"木质布"→"木质部"、"筛管细胞")
- 优化可读性 — 调整语序、补充缺失内容
踩坑记录
| 问题 | 现象 | 解决方案 |
|---|---|---|
| 352错误 | 请求被B站拦截 | 添加User-Agent/Referer headers,增加延迟,或手动获取ID |
| 404错误 | 视频已删除或ID错误 | 验证ID有效性,跳过无效视频,记录失败ID |
| 下载不完整 | .m4a文件无法播放 | 检查文件大小,重新下载,添加完整性验证 |
| Groq 25MB 限制 | 大文件直接上传失败 | 使用默认引擎,工具会自动用 ffmpeg 做轻量音频分片 |
| Groq 429 限速 | API 返回 audio-seconds/hour 限制 | 工具会解析等待时间并重试当前分片 |
| Remote GPU 不可达 | SSH/Tailscale/Windows 环境失败 | 优先排查远端连接;不要回退到本机识别 |
最佳实践
下载阶段:
- B 站:
bilibili_download download <url> --audio-only,单线程 + 反爬内置 - YouTube:
video_download download <url> --audio-only,需要 deno - X/Twitter:
video_download download <url> --audio-only --cookies,必须带 cookie - 记录失败 ID,批量下载注意间隔
转录阶段: audio_transcribe run.sh <file_or_dir> [--batch],默认 Groq Whisper API;需要兜底时显式加 --engine remote-gpu
落盘阶段: 在 tmp/ 完成下载和转录,整理出纯文本脚本后移入 adhoc_jobs/videos_transcribe/transcripts/
清理阶段: transcript 落盘后删除或回收音频、时间轴字幕和 sidecar 文件,只保留最终脚本
质量优化: 对中文课程类内容优先做术语纠正、合理分段和小标题整理;必要时人工校对
错误处理: 实现重试机制,验证文件完整性,处理异常避免脚本中断