借鉴了GitHub上的ncmdump 项目代码并使用PYQT做了一个界面出来

百度云下载链接

链接:https://pan.baidu.com/s/13KX4at8jOq49DZgCc3p13A 
提取码:s5v3 
复制这段内容后打开百度网盘手机App,操作更方便哦

如果可用麻烦各位给个赞喔,或者留言一下


用java重写了一个新的ncm格式转换器2.0版本

闪退异常时能知道报错信息

能知道进度,不会一直卡着

链接:https://pan.baidu.com/s/1kh_wWprOd0FneT0H5eBKUg 
提取码:p1yw
复制这段内容后打开百度网盘手机App,操作更方便哦

有啥问题可以加我q(这是一个免费的学习用小软件)


import binascii, struct
import base64, json
import os, tracebackfrom Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from Crypto.Util.strxor import strxor as XOR
from mutagen import mp3, flac, id3def dump(input_path, output_path = None, skip = True):output_path = (lambda path, meta: os.path.splitext(path)[0] + '.' + meta['format']) if not output_path else output_pathoutput_path = (lambda path, meta: path) if not callable(output_path) else output_pathcore_key = binascii.a2b_hex('687A4852416D736F356B496E62617857')meta_key = binascii.a2b_hex('2331346C6A6B5F215C5D2630553C2728')f = open(input_path, 'rb')# magic headerheader = f.read(8)assert binascii.b2a_hex(header) == b'4354454e4644414d'f.seek(2, 1)# key datakey_length = f.read(4)key_length = struct.unpack('<I', bytes(key_length))[0]key_data = bytearray(f.read(key_length))key_data = bytes(bytearray([byte ^ 0x64 for byte in key_data]))cryptor = AES.new(core_key, AES.MODE_ECB)key_data = unpad(cryptor.decrypt(key_data), 16)[17:]key_length = len(key_data)# S-box (standard RC4 Key-scheduling algorithm)key = bytearray(key_data)S = bytearray(range(256))j = 0for i in range(256):j = (j + S[i] + key[i % key_length]) & 0xFFS[i], S[j] = S[j], S[i]# meta datameta_length = f.read(4)meta_length = struct.unpack('<I', bytes(meta_length))[0]if meta_length:meta_data = bytearray(f.read(meta_length))meta_data = bytes(bytearray([byte ^ 0x63 for byte in meta_data]))identification = meta_data.decode('utf-8')meta_data = base64.b64decode(meta_data[22:])cryptor = AES.new(meta_key, AES.MODE_ECB)meta_data = unpad(cryptor.decrypt(meta_data), 16).decode('utf-8')meta_data = json.loads(meta_data[6:])else:meta_data = {'format': 'flac' if os.fstat(f.fileno()).st_size > 1024 ** 2 * 16 else 'mp3'}f.seek(5, 1)# album coverimage_space = f.read(4)image_space = struct.unpack('<I', bytes(image_space))[0]image_size = f.read(4)image_size = struct.unpack('<I', bytes(image_size))[0]image_data = f.read(image_size) if image_size else Nonef.seek(image_space - image_size, 1)# media dataoutput_path = output_path(input_path, meta_data)if skip and os.path.exists(output_path): returndata = f.read()f.close()# stream cipher (modified RC4 Pseudo-random generation algorithm)stream = [S[(S[i] + S[(i + S[i]) & 0xFF]) & 0xFF] for i in range(256)]stream = bytes(bytearray(stream * (len(data) // 256 + 1))[1:1 + len(data)])data = XOR(data, stream)m = open(output_path, 'wb')m.write(data)m.close()# media tagdef embed(item, content, type):item.encoding = 0item.type = typeitem.mime = 'image/png' if content[0:4] == binascii.a2b_hex('89504E47') else 'image/jpeg'item.data = contentif image_data:if meta_data['format'] == 'flac':audio = flac.FLAC(output_path)image = flac.Picture()embed(image, image_data, 3)audio.clear_pictures()audio.add_picture(image)elif meta_data['format'] == 'mp3':audio = mp3.MP3(output_path)image = id3.APIC()embed(image, image_data, 6)audio.tags.add(image)audio.save()if meta_length:if meta_data['format'] == 'flac':audio = flac.FLAC(output_path)audio['description'] = identificationelse:audio = mp3.EasyMP3(output_path)audio['title'] = 'placeholder'audio.tags.RegisterTextKey('comment', 'COMM')audio['comment'] = identificationaudio['title'] = meta_data['musicName']audio['album'] = meta_data['album']audio['artist'] = '/'.join([artist[0] for artist in meta_data['artist']])audio.save()return output_pathif __name__ == '__main__':import sysif len(sys.argv) > 1:files = sys.argv[1:]else:files = [name for name in os.listdir('.') if os.path.splitext(name)[-1] == '.ncm']if sys.version[0] == '2':files = [path.decode(sys.stdin.encoding) for path in files]if not files:print('please input file path!')for path in files:try:dump(path)print(os.path.split(path)[-1])except Exception as e:print(traceback.format_exc())pass

网易云NCM格式转换器相关推荐

  1. unreal无损音乐百度云_将网易云音乐专用的无损音乐格式转换成全平台通用的无损格式...

    前几天发现网易云音乐的ncm格式很坑爹,由于网易云的部分音乐采取了这种流媒体平台模式,这种格式的歌曲下载到设备本地以后只有在网易云音乐的app上面才能播放,而且还要在会员生效期间才能播 今天网易云弄出 ...

  2. 网易云缓存歌曲flac格式如何转化为mp3格式?

    越来越多的人使用网易云来听歌曲了,在每段歌曲下面都会有很多评价,而这些评价每个人都在抒发自己内心真实的想法,因此常常会有人在网易云上面缓存歌曲,但是惊奇的发现有些歌曲是不能播放的,这时候需要将它转换成 ...

  3. 网易云VIP音乐NCM文件转MP3,C语言版本

    前言 网易云的Vip音乐下载下来,格式不是mp3/flac这种通用的音乐格式,而是经过加密的ncm文件.只有用网易云的音乐App才能够打开.于是想到可不可以把.ncm文件转换成mp3或者flac文件, ...

  4. 网易云音乐怎样下载mp3格式的音乐

    网易云音乐怎样下载mp3格式的音乐 选择下面这两种音质的音乐,最后音乐的格式都是mp3.

  5. 网易云音乐怎么设置黑胶唱片_黑胶唱片是否是开放音乐格式?

    网易云音乐怎么设置黑胶唱片 这是我在Opensource.com上新专栏文章的第一篇,涉及开放音乐. 我不会做的一些事情:我不会只关注开放许可证下发行的音乐. 我不会写太多关于制作自己的音乐的事情. ...

  6. npm 升级_网易云音乐解锁变灰,自动签到听歌升级,npm等等vip加密格式音乐解锁...

    还是和前几期一样,录了几个小视频,还是很早之前推荐过的几个工具,只不过时间久了,有些地方可能有改动. 可能现在听网易云音乐的小伙伴,应该也越来越少了,曲库也少,广告也多.现在自己用的还是4.12谷歌市 ...

  7. macbook视频格式转换_一键视频格式转换器for Mac-一键视频格式转换器Mac版下载 V6.3.37-PC6苹果网...

    一键视频格式转换器Mac版是Mac电脑上的一款最好用的视频格式转换器之一.一键视频格式转换器Mac版是一款快速.简单.免费的视频转换器. 软件特色 一键视频格式转换器Mac版作为一款免费视频转换器软件 ...

  8. 如何清理网易云无损flac格式留下的注释163key(Don't Modify):.........等牛皮癣?

    上一期说到网易云留下的文件导致部分播放器无法识别是由于在注释里加入了大量私货,但是mp3tag无法清除flac等文件的牛皮癣,在电脑端明明用mp3tag清除了注释栏一片空白: 但是在资源管理器里依然有 ...

  9. ncm格式如何转换为mp3,分享几个方法!

    你是否曾在网易云音乐上下载了一些NCM格式的音频文件,但发现无法在其他设备上播放?别担心,记灵在线工具可以帮助你将这些NCM格式转换为常见的MP3格式.今天小编就来分享三种方法,教你如何搞定! 方法一 ...

  10. dts无损音乐什么意思_QQ音乐,网易云,AppleMusic谁的音质好?

    闲话不说,直接进入正题 1.测试歌曲2首,一首是老歌,曾经出过CD,一首是近2年的网络歌曲,基本不可能出CD 大量测试样本肯定更准确一些,但是我自己测了一批结果都是一致的,所以问题不大 2.看频谱软件 ...

最新文章

  1. 重磅!2022QS世界大学排名公布!
  2. 在命令行导出MySQL数据到Excel
  3. DFT实训教程笔记4(bibili版本)- ATPG
  4. Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)
  5. Linux 误删除 /boot分区 的解救办法
  6. oracle批量新增字段工具,mybatis 中oracle 批量新增三种方法
  7. Spring.NET教程(三)——对象的创建(基础篇)
  8. bzoj-1079 着色方案(dp)
  9. 跟我学Kafka之zookeeper的存储结构
  10. RabbitMQ交换机的讲解
  11. mysql字符集异常_mysql字符集设置出错问题
  12. 开源CRM系统国内有哪些品牌做的好?
  13. 半次元收藏夹爬虫(残疾版,不喜勿喷)
  14. 关于#1-D:last line of file ends without a newline警告的解决办法(stm32)
  15. Win7如何利用系统放大镜工具更改用户密码
  16. Tkinter Canvas画布 图片导入
  17. Win10 误删winsock注册表修复。 winsock.reg
  18. Feburary——766.托普利茨矩阵
  19. SolidWorks焊件中将各结构构件分解成单个零件的方法
  20. 泰山OFFICE技术讲座:关于字符间距的分类

热门文章

  1. uni-app 网络请求
  2. 软件工程|如何写设计文档
  3. 通向Golang的捷径【3.编辑器,IDE 和其他工具】
  4. 清华姚班毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
  5. 深入解析Windows操作系统(Windows Internals) 4th Edition 读书备忘录
  6. Asp.net MVC3 WebGrid查询绑定
  7. 万能打印之Delphi 2010实现(序言)
  8. docker 常用指令
  9. ASP 文件下载实例
  10. 电脑硬盘损坏数据还能不能恢复 解决方法来了