您当前的位置:首页 > 计算机 > 编程开发 > Python

用AI写了一个获取音乐tag信息批量重命名的工具

时间:05-12来源:作者:点击数:

今天在网上搜无损音乐的时候,发现下载后名字都是乱码,后面想了一下一个一个改要疯掉。

就想到用程序,可是我不会编程啊。但是我转眼一想,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()

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门