一键将本地音频文件夹转换为私人播客 RSS 订阅源,零侵入、无副作用
播客 RSS 是一个强大的音频分发标准,它不仅仅是一个简单的音频列表,更提供了:
- 🔖 完整的播放进度记录
- 🎯 精确的断点续播功能
- 🔄 跨设备的收听历史同步
- 📱 多平台收听支持
- 🎨 丰富的媒体信息展示
Folder2Podcast RSS 让您可以轻松地把本地音频文件夹转换为私人播客 RSS 源,享受专业播客客户端的所有高级特性:
- 🎧 使用您最喜欢的播客应用收听(如 Apple Podcasts、Pocket Casts)
- 📱 在任何设备上继续上次的收听进度
- 🔄 自动同步多设备间的收听历史
- 📚 系统化管理您的有声内容库
- 🎯 智能记住每个音频的播放位置
只需一个命令部署,让您的本地音频秒变私人播客订阅源。
- 🔒 零侵入设计 - 以只读方式访问音频文件,不修改原始文件夹结构和内容
- 🎯 标准 RSS 实现 - 完整支持播客 RSS 2.0 规范和 iTunes 专有标签
- 📱 完美客户端兼容 - 适配所有主流播客客户端
- 🔄 智能序列化 - 自动分析文件名构建剧集顺序,生成发布时间
- 🎨 个性化配置 - 支持播客元数据自定义(标题、作者、封面等)
- 🚀 容器化部署 - 提供 Docker 一键部署方案
- 准备工作
- 安装 Docker
- 准备音频文件目录(按播客内容分文件夹)
- 规范文件命名(如:01-第一章.mp3、第02集.mp3)
在部署到服务器时,必须正确配置 BASE_URL 环境变量,这直接影响到:
- RSS feed 中的音频文件链接
- 封面图片链接
- 所有静态资源的访问路径
正确配置示例:
# 本地测试时
BASE_URL=http://localhost:3000
# 部署到服务器时(请替换为实际的服务器IP或域名)
BASE_URL=http://192.168.55.222:3000
# 或者
BASE_URL=http://your-domain.com
注意事项:
- BASE_URL 必须包含协议前缀(http:// 或 https://)
- 如果使用了自定义端口,必须包含端口号
- 结尾不要添加斜杠 '/'
- 确保该地址可以从客户端(如播客APP)访问到
-
启动服务
方式一:Docker 命令直接运行
docker run -d \ -p 3000:3000 \ -v /path/to/audiobooks:/podcasts \ -e PORT=3000 \ -e BASE_URL=http://your-server-ip:3000 \ -e PUID=$(id -u) \ -e PGID=$(id -g) \ yaotutu/folder2podcast
方式二:使用 Docker Compose(推荐)
# docker-compose.yml version: '3.8' services: folder2podcast: image: yaotutu/folder2podcast ports: - "3000:3000" volumes: - ./audiobooks:/podcasts:ro # 以只读模式挂载 environment: - PORT=3000 - AUDIO_DIR=/podcasts - BASE_URL=http://your-server-ip:3000 - PUID=1000 # 替换为您的用户ID - PGID=1000 # 替换为您的用户组ID restart: unless-stopped healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/podcasts"] interval: 30s timeout: 10s retries: 3
权限说明:
- 在某些情况下,Docker 容器可能无法正常读写您的音频文件夹
- 这时您需要设置
PUID
和PGID
这两个环境变量 - 这两个值应该设置为您的音频文件夹所有者的用户ID和组ID
- 在 Mac/Linux 系统中,只需在终端运行
id -u
和id -g
即可获取这两个值 - 设置正确的值后,应用就能正常访问您的音频文件了
-
验证部署
- 访问
http://localhost:3000/podcasts
确认服务运行 - 检查播客列表是否正确显示
- 测试音频文件访问
- 访问
yaotutu/folder2podcast:main
- 开发版本,与 main 分支同步更新,包含最新特性yaotutu/folder2podcast:latest
- 稳定版本,经过测试后发布,建议生产环境使用
图示:在 Apple Podcasts 中的显示效果
要获取类似截图:
- 使用任意播客客户端(如 Apple Podcasts)订阅您的播客
- 等待内容同步完成
- 截取播客详情页面的屏幕截图
标准的目录结构组织方式:
assets/
├── web/ # Web 界面相关文件
├── image/ # 图片资源
audio/ # 播客音频文件
├── podcast1/
│ ├── episode1.mp3
│ └── cover.jpg
└── podcast2/
├── episode1.mp3
└── cover.jpg
环境变量 | 说明 | 默认值 | 示例 |
---|---|---|---|
AUDIO_DIR |
音频文件根目录路径 | ./audio |
/path/to/audiobooks |
PORT |
服务器监听端口 | 3000 |
8080 |
BASE_URL |
服务器基础URL | http://localhost:端口号 |
http://192.168.55.222:3000 |
TITLE_FORMAT |
剧集标题显示格式 | full |
clean 或 full |
PUID |
音频文件夹所有者ID | 1000 |
运行 id -u 获取 |
PGID |
音频文件夹用户组ID | 1000 |
运行 id -g 获取 |
{
"title": "播客标题",
"description": "播客描述",
"author": "作者名称",
"email": "[email protected]",
"language": "zh-cn",
"category": "Technology",
"explicit": false,
"websiteUrl": "https://example.com",
"titleFormat": "clean",
"episodeNumberStrategy": "first", // 剧集序号提取策略,可选值:prefix(默认), suffix, first, last, 或 { pattern: "正则表达式" }
"useMTime": false // 是否使用文件创建时间作为发布时间,默认为 false
}
📝 时间管理说明:
- 当
useMTime
为false
(默认值)时:
- 带序号的文件使用序号生成发布时间
- 不带序号的文件使用文件创建时间
- 当
useMTime
为true
时:
- 所有文件都使用文件的创建时间作为发布时间
- 忽略文件名中的序号信息
- 详细说明请参考详细使用指南
项目提供了一个友好的 Web 界面,方便用户:
- 查看所有可用的播客源
- 一键复制订阅地址
- 支持多个主流播客客户端的一键订阅
- Apple Podcasts
- Overcast
- Pocket Casts
- Castro
- Moon FM
- 更多客户端持续添加中...
- 智能文件名处理
- 自动序列化
- 别名路由
- 封面图片管理
- 多设备同步
详细说明请参考详细使用指南。
支持所有标准播客客户端:
- Apple Podcasts
- Pocket Casts
- Overcast
- Castro
- Google Podcasts
- AntennaPod
常见问题和解决方案请参考故障排查指南。
查看完整的更新历史请访问 CHANGELOG.md
- 播客托管服务:您可以将音频文件交给我们,我们提供专业的托管和订阅服务
- 付费技术支持:提供私有部署、环境配置等技术支持服务
如需以上服务,请通过微信联系