音乐文件一键整理分类脚本(按照歌手-专辑进行分类)--基于python

闲来无事,准备搭建一个个人音乐服务器,但是发现一个比较大的问题是,音乐文件下载下来是很乱的,没有进行分类,这样传到群晖NAS上不方便后续管理

网上搜了一圈,没一个好用的工具或者脚本,想了想还是自己写了一个

先用百度的AI生成了一个大概的雏形,然后自己进行了修改

目前只测试了mp3文件和flac文件,其他的不知道会不会有问题

脚本会遍历需要整理的目录,然后根据歌曲的艺术家(歌手),唱片集(专辑)信息进行分类整理,会在输出文件夹建立对应的目录结构,然后把文件移动过去,

这里注意一下,文件是移动过去的,不是复制,需要复制的话自己修改一下,因为移动速度会很快,对于未识别的文件,会放进未知歌手-未知专辑里面去

如果输出文件夹已经有这个文件会报文件已存在错误,不过不用理会

具体不明白的可以去看B站对应视频链接如下:

【音乐文件一键整理分类脚本--按照歌手-专辑结构-哔哩哔哩】 https://b23.tv/hR4h4PQ

同时做了一个打包好的exe文件,可以直接运行,但是杀毒软件会报毒,记得添加信任

百度云链接:

 链接:https://pan.baidu.com/s/1LRBhFKdUk-W7hB1pB6o0qw?pwd=2gi6

提取码:2gi6

 1 import os
 2 import shutil
 3 from mutagen import File
 4 from pathlib import Path
 5 import re
 6 from multiprocessing import Event
 7 
 8 def classify_music(music_dir, output_dir):
 9     # 创建输出目录
10     Path(output_dir).mkdir(parents=True, exist_ok=True)
11     
12     # 遍历音乐目录
13     for subdir, _, files in os.walk(music_dir):
14         for filename in os.listdir(subdir):
15             filepath = os.path.join(subdir, filename)
16             #print(filepath)
17             # 检查是否为音乐文件
18             if os.path.isfile(filepath) and File(filepath):
19                 music_file = File(filepath)
20                 
21                 # 获取音乐信息
22                 artist = music_file.get('TPE1', ['未知歌手'])[0]
23                 album = music_file.get('TALB', ['未知专辑'])[0]
24                 if artist == "未知歌手" and album == "未知专辑":    #有些歌曲会识别出错,换另一个标识符
25                     artist = music_file.get('artist', ['未知歌手'])[0]
26                     album = music_file.get('album', ['未知专辑'])[0]
27                     #如果希望未知的不处理打开下面两句
28                     #if artist == "未知歌手" and album == "未知专辑":#换了还没找到则不处理
29                     #    continue
30                 #去除非法字符
31                 illegal_chars_pattern = re.compile(r'[^\w_ -]')  # 定义非法字符的正则表达式
32                 safe_artist = illegal_chars_pattern.sub('', artist)  # 去除非法字符
33                 safe_album = illegal_chars_pattern.sub('', album)  # 去除非法字符
34                 print(safe_artist,safe_album)
35 
36                 # 创建艺术家和标题的子目录
37                 artist_dir = os.path.join(output_dir, safe_artist)
38                 album_dir = os.path.join(artist_dir, safe_album)
39                 
40                 Path(album_dir).mkdir(parents=True, exist_ok=True)
41                 
42                 # 移动文件到相应子目录
43                 try:
44                     shutil.move(filepath, album_dir)
45                 except (FileNotFoundError, shutil.Error) as e:
46                     print(f"出现一个错误: {e}")
47                 except Exception as e:
48                     print(f"意外错误: {e}")
49                 
50     print("已完成")
51     
52 # 使用示例
53 if __name__ == "__main__":
54     print("音乐文件一键分类整理脚本\n\
55     说明:脚本会根据歌曲的艺术家(歌手),唱片集(专辑)自动进行创建目录,然后进行文件移动\n\
56           未知的歌手和专辑文件会放在未知目录,若文件已存在则会报文件已存在错误,不用理会\n\
57     使用方法:\n\
58     1.先输入需要整理的音乐文件路径,建议使用绝对路径,然后按回车,例:E:\音乐\n\
59     2.然后输入文件输出目录,输出目录不能与输入目录相同,输入完毕按回车,例:E:\音乐整理输出\n\
60     作者:liuzhiying 日期:20240616 \n\
61     目前只测试了MP3和flac文件,若遇到问题可留言")
62     while True:
63         path1 = input("请输入需要整理的目录路径:")
64         path2 = input("请输入输出文件的目录路径:")
65         
66         if path1 == path2:
67             print("输入目录与输出目录相同,请重试")
68             continue
69         else:
70             break
71             
72     music_dir = path1  # 音乐文件所在目录
73     output_dir = path2  # 输出目录
74     print("开始整理,请等待\"已完成\"出现再关闭程序")
75     classify_music(music_dir, output_dir)
76     
77     event = Event()
78     event.wait()

 

posted @ 2024-06-16 20:44  -繁尘-  阅读(233)  评论(0编辑  收藏  举报