YouTube 到 Ebook
将您最喜欢的 YouTube 频道的视频转换为精美的杂志风格文章,并以 EPUB 电子书的形式呈现。
此技能的功能
从 YouTube 频道获取最新的视频(过滤掉 Shorts)
从这些视频中提取转录文本
使用 Claude 将转录文本转换为精美的文章
将文章打包成 EPUB 电子书,以便在任何设备上阅读
快速开始
问:"为我设置 YouTube 到 ebook"
我将指导您完成以下步骤:
创建项目文件夹
设置 YouTube API 访问
配置您最喜欢的频道
生成您的第一个电子书
要求
Python 3.8+
YouTube Data API 密钥(从 Google Cloud Console 免费获取)
Anthropic API 密钥(用于 Claude)
命令
命令 描述
python main.py 生成最新视频的电子书
python main.py --channels 编辑频道列表
python dashboard.py 启动 web 控制面板
关键文件
youtube-newsletter/
├── get_videos.py # 获取最新视频
├── get_transcripts.py # 提取转录文本
├── write_articles.py # 将转录文本转换为文章
├── send_email.py # 创建 EPUB 并发送
├── main.py # 运行完整流程
├── channels.txt # 您的频道列表
└── .env # API 密钥
已知问题和解决方案
- YouTube Shorts 检测问题:按时长过滤不起作用——有些 Shorts 的时长超过 60 秒。
解决方案:检查 /shorts/ URL 是否解析:def is_youtube_short(video_id): shorts_url = f"https://www.youtube.com/shorts/{video_id}" response = requests.head(shorts_url, allow_redirects=True, timeout=5) return "/shorts/" in response.url
- 视频不按时间顺序排列问题:YouTube Search API 不返回真正的时间顺序结果。
解决方案:使用频道的上传播放列表通过 playlistItems API:# 获取上传播放列表 ID 从频道 channel_info = youtube.channels().list(part="contentDetails", forHandle=handle).execute() uploads_playlist_id = channel_info["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"] # 从上传播放列表获取(始终按时间顺序)youtube.playlistItems().list(part="snippet", playlistId=uploads_playlist_id, maxResults=15).execute()
- 转录 API 语法问题:YouTubeTranscriptApi.get_transcript() 不再起作用。
解决方案:使用实例方法:from youtube_transcript_api import YouTubeTranscriptApi ytt_api = YouTubeTranscriptApi() transcript = ytt_api.fetch(video_id)
- 转录速率限制问题:快速获取多个转录文本会触发速率限制。
解决方案:在请求之间添加 2 秒的延迟:import time for video in videos: transcript = get_transcript(video["video_id"]) time.sleep(2)
- 转录准确性(名称、术语)问题:自动转录会错别名称和技术术语。
解决方案:在 Claude 的上下文中包含视频标题和描述——这些通常具有正确的拼写。
- 云自动化被阻止问题:GitHub Actions 和云服务器被 YouTube 阻止以获取转录文本。
解决方案:在 Mac 上使用 launchd 运行本地自动化: Label com.youtube.ebook ProgramArguments /usr/bin/python3 /path/to/main.py StartCalendarInterval Weekday 3 Hour 7
自定义
写作风格 编辑 write_articles.py 中的提示以更改文章语气:杂志风格(默认)学术摘要 随意博客文章 技术文档
电子邮件发送(可选) 将 Gmail 凭据添加到 .env 以通过电子邮件接收电子书:GMAIL_ADDRESS=your@gmail.com GMAIL_APP_PASSWORD=your-app-password
工作流
┌─────────────┐ ┌──────────────┐ ┌───────────────┐ ┌────────────┐
│ 获取视频(YouTube API)│───▶│获取转录文本(Transcript API)│───▶│写文章(Claude AI)│───▶│创建 EPUB(ebooklib)│
│ (YouTube API)│ │(Transcript API)│ │(Claude AI)│ │(ebooklib)│
└─────────────┘ └──────────────┘ └───────────────┘ └────────────┘
示例输出
生成的 EPUB 包含:
所有文章的目录
干净、可读的格式
原始视频链接以供参考
移动设备友好的样式