网易云音乐歌曲导出缓存为原始音乐文件。低调,低调。。。
最近买了个榭兰图耳机头,拿到手第一件事当然是煲机了。弄个旧手机做24小时煲机但是不想再装多一个网易云音乐,省得一号多登录会问题。对于软工男最先想到的肯定是在本地直接播放音乐了,正好自己 有淘宝88VIP联合会员,于是琢磨着怎么把网易云的试音碟下载下来,想着看看有没有人弄过类似的。搜一下,还真有。
所以首先要感谢这个哥们:
网易云音乐加密缓存破解(python代码)_网易云音乐 python下载mp3代码-CSDN博客
方案是基于缓存进行导出,这样只要把缓存清空后,播放一遍歌曲列表后音乐文件数据就都有了。
试了下脚本。3个问题:
1)导出的位置放到了我的文档
2)没有自动识别后缀,全部都保存为.mp3了
3)没有根据歌曲自动命名
前俩问题拉着AI敲打几轮很快就好了,唯独第3个由于cache里没有存相关信息,貌似不行。代码里有尝试读ID3 TAG,但是下载的文件里没有,所以下面代码只能解决前两项。如果谁解决了第三项方案麻烦给个留言,我来给你点赞:)
改进的python脚本(export.py):
# pip install mutagen# 网易云cache导出为音频import osfrom 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 += 1if __name__ == \'__main__\': os.makedirs(export_folder, exist_ok=True) cache_list = getAllCache() transToAudio(cache_list, export_folder)
把该脚本放到你的网易云音乐缓存目录,例如:
D:\\CloudMusic
然后python export.py运行后,缓存的文件都自动转换到脚本同级的export目录了。