Files
163-music-dl/README.md
T

158 lines
5.4 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 网易云音乐下载器
一个基于 Node.js 的网易云音乐命令行下载工具,支持单曲、歌单、专辑及批量下载,并可同步保存歌词、封面和歌曲标签。
项目采用 CommonJS 模块化结构,核心功能仅依赖 Node.js 内置模块。`node-id3``ffmpeg` 和本地音频播放器均为可选依赖。
## 功能特性
- 按关键词、歌曲 ID、歌手、歌单或专辑下载音乐
- 支持多个歌曲 ID 及文件列表批量下载
- 支持标准、极高、无损、Hi-Res、超清母带、空间音频和高清臻品音质
- 下载原文歌词,并按时间轴合并翻译歌词
- 下载封面,写入歌曲信息、歌词和封面标签
- 查看歌曲详情、歌词、歌单内容和本地下载列表
- 试听歌曲,导出下载历史,生成 M3U 播放列表
- 自动识别文件名并补全已有音频文件的标签
- 支持失败重试、下载暂停、历史统计、缓存清理和回收站
## 环境要求
- Node.js(建议使用当前维护中的 LTS 版本)
- 可访问脚本所配置的音乐接口和网易云音乐
可选依赖:
- [`node-id3`](https://www.npmjs.com/package/node-id3):为 MP3 写入封面、歌词和 ID3 标签
- [`ffmpeg`](https://ffmpeg.org/):为 FLAC 等格式写入封面和标签,也可作为 MP3 标签写入的后备方案
- `mpv``ffplay``play``cvlc``aplay`:用于试听歌曲
安装可选的 MP3 标签依赖:
```bash
npm install node-id3
```
## 快速开始
克隆仓库后进入项目目录:
```bash
git clone https://git.draws.qzz.io/jocay/163-music-dl.git
cd 163-music-dl
node 163_music_downloader.js
```
不带参数运行时会进入中文交互菜单,可搜索、下载和管理歌曲。
## 项目结构
```text
163_music_downloader.js # 命令行入口与交互菜单
lib/
catalog.js # 搜索与歌单接口
config.js # 应用配置、路径和默认值
downloader.js # 单曲下载主流程与重试
history.js # 下载历史读写
lyrics.js # 歌词获取、合并和制作信息解析
metadata.js # 网易云歌曲/专辑元数据与专辑目录
network.js # HTTP 请求和文件下载
pause.js # 批量任务暂停状态
quality.js # 音质解析与交互选择
tagging.js # 封面及音频标签写入
utils.js # 文件名、目录大小等通用工具
```
## 命令行模式
直接下载一个或多个歌曲 ID
```bash
node 163_music_downloader.js 347230 1859245776
```
下载完整歌单或专辑:
```bash
node 163_music_downloader.js --playlist=歌单ID
node 163_music_downloader.js --album=专辑ID
```
可选参数:
| 参数 | 说明 |
| --- | --- |
| `--level=<音质>` | 指定下载音质 |
| `--retries=<次数>` | 指定失败重试次数,默认 `3` |
| `--no-lyric` | 不下载歌词文件 |
| `--no-cover` | 不下载封面,也不执行封面和标签嵌入 |
示例:
```bash
node 163_music_downloader.js --playlist=歌单ID --level=lossless --retries=5
node 163_music_downloader.js 347230 --level=hires --no-cover
```
## 音质等级
| 参数值 | 音质 |
| --- | --- |
| `standard` | 标准 |
| `exhigh` | 极高 |
| `lossless` | 无损 |
| `hires` | Hi-Res |
| `jymaster` | 超清母带(默认) |
| `sky` | 空间音频 |
| `jyeffect` | 高清臻品 |
实际可用音质取决于接口返回结果,接口可能返回低于请求等级的音源。
## 配置
程序启动时读取项目根目录的 `config.json`。配置项包括接口地址、下载目录、历史记录路径、运行时配置路径、默认音质和重试次数。
```json
{
"api": {
"music": "https://api.chksz.top/api/163_music",
"lyric": "https://api.chksz.top/api/163_lyric",
"search": "https://api.chksz.top/api/163_search",
"playlist": "https://api.chksz.top/api/163_playlist",
"neteaseBaseUrl": "https://music.163.com"
},
"paths": {
"downloadDir": "downloads",
"historyFile": "download_history.json",
"runtimeConfigFile": "downloader_config.json",
"trashDir": ".trash",
"tempZipDir": ".tmp_zip"
},
"defaults": {
"quality": "jymaster",
"retries": 3,
"historyLimit": 500
}
}
```
相对路径以脚本所在目录为基准,绝对路径会直接使用。仓库中的 `config.json` 可能配置了特定运行环境的下载路径,首次运行前请按本机环境调整 `paths.downloadDir`
## 输出文件
- 音频和 `.lrc` 歌词保存在 `paths.downloadDir` 指定的目录
- 下载专辑时,专辑图片会保存为对应专辑目录下的 `cover.jpg`
- 下载历史保存在 `paths.historyFile` 指定的 JSON 文件中,默认最多保留 500 条
- 交互菜单修改的音质设置保存在 `paths.runtimeConfigFile` 指定的文件中
- 删除操作会先将文件移动到 `paths.trashDir`,而不是永久删除
- ZIP 打包过程使用 `paths.tempZipDir` 作为临时目录
下载文件名采用 `歌手 - 歌名` 格式,并自动移除文件系统不允许的字符。
## 注意事项
- 下载能力依赖第三方 `api.chksz.top` 接口,其可用性、音源和返回质量不由本项目保证。
- 歌曲详情和专辑元数据会直接请求网易云音乐。
- 请遵守当地法律法规、平台条款和音乐版权要求,仅将本工具用于合法用途。
- 音频文件和压缩包已通过 `.gitignore` 排除,不会被提交到仓库。