$npx -y skills add chubbyguan/chubbyskills --skill youtube-transcribeYouTube 视频 → 下载 → 转录 → 翻译 → 存为 Markdown。 支持中英文,英文内容自动翻译成中文,输出中英对照。
| 1 | # YouTube 视频转录 + 翻译 Skill |
| 2 | |
| 3 | **字幕优先**:先抓官方/自动字幕(秒级、免 GPU),抓不到再下载音频用 SenseVoice-Small 转录;英文内容自动翻译成中文,输出中英对照 Markdown。加 `--no-subtitle` 可强制走音频转录。 |
| 4 | |
| 5 | ## 为什么需要这个 |
| 6 | |
| 7 | YouTube 有大量优质英文内容,但很多人没时间看完或语言不通。这个 skill: |
| 8 | |
| 9 | - 转录视频为文字(支持中英文) |
| 10 | - 英文内容自动翻译成高质量中文 |
| 11 | - 输出中英对照,方便学习 |
| 12 | |
| 13 | ## 环境要求 |
| 14 | |
| 15 | ```bash |
| 16 | # Python 3.9+ |
| 17 | python -m venv .venv |
| 18 | source .venv/bin/activate |
| 19 | |
| 20 | # 依赖 |
| 21 | pip install funasr modelscope torch torchaudio |
| 22 | |
| 23 | # 系统依赖 |
| 24 | # macOS: brew install ffmpeg yt-dlp |
| 25 | # Ubuntu: sudo apt install ffmpeg && pip install yt-dlp |
| 26 | |
| 27 | # 翻译功能(可选,英文视频需要) |
| 28 | export DEEPSEEK_API_KEY="your-api-key" |
| 29 | ``` |
| 30 | |
| 31 | ## 使用方法 |
| 32 | |
| 33 | ```bash |
| 34 | python scripts/transcribe.py "https://www.youtube.com/watch?v=xxxxx" |
| 35 | python scripts/transcribe.py "https://www.youtube.com/watch?v=xxxxx" --output ./output |
| 36 | python scripts/transcribe.py "https://www.youtube.com/watch?v=xxxxx" --no-translate # 不翻译 |
| 37 | python scripts/transcribe.py "https://www.youtube.com/watch?v=xxxxx" --no-subtitle # 强制音频转录 |
| 38 | python scripts/batch_transcribe.py ../../examples/youtube-urls.txt -o ./output --no-translate |
| 39 | ``` |
| 40 | |
| 41 | ## 流程 |
| 42 | |
| 43 | ### Step 1: yt-dlp 下载音频 |
| 44 | |
| 45 | ```bash |
| 46 | yt-dlp --extract-audio --audio-format mp3 --audio-quality 128K \ |
| 47 | "https://www.youtube.com/watch?v=xxxxx" |
| 48 | ``` |
| 49 | |
| 50 | ### Step 2: SenseVoice-Small 转录 |
| 51 | |
| 52 | ```python |
| 53 | from funasr import AutoModel |
| 54 | model = AutoModel(model="iic/SenseVoiceSmall", ...) |
| 55 | result = model.generate(input=audio_path, language="auto", use_itn=True) |
| 56 | ``` |
| 57 | |
| 58 | ### Step 3: 语言检测 + 翻译 |
| 59 | |
| 60 | - 中文内容 → 直接输出 |
| 61 | - 英文内容 → LLM 翻译成中文,输出中英对照 |
| 62 | |
| 63 | ### Step 4: 生成 Markdown |
| 64 | |
| 65 | ```markdown |
| 66 | --- |
| 67 | title: 视频标题 |
| 68 | type: note |
| 69 | tags: [YouTube] |
| 70 | language: en |
| 71 | translated: true |
| 72 | --- |
| 73 | |
| 74 | # 视频标题 |
| 75 | |
| 76 | > 转录引擎:SenseVoice-Small | 翻译:DeepSeek |
| 77 | |
| 78 | ## 中文翻译 |
| 79 | |
| 80 | 翻译内容... |
| 81 | |
| 82 | --- |
| 83 | |
| 84 | ## English Original |
| 85 | |
| 86 | 原文内容... |
| 87 | ``` |
| 88 | |
| 89 | ### 批量模式 |
| 90 | |
| 91 | `scripts/batch_transcribe.py` 支持 URL 列表批处理,默认单条失败后继续处理下一条;需要严格模式时加 `--stop-on-error`。 |
| 92 | |
| 93 | ## 翻译配置 |
| 94 | |
| 95 | 默认使用 DeepSeek API 翻译。需要设置环境变量: |
| 96 | |
| 97 | ```bash |
| 98 | export DEEPSEEK_API_KEY="your-api-key" |
| 99 | ``` |
| 100 | |
| 101 | 支持的 LLM: |
| 102 | - DeepSeek(推荐,性价比高) |
| 103 | - OpenAI |
| 104 | - 任何兼容 OpenAI API 格式的服务 |
| 105 | |
| 106 | ## 性能数据 |
| 107 | |
| 108 | | 视频时长 | 下载 | 转录 | 翻译 | 总耗时 | |
| 109 | |------|------|------|------|------| |
| 110 | | 5 min | ~10s | ~5s | ~10s | ~30s | |
| 111 | | 10 min | ~15s | ~10s | ~20s | ~50s | |
| 112 | | 30 min | ~30s | ~30s | ~60s | ~2min | |
| 113 | |
| 114 | ## 已知限制 |
| 115 | |
| 116 | - SenseVoice-Small 对英文转录准确率不如中文 |
| 117 | - 翻译质量取决于 LLM 能力 |
| 118 | - 长视频翻译可能需要较长时间 |
| 119 | - 部分 YouTube 视频有地区限制 |
| 120 | |
| 121 | ## 参考项目 |
| 122 | |
| 123 | - [yt-dlp/yt-dlp](https://github.com/yt-dlp/yt-dlp) - 视频下载工具 |
| 124 | - [FunAudioLLM/SenseVoice](https://github.com/FunAudioLLM/SenseVoice) - 语音识别模型 |
| 125 | - [DeepSeek](https://platform.deepseek.com/) - 翻译用 LLM |
| 126 | |
| 127 | ## ⚖️ 合规声明 |
| 128 | |
| 129 | 仅供**个人学习与研究**使用。请遵守目标平台的服务条款(ToS)与 robots 规则,控制请求频率,不要用于批量抓取、商用爬取或侵犯他人权益的场景。下载内容的版权归原作者所有。 |