[开源项目/自建服务]🎙️一键将本地音频文件夹转换为私人播客 RSS 订阅源

项目名称

:studio_microphone: Folder2Podcast RSS

文件夹转播客

推荐类型

【开发者自荐】

简介

一键将本地音频文件夹转换为私人播客 RSS 订阅源

应用部署方式

  • docker
  • node

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

  • :bookmark: 完整的播放进度记录
  • :dart: 精确的断点续播功能
  • :arrows_counterclockwise: 跨设备的收听历史同步
  • :iphone: 多平台收听支持
  • :art: 丰富的媒体信息展示

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

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

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

官方地址

folder2podcast

更新日志

v0.1.7

:warning: 重要提醒
破坏性更新:由于静态资源路径变更,订阅地址发生了改变
必要操作:需要重新订阅播客才能继续正常收听
影响范围:影响所有现有的播客订阅

新功能

:sparkles: 添加了播客订阅管理的 Web 界面
:eyes: 新增文件监控功能,支持动态更新播客源
:arrows_counterclockwise: 添加了 Changelog 生成脚本

Docker 相关优化

:lock: 实现了零侵入式的权限管理设计
:gear: 优化了 Dockerfile 配置和运行时环境
:apple: 增加了针对 macOS 的 Docker 运行脚本
:muscle: 增强了用户权限和运行时配置的灵活性
:package: 新增 Docker 相关的 npm 脚本

资源优化

:building_construction: 重构了静态资源的目录结构
:arrows_counterclockwise: 更新了资源文件的访问路径
:dart: 优化了 Apple Podcasts URL 的处理方式

文档更新

:books: 更新了 README,添加了 Web 界面使用说明
:open_book: 补充了高级特性的使用文档
:whale: 完善了 Docker 镜像相关文档

此版本主要增加了 Web 界面管理功能,优化了 Docker 运行环境,特别是改进了权限管理机制,使其更加灵活和安全。同时重构了静态资源的组织方式,提升了系统的可维护性。

2 Likes

作者大大你好!想必你也是podcast的重度用户吧,我说一个需求,你看看是否值得开发。

我很多时候看到一些网页或者微信公众号推文,有兴趣看,但都不至于要马上看,所以想有没有一个工具,把网址粘贴进去,即可把网页中的文字转化为一集podcast节目多好。

你这个需求可太合我心意了, 我最近在爆肝的一个项目就是解决这个问题的。 可以关注下我的另一个项目 aipod,可以在我github中找到。
Aipod,就是 ai podcast,将文章交给ai进行处理,转换成一个更加符合播客的形式,然后进行输出。

如果只是单纯的把rss内容转成音频,是很简单的,但是这样不优雅,因为一个rss文章,是有链接图片 标题 列表,等等,这些东西如何优雅的通过播客展示给用户,还是需要ai的帮助。

此时此刻,我就正在写这个项目,没想到,真的也有其他小伙伴有这个需求,好开心,哈哈,有动力了。

哇!(心心眼)

音频文件名一定要包含序号吗?是否能取消这个限制,按音频文件的时间戳进行排序?

如下是 iOS Overcast 播客客户端导出的音频文件名的例子,格式是 【播客名 - 节目名】,不管最后的名字中是否有数字,都没有被 Folder2Podcast 识别到。

硅谷101 - E143|亲历者讲述:神秘的长寿乌托邦与疯狂的生物极客运动.mp3
硅谷101 - S2E32|一夜跻身全球第三大艺术富豪,聊聊NFT背后的大玩家们.mp3
津津乐道 - 科技乱炖:基因检测,是玄学还是科学?.mp3

目前的文件排序规则是 要求 序号存在于 最开始或者最末尾.

如果没有特定的顺序的话,没有播客序号也是合理的

今天我会去修复该问题,方便的话 你去github 提一个issue. github交流起来更方便一些.

问题已修复, docker重新拉取最新的镜像就好了

感谢更新,现在没有序号的文件可以正常显示了。

顺便在 Github 提了 2 个 issue。

你是不是在找麦悠电台 麦悠电台 - RSS 太多看不过来?自动创建为对话式播客节目,可直接发布[iOS/Android] :joy:
配合AiRSS的稍后阅读功能,就能实现你说的这个,我自己就这样用的…
当然对于公众号,wewe rss 直接订阅更好。

一键导入的功能做好了,欢迎测试,
这次改动比较大,需要花一些时间做测试,
docker部署的话,直接拉去 main标签就对应着测试版.
后期测试好以后会合并到latest标签.

main 分支产生如下错误:

当前配置: { AUDIO_DIR: '/podcasts', PORT: 3000 }
正在初始化播客服务器...
{"level":50,"time":1738638451318,"pid":1,"hostname":"53069f942ade","msg":"Error processing podcast sources:"}
致命错误: EACCES: permission denied, open '/podcasts/Full of Mind/feed.xml'

对应文件的权限为:

[Full of Mind] # ls -l feed.xml
-rw-r--r-- 1 admin   administrators     4106 2025-02-02 22:06 feed.xml

切换为 latest 分支后正常。

另外,目前是在每个节目文件夹下生成 feed.xml 文件,副作用是:

  1. 所有节目文件夹的时间戳都会被更新。之前我可以对节目文件夹按时间排序以大概了解节目更新状况,现在就不行了。
  2. 不能以只读方式挂载播客文件夹,如果软件出现 bug ,可能会对用户数据产生威胁。

或许增加一个 volume 以集中存放配置文件及生成的 feeds?

Github反馈一下,我这边有时间会去修复。

目前的main标签的代码重构了整个 静态资源的代码,音频文件夹这一块确实有做调整。

我这边本地测试了好几遍,我这边本地通过docker,以及omv的docker,无法复现你说的问题,你先给一个777的权限,看看能不能正常用,确定下问题根源。

副作用的这一块,我觉得是一个不错的想法。 保持只读状态,不影响原文件。 后期我会跟进,这个算是一个feature。

针对权限问题,问题进行了修复
新增了PUID和PGID两个环境变量.
期待你的测试反馈. 感谢.

新的镜像已发布

feed.xml不再写入音频文件夹,而是单独存放,更加纯粹,不会对宿主机产生任何副作用

  • :lock: 零侵入设计 - 以只读方式访问音频文件,不修改原始文件夹结构和内容

最近更新了好几个版本,
增加了web页面
优化逻辑,只读访问音频文件,无副作用

大家有shownotes的需求吗?

正需要这个功能!

测试版更新啦.

文件名序号策略改进

  • 新增多种序号提取策略:
    • 前缀匹配:从文件名开头提取数字
    • 后缀匹配:从文件名结尾提取数字
    • 首个数字:提取文件名中第一个出现的数字
    • 最后数字:提取文件名中最后一个出现的数字
    • 自定义正则:支持通过正则表达式自定义提取规则
  • 优化序号排序功能:
    • 支持按数字大小排序
    • 支持按文件名自然排序
    • 添加自定义排序规则配置
  • 添加详细的策略配置文档,包含:
    • 各策略的使用场景说明
    • 配置参数详解
    • 常见问题解答