# 方案:yt\-dlp 批量下载喜马拉雅 RSS 播客脚本(飞牛fnOS宿主机直接运行) # 方案:yt\-dlp 批量下载喜马拉雅 RSS 播客脚本(飞牛 fnOS 宿主机直接运行) > 特性: > > 1. 读取喜马拉雅 RSS,自动抓取所有音频、自动建立专辑文件夹 > > 2. 输出 m4a,自动修复 mp4 trailer 索引,不会出现 ABS 那个`Invalid seek`错误 > > 3. 自动写入标题 / 专辑 / 艺术家等元数据,Audiobookshelf 扫描直接识别 > > 4. 跳过已下载文件,支持断点续下 > > 5. 宿主机运行,音频直接输出到 ABS 的 podcasts 目录,无需走 ABS 内置 ffmpeg 下载 > > ## 一、先在飞牛宿主机安装依赖(SSH 登录飞牛执行) ```bash # 安装yt-dlp + ffmpeg pip install yt-dlp # 如果没有pip curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp chmod a+x /usr/local/bin # 安装ffmpeg(fnOS包管理器) apk add ffmpeg ``` ## 二、批量下载脚本 `download_ximalaya_rss.py` > 修改两处: > > - `RSS_URL`:你的喜马拉雅 RSS 订阅地址 > > - `OUTPUT_DIR`:**Audiobookshelf 容器 podcasts 对应的宿主机目录** > > ```python #!/usr/bin/env python3 import subprocess import os # ========== 配置区,请修改 ========== RSS_URL = "替换成你的喜马拉雅播客RSS链接" OUTPUT_DIR = "/mnt/your_abs_podcasts" # ABS podcasts宿主机路径 # ==================================== def main(): os.makedirs(OUTPUT_DIR, exist_ok=True) cmd = [ "yt-dlp", "--no-warnings", "--ignore-errors", "--continue", "--embed-metadata", "--audio-format", "m4a", "--format", "bestaudio", "-o", os.path.join(OUTPUT_DIR, "%(album)s/%(title)s.%(ext)s"), RSS_URL ] print("开始执行下载命令:") print(" ".join(cmd)) subprocess.run(cmd) if __name__ == "__main__": main() ``` ### 使用 1. 保存文件,`chmod +x download_ximalaya_rss.py` 2. 修改 RSS\_URL 和 OUTPUT\_DIR 3. 运行:`python3 download_ximalaya_rss.py` ## 三、如果你不想用 Python,直接一行 shell 命令(推荐简单测试) ```bash yt-dlp --continue --embed-metadata --audio-format m4a -o "/mnt/your_abs_podcasts/%(album)s/%(title)s.%(ext)s" "这里粘贴你的RSS链接" ``` ## 四、Audiobookshelf 后续操作 1. 下载完成后,进入 ABS 网页后台 → 对应播客 → **重新扫描媒体库** 2. ABS 会读取本地 m4a 文件,自动识别剧集、封面、简介元数据 3. **关闭 ABS 播客自动下载**,后续新增节目,再次运行脚本增量下载即可 ## 五、可选增强:定时自动检查 RSS 更新(新增节目自动下载) 用 crontab 定时,例如每天凌晨 2 点自动执行脚本,检查有没有新节目: ```bash # 编辑定时任务 crontab -e # 添加一行 0 2 * * * /usr/bin/python3 /root/download_ximalaya_rss.py >> /root/podcast_download.log 2>&1 ``` ## 六、重要注意事项(对应你之前踩坑点) 1. 脚本在**宿主机**下载,写入宿主机本地存储,**不会经过 docker 容器内的 pipe\+ffmpeg m4a seek 问题**,和群晖 ABS 下载行为一致。 2. 如果`OUTPUT_DIR`指向 SMB/NFS 网络盘:yt\-dlp 的下载写入逻辑和 ABS 内置 ffmpeg 不一样,**大概率不会触发 Invalid seek**;但最稳方案:优先存飞牛本地硬盘。 3. 喜马拉雅 RSS 链接有有效期,长期使用如果下载失败,重新去插件里拿最新 RSS 地址替换。 ## 七、备选:如果想要输出 mp3(彻底规避 m4a 容器问题) 修改 yt\-dlp 参数: ```bash yt-dlp --continue --embed-metadata --audio-format mp3 -o "/mnt/your_abs_podcasts/%(album)s/%(title)s.%(ext)s" "RSS链接" ``` --- 需要我再加一个**自动下载封面图片并和音频放在同目录**的版本吗?这样 Audiobookshelf 扫描的时候自动读取封面,不用手动处理喜马拉雅封面`Invalid content type`报错。 > (注:部分内容可能由 AI 生成)