今天在网上搜无损音乐的时候,发现下载后名字都是乱码,后面想了一下一个一个改要疯掉。
就想到用程序,可是我不会编程啊。但是我转眼一想,AI会呀,哈哈。
直接给需求:
1、选择一个文件夹,将对文件夹内所有的音乐文件进行处理。
2、获取文件夹内所有歌曲的tag信息。
3、用获取到的tag信息使用Title、Artist信息对该文件进行重命名。格式为Title-Artist,
4、将以上的功能整合到一个UI界面
不得不说AI很强大啊。
支持格式:mp3、m4a、flac
虽然有bug但是还是实现了我的需求。
大佬勿喷有需要的自取。有问题的不要问我哈,我也不知道,你们直接问AI
顺便让AI教我打包了exe文件。不知道你们能不能运行。
https://wwlk.lanzoum.com/i4MZx0u39g4d
密码:52pj
- import os
- import tkinter as tk
- import tkinter.filedialog as filedialog
- import taglib
-
- class MusicTagRenamer:
- def __init__(self, master):
- self.master = master
- self.master.title("音频文件获取标签信息批量重命名")
- self.master.geometry("500x400")
-
- # 选择目标目录的按钮和标签
- self.select_dir_button = tk.Button(self.master, text="选择文件夹",
- command=self.choose_directory)
- self.select_dir_button.pack(pady=10)
- self.selected_dir_label = tk.Label(self.master, text="")
- self.selected_dir_label.pack()
-
- # 显示获取到的标签信息的列表框
- self.tag_listbox = tk.Listbox(self.master, width=60)
- self.tag_listbox.pack(pady=10)
-
- # 命名格式的下拉列表
- self.name_format = tk.StringVar()
- self.name_format.set("格式")
- self.format_dropdown = tk.OptionMenu(
- self.master, self.name_format, "Title - Artist"
- )
- self.format_dropdown.pack()
-
- # 重命名文件的按钮
- self.rename_button = tk.Button(self.master, text="重命名",
- command=self.rename_files)
- self.rename_button.pack(pady=10)
-
- def choose_directory(self):
- """
- 选择目标文件夹
- """
- dir_path = filedialog.askdirectory(title="选择音乐文件所在的文件夹")
- if dir_path:
- self.target_dir = dir_path
- self.selected_dir_label.config(text=self.target_dir)
-
- # 获取标签信息并显示在列表框中
- self.tag_dict = {}
- self.tag_listbox.delete(0, tk.END)
-
- music_files = [f for f in os.listdir(self.target_dir) if f.endswith(".mp3") or f.endswith(".m4a") or f.endswith(".flac")]
- for file in music_files:
- file_path = os.path.join(self.target_dir, file)
- music = taglib.File(file_path)
- current_title = music.tags.get("TITLE", ["未知标题"])[0]
- current_artist = music.tags.get("ARTIST", ["未知艺术家"])[0]
- current_album = music.tags.get("ALBUM", ["未知专辑"])[0]
- self.tag_dict[file] = {"Title": current_title, "Artist": current_artist, "Album": current_album}
-
- title_str = f"Title: {current_title}, Artist: {current_artist}, Album: {current_album}"
- self.tag_listbox.insert(tk.END, f"{file}: {title_str}")
- music.close()
-
- def rename_files(self):
- """
- 对文件进行重命名
- """
- name_format = self.name_format.get()
- for file, tags in self.tag_dict.items():
- if name_format.startswith('《') and name_format.endswith('》-Artist'):
- new_file_name = name_format.replace("《Title》", tags["Title"]).replace("-Artist", f"-{tags['Artist']}")
- elif name_format == "Title - Artist":
- new_file_name = f"{tags['Title']} - {tags['Artist']}"
- else:
- new_file_name = name_format
-
- _, ext = os.path.splitext(file)
- new_file_path = os.path.join(self.target_dir, f"{new_file_name}{ext}")
- os.rename(os.path.join(self.target_dir, file), new_file_path)
-
- # 更新标签信息字典
- self.tag_dict[new_file_name + ext] = tags
- del self.tag_dict[file]
-
- # 更新列表中的标签信息
- idx = self.tag_listbox.get(0, tk.END).index(f"{file}: Title: {tags['Title']}, Artist: {tags['Artist']}, Album: {tags['Album']}")
- new_title_str = f"Title: {tags['Title']}, Artist: {tags['Artist']}, Album: {tags['Album']}"
- self.tag_listbox.delete(idx)
- self.tag_listbox.insert(idx, f"{new_file_name + ext}: {new_title_str}")
-
- def run(self):
- """
- 运行程序
- """
- self.master.mainloop()
-
- if __name__ == '__main__':
- root = tk.Tk()
- app = MusicTagRenamer(root)
- app.run()