音乐文件一键整理分类脚本(按照歌手-专辑进行分类)--基于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()