Go to file
TaurusXin 5862d7a8d8
release: 1.7.0
2024-10-23 19:18:44 +08:00
.idea init repo 2024-09-14 22:39:50 +08:00
ncmcrypt fix: incorrect metadata structure 2024-10-23 19:17:51 +08:00
utils feat: allow to specify output dir; process dir recursively 2024-09-27 22:22:56 +08:00
.gitignore feat: ignore music files 2024-09-14 23:09:26 +08:00
README.md update: README.md 2024-10-21 16:30:46 +08:00
build.sh release: 1.7.0 2024-10-23 19:18:44 +08:00
go.mod fix: incorrect metadata structure 2024-10-23 19:17:51 +08:00
go.sum fix: incorrect metadata structure 2024-10-23 19:17:51 +08:00
main.go release: 1.7.0 2024-10-23 19:18:44 +08:00

README.md

ncmdump-go

基于 https://github.com/taurusxin/ncmdump 的 Golang 移植版

支持网易云音乐最新的 3.x 版本,但需要注意:从该版本开始网易云音乐不再在 ncm 文件中内置封面图片,本工具支持从网易服务器上自动下载对应歌曲的封面图并写入到最终的音乐文件中

使用方法

使用 -h--help 参数来打印帮助

ncmdump-go -h

使用 -v--version 参数来打印版本信息

ncmdump-go -v

处理单个或多个文件

ncmdump-go 1.ncm 2.ncm...

使用 -d 参数来指定一个文件夹,对文件夹下的所有以 ncm 为扩展名的文件进行批量处理

ncmdump-go -d source_dir

使用 -r 配合 -d 参数来递归处理文件夹下的所有以 ncm 为扩展名的文件

ncmdump-go -d source_dir -r

使用 -o 参数来指定输出目录,将转换后的文件输出到指定目录,该参数支持与 -r 参数一起使用

# 处理单个或多个文件并输出到指定目录
ncmdump-go 1.ncm 2.ncm -o output_dir

# 处理文件夹下的所有以 ncm 为扩展名并输出到指定目录,不包含子文件夹
ncmdump-go -d source_dir -o output_dir

# 递归处理文件夹并输出到指定目录,并保留目录结构
ncmdump-go -d source_dir -o output_dir -r

开发

使用 go module 下载 ncmdump-go 包

go get -u github.com/taurusxin/ncmdump-go

导入并使用

package main

import (
	"fmt"
	"github.com/taurusxin/ncmdump-go/ncmcrypt"
)

func main() {
	filePath := "test.ncm"
	
	// 创建实例
	ncm, err := ncmcrypt.NewNeteaseCloudMusic(filePath)
	if err != nil {
		fmt.Printf("Reading '%s' failed: '%s'\n", filePath, err.Error())
		return
	}
	
	// 转换格式,若目标文件夹为空,则保存在原目录
	dumpResult, err := ncm.Dump("")
	if err != nil {
		fmt.Printf("Processing '%s' failed: '%s'\n", filePath, err.Error())
	}
	if dumpResult {
		// 使用源文件的元数据修补转换后的音乐文件
		// 注意:自网易云音乐 3.0 版本开始ncm 文件中不再内嵌专辑封面图片,参数若为 true 则表示从网易服务器上下载图片并嵌入到目标音乐文件(需要联网)
		metadata, err := ncm.FixMetadata(true)
		if !metadata {
			fmt.Printf("Fix metadata for '%s' failed: '%s'", filePath, err.Error())
		}
		fmt.Printf("'%s' -> '%s'\n", filePath, ncm.GetDumpFilePath())
	}
}