使用mutagen补全音频信息

下载的音乐,音频文件信息歌手和歌名都是乱码或其他信息的

在foobar2000播放器里看着不爽,决定批量处理下音频文件

mutagen可以读取文件音频信息,也能修改信息,使用非常方便

库介绍

介绍

Mutagen是一个用于处理音频元数据的Python模块。它支持ASF、FLAC、MP4、Monkey's Audio、MP3、Musepack、Ogg Opus、Ogg FLAC、Ogg Speex、Ogg Theora、Ogg Vorbis、True Audio、WavPack、OptimFROG和AIFF音频文件。它支持所有版本的ID3v2,并解析所有标准的ID3v2.4帧。它可以读取Xing头部以准确计算MP3的比特率和长度。无论音频格式如何,都可以编辑ID3和APEv2标签。它还可以在单个数据包/页面级别上操作Ogg流。

入门文档

安装

pip install mutagen

遍历所有文件

import os

def get_all_files(path):
    all_files: Dict[str, str] = {}
    # 首先遍历当前目录所有文件及文件夹
    file_list = os.listdir(path)
    # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
    for file in file_list:
        # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录
        cur_path = os.path.join(path, file)
        # 判断是否是文件夹
        if os.path.isdir(cur_path):
            subs = get_all_file(cur_path)
            all_files.update(subs)
        else:
            all_files[file] = cur_path

    return all_files

音频文件处理 

import os
import re
import mutagen
from mutagen.flac import FLAC
from mutagen.mp3 import EasyMP3
from mutagen.wave import WAVE


def rename_music(musicdir: str):
    # 文件名的处理,根据大家自己的实际情况调整
    # 音乐处理  歌名-歌手_歌手-数字.后缀  处理为 歌手_歌手-歌名.后缀
    allfile = get_all_files(musicdir)
    for file in allfile.values():
        # 分离路径和文件名
        path, fname = os.path.split(file)
        # 使用正则表达式,用‘-’ ‘.’ 将文件名分割为4段
        reObj = re.compile('[-.]+') 
        data = reObj.split(fname)
        if len(data) < 4:
            continue
        nfile = os.path.join(path, f"{data[1]}-{data[0]}.{data[-1]}")
        if os.path.exists(nfile):
            os.remove(nfile) # 删除重复歌曲
            continue
        print(f'{file} ==> {nfile}')
        os.rename(file, nfile)


def change_music_info(musicdir: str):
    '''
    歌曲文件名:歌手-歌曲名称.后缀
    音频文件信息歌手和歌名乱码或其他信息替换为文件名中歌名、歌手
    补全文件中歌曲音乐信息(歌名、歌手)
    :param musicdir:
    :return:
    '''
    allfile = get_all_files(musicdir)
    infostr = ('title', 'album', 'artist')
    for file in allfile.values():
        # 分离路径和文件名
        path, fname = os.path.split(file)
        # 使用正则表达式,用‘-’ ‘.’ 将文件名分割为3段,获取歌手和歌名
        reObj = re.compile('[-.]+')
        data = reObj.split(fname)
        # 根据后缀创建对应的audio对象
        if file[-4:] == 'flac':
            audio = FLAC(file)
        elif file[-3:] == 'mp3':
            audio = EasyMP3(file)
        else:
            audio = None
        if audio != None:
            artist = data[0]
            title = data[1]
            # 歌名异常处理,同时处理歌手
            if audio['title'] != title:
                audio["title"] = data[1]
                audio["album"] = data[1]
                audio['artist'] = data[0]
                audio.save()
            print(audio.values())

        else:
            pass


def start_working():
    # 歌曲重命名
    rename_music(r'E:\Music\xxxx\111')
    # 补全歌曲信息
    change_music_info(r'E:\Music\xxxx\111')


if __name__ == "__main__":
    start_working()

补充wav格式处理

                try:
                    audio.add_tags()
                except mutagen.id3.error:
                    pass
                audio['TALB'] = TALB(encoding=3, text=data[1])
                audio['TPE1'] = TPE1(encoding=3, text=data[0])
                audio['TIT2'] = TIT2(encodings=3, text=data[1])
                audio.save()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值