网易云音乐歌曲导出缓存为原始音乐文件。低调,低调。。。

最近买了个榭兰图耳机头,拿到手第一件事当然是煲机了。弄个旧手机做24小时煲机但是不想再装多一个网易云音乐,省得一号多登录会问题。对于软工男最先想到的肯定是在本地直接播放音乐了,正好自己 有淘宝88VIP联合会员,于是琢磨着怎么把网易云的试音碟下载下来,想着看看有没有人弄过类似的。搜一下,还真有。

所以首先要感谢这个哥们:

网易云音乐加密缓存破解(python代码)_网易云音乐 python下载mp3代码-CSDN博客

方案是基于缓存进行导出,这样只要把缓存清空后,播放一遍歌曲列表后音乐文件数据就都有了。

试了下脚本。3个问题:

1)导出的位置放到了我的文档

2)没有自动识别后缀,全部都保存为.mp3了

3)没有根据歌曲自动命名

前俩问题拉着AI敲打几轮很快就好了,唯独第3个由于cache里没有存相关信息,貌似不行。代码里有尝试读ID3 TAG,但是下载的文件里没有,所以下面代码只能解决前两项。如果谁解决了第三项方案麻烦给个留言,我来给你点赞:)

改进的python脚本(export.py):

python 复制代码
# pip install mutagen
# 网易云cache导出为音频
import os
from mutagen import File

# 缓存文件存放目录
cache_folder = '.\\cache\\Cache'
export_folder = '.\\export'

def getAllCache():
    cache_list = []
    for root, _, fs in os.walk(cache_folder):
        for f in fs:
            if f.endswith('.uc'):
                fullname = os.path.join(root, f)
                cache_list.append(fullname)
    return cache_list


# 音频格式检测(基于 mutagen)
def detect_audio_format(filepath):
    audio = File(filepath)
    if audio and audio.mime:
        mime = audio.mime[0]
        ext_map = {
            "audio/mpeg": ".mp3",
            "audio/mp4": ".m4a",
            "audio/x-aac": ".aac",
            "audio/flac": ".flac",
            "audio/ogg": ".ogg",
            "audio/wav": ".wav",
        }
        return ext_map.get(mime, ".audio")
    return ".audio"


# 提取音频标签(标题、作者)
def get_audio_tags(filepath):
    audio = File(filepath)
    if not audio:
        return None, None

    title, artist = None, None

    if audio.tags:
        for key in audio.tags.keys():
            k = key.lower()
            if "title" in k and not title:
                val = audio.tags[key]
                title = str(val[0] if isinstance(val, list) else val)
            if ("artist" in k or "author" in k) and not artist:
                val = audio.tags[key]
                artist = str(val[0] if isinstance(val, list) else val)

    return title, artist


# 将uc文件转换成音频文件并保存
def transToAudio(cache_list, save_folder):
    nameid = 0
    for cache_file in cache_list:
        tmp_name = str(nameid) + '.tmp'
        tmp_path = os.path.join(save_folder, tmp_name)

        # 解密写入临时文件
        with open(cache_file, 'rb') as f:
            with open(tmp_path, 'wb') as s:
                byte = f.read(1)
                while byte:
                    b = int.from_bytes(byte, byteorder='little', signed=False)
                    b = b ^ 163  # 异或解密
                    s.write(bytes([b]))
                    byte = f.read(1)

        # 检测格式
        ext = detect_audio_format(tmp_path)

        # 提取标签
        title, artist = get_audio_tags(tmp_path)

        # 生成最终文件名
        if title or artist:
            safe_title = title if title else f"untitled{nameid}"
            safe_artist = artist if artist else "unknown"
            final_name = f"{safe_title}-{safe_artist}{ext}"
        else:
            final_name = f"{nameid}{ext}"

        # 清理非法字符
        final_name = "".join(c if c.isalnum() or c in " -_." else "_" for c in final_name)

        final_path = os.path.join(save_folder, final_name)
        os.rename(tmp_path, final_path)

        print(f"{cache_file} -> {final_path}")
        nameid += 1


if __name__ == '__main__':
    os.makedirs(export_folder, exist_ok=True)
    cache_list = getAllCache()
    transToAudio(cache_list, export_folder)

把该脚本放到你的网易云音乐缓存目录,例如:

D:\CloudMusic

然后python export.py运行后,缓存的文件都自动转换到脚本同级的export目录了。