Home
Softono

Folder2podcast

Open source TypeScript
173
Stars
16
Forks
1
Issues
4
Watchers
7 months
Last Commit

 About Folder2podcast

把任何音频变成私人播客 - 上传本地音频或粘贴视频链接,自动生成 RSS,在任意播客客户端订阅收听。适合离线听书、本地音乐管理、视频课程转音频。

Platforms

Web Self-hosted

Languages

TypeScript

Links

Need Help Installing Folder2podcast?

We provide expert installation service for this software. Our team will install, configure, and secure Folder2podcast on your server. plans start at just $30.

Folder2podcast

View on GitHub

SVG Banners

🎙️ Folder2Podcast RSS

一键将本地音频文件夹转换为私人播客 RSS 订阅源,零侵入、 无副作用

English Version

目录

项目背景

播客 RSS 是一个强大的音频分发标准,它不仅仅是一个简单的音频列表,更提供了:

  • 🔖 完整的播放进度记录
  • 🎯 精确的断点续播功能
  • 🔄 跨设备的收听历史同步
  • 📱 多平台收听支持
  • 🎨 丰富的媒体信息展示

Folder2Podcast RSS 让您可以轻松地把本地音频文件夹转换为私人播客 RSS 源,享受专业播客客户端的所有高级特性:

  • 🎧 使用您最喜欢的播客应用收听(如 Apple Podcasts、Pocket Casts)
  • 📱 在任何设备上继续上次的收听进度
  • 🔄 自动同步多设备间的收听历史
  • 📚 系统化管理您的有声内容库
  • 🎯 智能记住每个音频的播放位置

只需一个命令部署,让您的本地音频秒变私人播客订阅源。

✨ 核心功能

  • 🔒 零侵入设计 - 以只读方式访问音频文件,不修改原始文件夹结构和内容
  • 🎯 标准 RSS 实现 - 完整支持播客 RSS 2.0 规范和 iTunes 专有标签
  • 📱 完美客户端兼容 - 适配所有主流播客客户端
  • 🔄 智能序列化 - 自动分析文件名构建剧集顺序,生成发布时间
  • 🎨 个性化配置 - 支持播客元数据自定义(标题、作者、封面等)
  • 🚀 容器化部署 - 提供 Docker 一键部署方案

🚀 快速开始

Docker 一键部署(推荐)

  1. 准备工作
    • 安装 Docker
    • 准备音频文件目录(按播客内容分文件夹)
    • 规范文件命名(如:01-第一章.mp3、第02集.mp3)

⚠️ 重要:BASE_URL 配置说明

在部署到服务器时,必须正确配置 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)访问到
  1. 启动服务

    方式一: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 容器可能无法正常读写您的音频文件夹
    • 这时您需要设置 PUIDPGID 这两个环境变量
    • 这两个值应该设置为您的音频文件夹所有者的用户ID和组ID
    • 在 Mac/Linux 系统中,只需在终端运行 id -uid -g 即可获取这两个值
    • 设置正确的值后,应用就能正常访问您的音频文件了
  2. 验证部署

    • 访问 http://localhost:3000/podcasts 确认服务运行
    • 检查播客列表是否正确显示
    • 测试音频文件访问

Docker 镜像说明

  • yaotutu/folder2podcast:main - 开发版本,与 main 分支同步更新,包含最新特性
  • yaotutu/folder2podcast:latest - 稳定版本,经过测试后发布,建议生产环境使用

📱 效果展示

播客客户端显示效果

播客客户端显示效果

图示:在 Apple Podcasts 中的显示效果

要获取类似截图:

  1. 使用任意播客客户端(如 Apple Podcasts)订阅您的播客
  2. 等待内容同步完成
  3. 截取播客详情页面的屏幕截图

📦 目录结构规范

标准的目录结构组织方式:

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 cleanfull
PUID 音频文件夹所有者ID 1000 运行 id -u 获取
PGID 音频文件夹用户组ID 1000 运行 id -g 获取

podcast.json 配置

{
  "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
}

📝 时间管理说明

  • useMTimefalse(默认值)时:
    • 带序号的文件使用序号生成发布时间
    • 不带序号的文件使用文件创建时间
  • useMTimetrue 时:
    • 所有文件都使用文件的创建时间作为发布时间
    • 忽略文件名中的序号信息
  • 详细说明请参考详细使用指南

🎨 高级特性

📱 Web 界面

项目提供了一个友好的 Web 界面,方便用户:

  • 查看所有可用的播客源
  • 一键复制订阅地址
  • 支持多个主流播客客户端的一键订阅
    • Apple Podcasts
    • Overcast
    • Pocket Casts
    • Castro
    • Moon FM
    • 更多客户端持续添加中...

Web 界面预览

🎯 其他特性

  • 智能文件名处理
  • 自动序列化
  • 别名路由
  • 封面图片管理
  • 多设备同步

详细说明请参考详细使用指南

📱 客户端支持

支持所有标准播客客户端:

  • Apple Podcasts
  • Pocket Casts
  • Overcast
  • Castro
  • Google Podcasts
  • AntennaPod

故障排查

常见问题和解决方案请参考故障排查指南

📢通知

该项目已趋于稳定,目前未发现已知 Bug,您可以放心使用。如遇问题,欢迎提交 Issue,我会及时进行修复和更新。

📋 支持与反馈

更新日志

查看完整的更新历史请访问 CHANGELOG.md

代托管与技术支持

  • 播客托管服务:提供专业的托管和订阅服务
  • 付费技术支持:提供私有部署、环境配置等技术支持服务

如需以上服务,请通过微信联系

微信群
👆 欢迎扫码加好友提供技术支持!
赞赏码
👆 如果觉得项目对你有帮助,欢迎赞赏支持!

Folder2Podcast RSS - Local folders to RSS podcast feeds

Stargazers over time