收起左侧

Gemini做了个根据文件夹生成歌单的Python脚本

0
回复
26
查看
[ 复制链接 ]

0

主题

1

回帖

0

牛值

江湖小虾

2026-2-14 17:20:57 显示全部楼层 阅读模式

之前坛子有朋友用GPT写了一个,用了一下有点不适合自己,自己用CD2挂的天翼云盘加Navidrome管理音乐库的,自己的音乐库有50000首歌曲,所以自己用Gemini重新写了个脚本,大家根据自己实际情况改一下就行

1.准备工作
新建本地歌单目录:在你的本地硬盘(非云盘挂载点)创建一个文件夹,例如:/vol1/1000/Music/Playlists。

映射给 Navidrome:

在飞牛的 Docker Navidrome yml设置中,将这个本地路径映射到容器内部的 /playlists :

添加环境变量:ND_PLAYLISTSPATH=/playlists 注意这儿设置了要重新构建一下!

2 .在飞牛的任意目录(如 /vol1/1000)下新建文件 playlists.py ,或者在电脑上新建文本文件改扩展名.txt为.py,注意这儿要另存为编码是UTF-8格式的,然后上传至 /vol1/1000 内容见3

3.以下内容全部Copy:

import os

--- 配置区域 ---

SOURCE_DIR = "/vol1/1000/我的音乐" # 你的音乐文件夹
PLAYLIST_SAVE_DIR = "/vol1/1000/Music/Playlists" # 你的歌单存放文件夹

容器内映射的根路径

CONTAINER_MUSIC_ROOT = "我的音乐" # 你的音乐文件夹
EXTENSIONS = ('.mp3', '.flac', '.wav', '.m4a', '.ogg', '.dsf')

def generate_playlists():
if not os.path.exists(PLAYLIST_SAVE_DIR):
os.makedirs(PLAYLIST_SAVE_DIR)

# 使用 os.walk 递归遍历所有子目录
for root, dirs, files in os.walk(SOURCE_DIR):
    # 筛选出当前目录下的音乐文件
    songs = [f for f in files if f.lower().endswith(EXTENSIONS)]
  
    if songs:
        # 获取文件夹相对于 SOURCE_DIR 的相对路径
        # 例如:车载音乐/草原天籁
        rel_path = os.path.relpath(root, SOURCE_DIR)
  
        # 歌单名称处理:将路径中的 / 替换为 -,避免文件名冲突
        # 例如:车载音乐-草原天籁.m3u8
        playlist_name = rel_path.replace(os.sep, '-') + ".m3u8"
        if rel_path == ".": # 说明歌曲就在“我的音乐”根目录下
            playlist_name = "根目录音乐.m3u8"
  
        target_file = os.path.join(PLAYLIST_SAVE_DIR, playlist_name)
  
        with open(target_file, 'w', encoding='utf-8') as f:
            f.write("#EXTM3U\n")
            for song in sorted(songs):
                # 拼接容器内的绝对路径
                container_path = os.path.join(CONTAINER_MUSIC_ROOT, rel_path, song)
                f.write(f"{container_path}\n")
  
        print(f"成功生成歌单: {playlist_name} (包含 {len(songs)} 首歌)")

if name == "main":
if os.path.exists(SOURCE_DIR):
generate_playlists()
print("\n递归扫描完成!请去 Navidrome 执行 Quick Scan。")
else:
print(f"错误: 找不到目录 {SOURCE_DIR}")

4.SSH终端以root用户执行执行: sudo python3 /vol1/1000/playlists.py 会看到扫描各个目录(无论文件夹嵌套多深,脚本都会自动计算出来)

5.Navidrome界面快速扫描,完!! 感谢观看食用

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则