4.0 KiB
Executable File
方案:yt-dlp 批量下载喜马拉雅 RSS 播客脚本(飞牛fnOS宿主机直接运行)
方案:yt-dlp 批量下载喜马拉雅 RSS 播客脚本(飞牛 fnOS 宿主机直接运行)
特性:
读取喜马拉雅 RSS,自动抓取所有音频、自动建立专辑文件夹
输出 m4a,自动修复 mp4 trailer 索引,不会出现 ABS 那个
Invalid seek错误自动写入标题 / 专辑 / 艺术家等元数据,Audiobookshelf 扫描直接识别
跳过已下载文件,支持断点续下
宿主机运行,音频直接输出到 ABS 的 podcasts 目录,无需走 ABS 内置 ffmpeg 下载
一、先在飞牛宿主机安装依赖(SSH 登录飞牛执行)
# 安装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 对应的宿主机目录
#!/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()
使用
-
保存文件,
chmod +x download_ximalaya_rss.py -
修改 RSS_URL 和 OUTPUT_DIR
-
运行:
python3 download_ximalaya_rss.py
三、如果你不想用 Python,直接一行 shell 命令(推荐简单测试)
yt-dlp --continue --embed-metadata --audio-format m4a -o "/mnt/your_abs_podcasts/%(album)s/%(title)s.%(ext)s" "这里粘贴你的RSS链接"
四、Audiobookshelf 后续操作
-
下载完成后,进入 ABS 网页后台 → 对应播客 → 重新扫描媒体库
-
ABS 会读取本地 m4a 文件,自动识别剧集、封面、简介元数据
-
关闭 ABS 播客自动下载,后续新增节目,再次运行脚本增量下载即可
五、可选增强:定时自动检查 RSS 更新(新增节目自动下载)
用 crontab 定时,例如每天凌晨 2 点自动执行脚本,检查有没有新节目:
# 编辑定时任务
crontab -e
# 添加一行
0 2 * * * /usr/bin/python3 /root/download_ximalaya_rss.py >> /root/podcast_download.log 2>&1
六、重要注意事项(对应你之前踩坑点)
-
脚本在宿主机下载,写入宿主机本地存储,不会经过 docker 容器内的 pipe+ffmpeg m4a seek 问题,和群晖 ABS 下载行为一致。
-
如果
OUTPUT_DIR指向 SMB/NFS 网络盘:yt-dlp 的下载写入逻辑和 ABS 内置 ffmpeg 不一样,大概率不会触发 Invalid seek;但最稳方案:优先存飞牛本地硬盘。 -
喜马拉雅 RSS 链接有有效期,长期使用如果下载失败,重新去插件里拿最新 RSS 地址替换。
七、备选:如果想要输出 mp3(彻底规避 m4a 容器问题)
修改 yt-dlp 参数:
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 生成)