$npx -y skills add chubbyguan/chubbyskills --skill bilibili-transcribe哔哩哔哩视频 → 下载 → 转录 → 存为 Markdown 的完整工作流。 支持 BV 号和完整链接,无需登录。
| 1 | # B 站视频转录 Skill |
| 2 | |
| 3 | **字幕优先**:先尝试抓取官方/自动字幕(秒级、免 GPU、免 funasr);抓不到再下载音频用 SenseVoice-Small 转录,存为 Markdown 文件。加 `--no-subtitle` 可强制走音频转录。 |
| 4 | |
| 5 | ## 环境要求 |
| 6 | |
| 7 | ```bash |
| 8 | # Python 3.9+ |
| 9 | python -m venv .venv |
| 10 | source .venv/bin/activate |
| 11 | |
| 12 | # 依赖 |
| 13 | pip install funasr modelscope torch torchaudio |
| 14 | |
| 15 | # 系统依赖 |
| 16 | # macOS: brew install ffmpeg yt-dlp |
| 17 | # Ubuntu: sudo apt install ffmpeg && pip install yt-dlp |
| 18 | ``` |
| 19 | |
| 20 | ## 使用方法 |
| 21 | |
| 22 | ```bash |
| 23 | python scripts/transcribe.py "https://www.bilibili.com/video/BV1rrQGBeEen/" |
| 24 | python scripts/transcribe.py "BV1rrQGBeEen" |
| 25 | python scripts/transcribe.py "BV1rrQGBeEen" --no-subtitle # 强制音频转录 |
| 26 | |
| 27 | # 批量处理:每行一个 B站 URL 或 BV 号 |
| 28 | python scripts/batch_transcribe.py ../../examples/bilibili-urls.txt -o ./output |
| 29 | ``` |
| 30 | |
| 31 | ## 流程 |
| 32 | |
| 33 | ### Step 1: yt-dlp 下载音频 |
| 34 | |
| 35 | B 站有反爬机制,需要加 User-Agent 和 Referer: |
| 36 | |
| 37 | ```bash |
| 38 | yt-dlp --extract-audio --audio-format mp3 --audio-quality 128K \ |
| 39 | --user-agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ..." \ |
| 40 | --referer "https://www.bilibili.com" \ |
| 41 | "https://www.bilibili.com/video/BV1rrQGBeEen/" |
| 42 | ``` |
| 43 | |
| 44 | ### Step 2: SenseVoice-Small 转录 |
| 45 | |
| 46 | ```python |
| 47 | from funasr import AutoModel |
| 48 | from funasr.utils.postprocess_utils import rich_transcription_postprocess |
| 49 | |
| 50 | model = AutoModel( |
| 51 | model="iic/SenseVoiceSmall", |
| 52 | trust_remote_code=True, |
| 53 | vad_model="fsmn-vad", |
| 54 | vad_kwargs={"max_single_segment_time": 30000}, |
| 55 | device="cpu", |
| 56 | ) |
| 57 | |
| 58 | result = model.generate(input=audio_path, language="zh", use_itn=True, batch_size_s=60) |
| 59 | ``` |
| 60 | |
| 61 | ### Step 3: 生成 Markdown |
| 62 | |
| 63 | 自动创建带 frontmatter 的 Markdown 文件。 |
| 64 | |
| 65 | ### 批量模式 |
| 66 | |
| 67 | `scripts/batch_transcribe.py` 会逐条调用单篇转录脚本,默认单条失败后继续处理下一条;需要严格模式时加 `--stop-on-error`。 |
| 68 | |
| 69 | ## 性能数据 |
| 70 | |
| 71 | | 视频时长 | 转录耗时 | |
| 72 | |------|------| |
| 73 | | 5 min | ~10s | |
| 74 | | 10 min | ~20s | |
| 75 | | 30 min | ~60s | |
| 76 | |
| 77 | ## 已知限制 |
| 78 | |
| 79 | - B 站 4K/1080P60 需要大会员,普通用户可下载 720P 以下 |
| 80 | - SenseVoice-Small 模型首次下载约 893MB |
| 81 | - 不支持说话人分离 |
| 82 | - 合集视频会下载第一个分 P |
| 83 | |
| 84 | ## 参考项目 |
| 85 | |
| 86 | - [yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp) - 视频下载工具 |
| 87 | - [FunAudioLLM/SenseVoice](https://github.com/FunAudioLLM/SenseVoice) - 语音识别模型 |
| 88 | |
| 89 | ## ⚖️ 合规声明 |
| 90 | |
| 91 | 仅供**个人学习与研究**使用。请遵守目标平台的服务条款(ToS)与 robots 规则,控制请求频率,不要用于批量抓取、商用爬取或侵犯他人权益的场景。下载内容的版权归原作者所有。 |