Skip to content
Golang 版本的网易云音乐 NCM 文件格式转换
Branch: master
Clone or download
Pull request Compare This branch is 6 commits behind yoki123:master.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
asserts
cmd
.editorconfig
.gitignore
LICENSE
README.md
go.mod
go.sum 增加测试用例 May 6, 2019
ncmdump.go
ncmdump_test.go
struct.go 注释调整了下 May 5, 2019

README.md

ncmdump.go - 导出网易云音乐 NCM 格式

简介

用于导出网易云音乐 NCM 格式的相关内容,本项目完全参考 anonymous5l/ncmdump,并使用 golang 实现,起初是为了能在 Windows 下快速编译和运行。

格式分析

NCM 实际上不是音频格式是容器格式,封装了对应格式的 Meta 以及封面等信息,主要的格式如下:

ncm.png

因此,需要解开原格式信息的关键就是拿到 AES 的 KEY,好在每个 NCM 的加密的 KEY 都是一致的(出于性能考虑?)。所以,我们只要拿到 AES 的 KEY 以后,就可以根据格式解开对应的资源。

如何使用?

为了避免不必要的麻烦,本项目不提供可执行文件。如果您需要对应需要的功能,请自行封装和编译。

使用 go get -u github.com/mingcheng/ncmdump.go 下载包到本地,然后调用传入对应的文件句柄即可,示例代码:

import (
	"fmt"
	"github.com/mingcheng/ncmdump.go"
    //...
)

然后获得文件的 Meta 信息

fp, err := os.Open(name)
if err != nil {
    log.Println(err)
    return
}
defer fp.Close()

if meta, err := ncmdump.DumpMeta(fp); err != nil {
    log.Fatal(err)
} else {
    fmt.Printf("%s: %s\n", name, meta.Format)
}

顺便提一句,为了转换以及处理方便,使用 ncmdump.Dump(fp) 会将已经解出来的原音乐格式放入内存中,如果想直接写入文件建议修改 writer 的指向即可。

已知问题

新版的云音乐已经不在 NCM 嵌入图片以及 Meta 等信息,因此使用 ncmdump.DumpMeta 去调用的时候,需要检查 Meta 信息的完整性。如果您需要 Meta 等信息,建议不要使用最新的客户端。

相关链接

- eof -

You can’t perform that action at this time.