Files
StudyDiary-20261009/02-学习笔记/方案2:批量脚本下载喜马拉雅专辑封面.md
CrazyJasonwell e97be9ac8c commit all
2026-10-09 22:06:40 +08:00

3.5 KiB
Executable File
Raw Blame History

方案2:批量脚本下载喜马拉雅专辑封面,自动生成 cover.jpg

适用场景:批量处理喜马拉雅英语专辑,ABS扫描文件夹自动读取cover.jpg,彻底避0开ABS插件Invalid content type的bug。 脚本:Python,单文件,支持批量,自动保存为cover.jpg,配合你的ABS目录结构。 前置:安装Python,需要requests库。

脚本 xm_cover_download.py

import requests
import os

# ========== 配置区,修改这里 ==========
# ABS有声书根目录,你的专辑文件夹都放在这个路径
ROOT_DIR = "/mnt/abs_audio"
# 专辑列表:【专辑文件夹名称】:【喜马拉雅封面原图url】
album_list = {
    "新概念英语第一册": "http://imagev2.xmcdn.com/storages/531f-audiofreehighqps/0F/0B/CMCoOSYEhMILAAGNCACxBHag",
    # 在这里继续增加更多专辑,格式复制上面一行
    # "专辑文件夹名": "封面url",
}
# ======================================

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

def download_cover(folder_name, img_url):
    folder_path = os.path.join(ROOT_DIR, folder_name)
    os.makedirs(folder_path, exist_ok=True)
    cover_path = os.path.join(folder_path, "cover.jpg")
    try:
        resp = requests.get(img_url, headers=headers, timeout=15)
        resp.raise_for_status()
        with open(cover_path, "wb") as f:
            f.write(resp.content)
        print(f"✅ {folder_name} 封面下载成功 -> {cover_path}")
    except Exception as e:
        print(f"❌ {folder_name} 下载失败: {str(e)}")

if __name__ == "__main__":
    for album_name, url in album_list.items():
        download_cover(album_name, url)
    print("\n全部任务执行完毕,请去ABS资料库扫描!")

使用步骤

  1. 安装依赖
pip install requests
  1. 修改脚本配置区
  • ROOT_DIR:改成你宿主机存放ABS有声书的目录

  • album_list:添加专辑文件夹名,以及对应的喜马拉雅封面链接

    ⚠️ 文件夹名称必须和ABS里面的专辑目录完全一致,脚本会在这个目录生成cover.jpg

  1. 运行脚本
python xm_cover_download.py
  1. 回到 Audiobookshelf 网页端 → 资料库 → 扫描库 ABS会自动读取每个专辑文件夹内的cover.jpg作为封面,不再调用插件远程下载图片,不会报那个Content-Type错误。

进阶:如果想自动从喜马拉雅专辑页面提取封面链接(可选)

如果你不想手动复制封面url,可以加爬虫解析专辑页面提取图片地址,需要的话我给你扩展版本。

ABS重要注意事项

  1. 权限:docker的ABS容器,cover.jpg文件权限建议 chmod 644 cover.jpg,chown 你的uid:gid cover.jpg,否则ABS读不到本地封面
# 示例,替换为你的专辑目录
chown -R 1000:1000 /mnt/abs_audio
  1. 生效逻辑:本地cover.jpg优先级高于元数据插件远程封面,扫描后直接加载,不会再去拉取xmcdn图片。

  2. 如果你是用Alist挂载网盘存放音频:

    部分网盘不支持直接上传文件到挂载目录,这种情况脚本需要运行在Alist宿主机,保存到本地再上传网盘对应专辑文件夹。

批量操作小技巧

  • 一次性添加几十条专辑,直接在album_list字典追加多行即可
  • 可以先浏览器打开封面链接确认图片正常,再填入脚本,减少失败

要不要我再给你写一个**一键批量修改权限