今天在网上搜无损音乐的时候,发现下载后名字都是乱码,后面想了一下一个一个改要疯掉。
就想到用程序,可是我不会编程啊。但是我转眼一想,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()