简述

网易云 的ncm格式不能 让其他  软件播放  所以  还是要转换一下比较好

# 依赖pycrypto库
import binascii
import struct
import base64
import json
import os,sys
from Crypto.Cipher import AES
#  此程序用于将网易云音乐的.ncm格式的音乐转换为  最初格式def dump(file_path):core_key = binascii.a2b_hex("687A4852416D736F356B496E62617857")meta_key = binascii.a2b_hex("2331346C6A6B5F215C5D2630553C2728")unpad = lambda s: s[0:-(s[-1] if type(s[-1]) == int else ord(s[-1]))]f = open(file_path, 'rb')header = f.read(8)assert binascii.b2a_hex(header) == b'4354454e4644414d'f.seek(2, 1)key_length = f.read(4)key_length = struct.unpack('<I', bytes(key_length))[0]key_data = f.read(key_length)key_data_array = bytearray(key_data)for i in range(0, len(key_data_array)): key_data_array[i] ^= 0x64key_data = bytes(key_data_array)cryptor = AES.new(core_key, AES.MODE_ECB)key_data = unpad(cryptor.decrypt(key_data))[17:]key_length = len(key_data)key_data = bytearray(key_data)key_box = bytearray(range(256))c = 0last_byte = 0key_offset = 0for i in range(256):swap = key_box[i]c = (swap + last_byte + key_data[key_offset]) & 0xffkey_offset += 1if key_offset >= key_length: key_offset = 0key_box[i] = key_box[c]key_box[c] = swaplast_byte = cmeta_length = f.read(4)meta_length = struct.unpack('<I', bytes(meta_length))[0]meta_data = f.read(meta_length)meta_data_array = bytearray(meta_data)for i in range(0, len(meta_data_array)): meta_data_array[i] ^= 0x63meta_data = bytes(meta_data_array)meta_data = base64.b64decode(meta_data[22:])cryptor = AES.new(meta_key, AES.MODE_ECB)meta_data = unpad(cryptor.decrypt(meta_data)).decode('utf-8')[6:]meta_data = json.loads(meta_data)crc32 = f.read(4)crc32 = struct.unpack('<I', bytes(crc32))[0]f.seek(5, 1)image_size = f.read(4)image_size = struct.unpack('<I', bytes(image_size))[0]image_data = f.read(image_size)file_name = meta_data['musicName'] + '.' + meta_data['format']m = open(os.path.join(os.path.split(file_path)[0], file_name), 'wb')chunk = bytearray()while True:chunk = bytearray(f.read(0x8000))chunk_length = len(chunk)if not chunk:breakfor i in range(1, chunk_length + 1):j = i & 0xff;chunk[i - 1] ^= key_box[(key_box[j] + key_box[(key_box[j] + j) & 0xff]) & 0xff]m.write(chunk)m.close()f.close()if __name__ == '__main__':file_path = r"E:\music" # 自己的路径# if len(sys.argv) > 1:#     for file_path in sys.argv[1:]:#   循环遍历所有的歌曲  只能进行一层文件夹下是歌曲try:list = os.listdir(file_path)for i in range(0, len(list)):path = os.path.join(file_path, list[i])if os.path.isfile(path):dump(path)except:passprint("Usage: python ncmdump.py \"File Name\"")

音乐   放在 music  包中

Python 解决 网易云.ncm格式 还原 无损音乐格式相关推荐

  1. ubuntu解决网易云无法打开

    最近首次入手ubuntu18 摸索了很久,当然网易云是不可缺少的一部分,在配置好各种环境+程序后,也找到了解决网易云的方法了. 首先安装好网易云 默认情况下需要在终端使用 sudo 才能运行 解决的办 ...

  2. ubuntu18.10安装网易云音乐,并解决网易云音乐图标无法启动的问题

    ubuntu18.10安装网易云音乐,并解决网易云音乐图标无法启动的问题 ubuntu18.10安装网易云音乐 解决网易云音乐图标无法启动的问题 ubuntu18.10安装网易云音乐 网易云音乐官网下 ...

  3. Python 将网易云歌单迁移到QQ音乐

    最近,网易云音乐越来越多的歌曲变灰了,许多我以前喜欢听的音乐都消失在云端,非常可惜.最近我还是想听回以前的歌曲,于是只能使用有那些歌曲版权的QQ音乐,麻烦的是,QQ音乐没有我在网易云音乐的歌单,两个软 ...

  4. Python爬虫网易云歌词及词频统计--(周杰伦top50)

    本篇博客是利用Python爬虫网易云音乐,并利用jieba分词,对歌词进行分词,然后分析周杰伦top50中最常出现的词语. 我们先尝试获取一首歌的歌词吧,比如等你下课这首歌 上面的id就是等你下课这首 ...

  5. Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 源码下载

    Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 一.技术说明 网易云音乐数据(歌单.用户.歌词.评论)Python爬取Flask框架搭建ECharts. ...

  6. Python爬虫实战,matplotlib模块,Python实现网易云音乐歌单数据可视化

    前言 利用Python实现网易云音乐歌单数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块 pandas模块 matplotli ...

  7. 【AirPlay2】AirPlay升级后的FLAC和ALAC无损音乐格式究竟是什么?

    前言:我最近在弄苹果的airplay项目,发现airplay2对比airplay多了音质方面的增强.AAC和MP3接触过,但对FLAC和ALAC完全不了解,整理学习资料汇总成如下信息: AirPlay ...

  8. 转换 FLAC、APE 无损音乐格式为 iTunes 支持导入的 M4A 格式

    大家知道常见的无损音乐格式有 FLAC.APE.WAV 等这些格式.其中 FLAC (Free Lossless Audio Codec) 格式因为是免费自由的压缩编码.无损压缩,且受到操作系统.软件 ...

  9. 无损音乐格式转换的方法

    三月真是个好日子,春暖花开人们喜欢周末的时候晒晒太阳闻闻花香散步,如果这时候在放点小音乐,这大概就是春天最美好的样子了吧!所以我们需要在手机上下载很多的歌曲供我们欣赏,但是常常会导致下载的歌曲是无损音 ...

  10. Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单内歌曲

    Java 使用HttpURLConnection获取网易云(我喜欢的音乐)歌单歌单内歌曲 1.HttpURLConnection简介 2.前期准备 2.1 目标url 2.2 歌曲ID获得 2.3 u ...

最新文章

  1. 如何用node命令和webpack命令传递参数 转载
  2. ELK学习9_ELK数据流传输过程_问题总结2
  3. TrimPath - Js模板引擎
  4. set、get方法解析
  5. Python 使用ntplib库同步校准当地时间的方法 (NTP)
  6. 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
  7. github客户端与git使用指南
  8. Illustrator CS4 序列号
  9. 水下航行器简介及水下面临的挑战
  10. ABeam Insight | 女性科技系列(3):国内外女性科技(FemTech)企业介绍
  11. 山石防火墙--飞塔防火墙间GRE配置
  12. JavaScript 数组array 插入[ push() ] 与 删除[ splice() ]
  13. 数据库课程设计-员工信息管理系统(基于python和MySQL实现)
  14. python大数据毕业设计题目100例
  15. SAS:一些基本知识
  16. STL学习(自学手册+源码分析)之RB -tree
  17. python 读取gmail 邮箱消息
  18. 数学分形之谢尔宾三角形
  19. Astra相机的ROS开发环境配置与使用
  20. spring boot中,使用LocalDateTime.now()相差八小时

热门文章

  1. python语言程序设计课后答案王恺_超星学习通Python程序设计基础(山东联盟)答案汇总...
  2. echarts+3d饼图
  3. Acrobat DC安装教程
  4. iPhone 14 Pro Max拆解:内部元器件供应商名单
  5. 终极算法【3】——符号学派
  6. HMM隐马尔科夫模型及MATLAB实现
  7. GB / ISO / 等保 网络安全相关标准法规
  8. Mac安装Qt开发环境,Qt在线安装和更新组件,Qt安装教程
  9. 【Google浏览器无法登录账号】为安全起见,您无法从此设备登录。请稍后重试,或从其他设备登录
  10. 谷歌浏览器历史版本解决chrome浏览器安装不上的问题