@king-3/file-kit 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +750 -0
- package/bin/cli.mjs +2 -0
- package/dist/cli.mjs +653 -0
- package/package.json +70 -0
package/README.md
ADDED
|
@@ -0,0 +1,750 @@
|
|
|
1
|
+
# @king-3/file-kit
|
|
2
|
+
|
|
3
|
+
> 🔧 多功能文件工具箱 — Base64 转换 · 视频转音频 · 文件加密/解密
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@king-3/file-kit)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## ✨ 核心功能
|
|
9
|
+
|
|
10
|
+
- 📄 **Base64 转换** - 文件 ↔ Base64 JSON,支持双向转换和完整还原
|
|
11
|
+
- 🎵 **视频转音频** - 从视频中提取音频轨道,支持 5 种格式和 3 种质量级别
|
|
12
|
+
- 🔐 **文件加密/解密** - 基于 AES-256-GCM 的军事级加密,确保数据安全
|
|
13
|
+
|
|
14
|
+
## 📦 安装
|
|
15
|
+
|
|
16
|
+
### 全局安装(推荐)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# 使用 pnpm
|
|
20
|
+
pnpm install @king-3/file-kit -g
|
|
21
|
+
|
|
22
|
+
# 使用 npm
|
|
23
|
+
npm install @king-3/file-kit -g
|
|
24
|
+
|
|
25
|
+
# 使用 yarn
|
|
26
|
+
yarn global add @king-3/file-kit
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 本地安装
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pnpm install @king-3/file-kit --save-dev
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 🚀 快速开始
|
|
36
|
+
|
|
37
|
+
### 命令行模式
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 查看帮助
|
|
41
|
+
fkt --help
|
|
42
|
+
|
|
43
|
+
# 查看版本
|
|
44
|
+
fkt --version
|
|
45
|
+
|
|
46
|
+
# 启动交互模式
|
|
47
|
+
fkt -i
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 交互模式
|
|
51
|
+
|
|
52
|
+
交互模式提供友好的可视化界面,一步步引导您完成操作:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
fkt -i
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
进入交互模式后,你可以通过方向键选择以下功能:
|
|
59
|
+
|
|
60
|
+
- 📦 文件转 Base64
|
|
61
|
+
- 🔄 Base64 还原文件
|
|
62
|
+
- 🎵 视频提取音频
|
|
63
|
+
- 🔐 文件加密
|
|
64
|
+
- 🔓 文件解密
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 📖 功能详解
|
|
69
|
+
|
|
70
|
+
### 1️⃣ Base64 转换
|
|
71
|
+
|
|
72
|
+
将任意文件编码为 Base64 格式并保存为 JSON 文件,适用于 API 传输、数据库存储等场景。
|
|
73
|
+
|
|
74
|
+
#### 基础用法
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
fkt base64 <文件路径> [选项]
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### 使用示例
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# 转换文本文件
|
|
84
|
+
fkt base64 document.txt
|
|
85
|
+
|
|
86
|
+
# 转换图片
|
|
87
|
+
fkt base64 photo.jpg
|
|
88
|
+
|
|
89
|
+
# 转换 PDF
|
|
90
|
+
fkt base64 report.pdf
|
|
91
|
+
|
|
92
|
+
# 指定输出目录
|
|
93
|
+
fkt base64 file.txt -o ./output
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
#### 输出格式
|
|
97
|
+
|
|
98
|
+
生成的 JSON 文件格式如下:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"type": "base64",
|
|
103
|
+
"createdAt": "2024-12-16 10:30:45",
|
|
104
|
+
"file": {
|
|
105
|
+
"name": "document.txt",
|
|
106
|
+
"extension": ".txt",
|
|
107
|
+
"size": 1024,
|
|
108
|
+
"base64": "SGVsbG8gV29ybGQh..."
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
#### 命令选项
|
|
114
|
+
|
|
115
|
+
| 选项 | 描述 |
|
|
116
|
+
| --------------------- | ------------------------------ |
|
|
117
|
+
| `-o, --output <path>` | 指定输出目录(默认:当前目录) |
|
|
118
|
+
| `-h, --help` | 显示帮助信息 |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
### 2️⃣ Base64 还原
|
|
123
|
+
|
|
124
|
+
从 Base64 JSON 文件恢复原始文件。
|
|
125
|
+
|
|
126
|
+
#### 基础用法
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
fkt restore <JSON文件路径> [选项]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### 使用示例
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# 还原文件(默认输出到当前目录)
|
|
136
|
+
fkt restore archive.base64.json
|
|
137
|
+
|
|
138
|
+
# 指定输出目录
|
|
139
|
+
fkt restore archive.base64.json -o ./restored
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
#### 特性
|
|
143
|
+
|
|
144
|
+
- ✅ 保留原始文件大小信息
|
|
145
|
+
- ✅ 显示原始创建时间戳
|
|
146
|
+
- ✅ 验证 JSON 格式完整性
|
|
147
|
+
|
|
148
|
+
#### 命令选项
|
|
149
|
+
|
|
150
|
+
| 选项 | 描述 |
|
|
151
|
+
| --------------------- | ------------------------------ |
|
|
152
|
+
| `-o, --output <path>` | 指定输出目录(默认:当前目录) |
|
|
153
|
+
| `-h, --help` | 显示帮助信息 |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
### 3️⃣ 视频转音频
|
|
158
|
+
|
|
159
|
+
从视频文件中提取音频轨道,支持多种格式和质量选项。底层使用 FFmpeg 进行专业级音视频处理。
|
|
160
|
+
|
|
161
|
+
#### 基础用法
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
fkt video-to-audio <视频文件> [选项]
|
|
165
|
+
# 或使用别名
|
|
166
|
+
fkt v2a <视频文件> [选项]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### 支持的音频格式
|
|
170
|
+
|
|
171
|
+
| 格式 | 扩展名 | 编码器 | 特点 | 适用场景 |
|
|
172
|
+
| -------- | ------- | ---------- | -------------- | --------------- |
|
|
173
|
+
| **MP3** | `.mp3` | libmp3lame | 最佳兼容性 | 日常使用、分享 |
|
|
174
|
+
| **AAC** | `.m4a` | aac | Apple 生态优化 | iOS/macOS 设备 |
|
|
175
|
+
| **FLAC** | `.flac` | flac | 无损压缩 | 音乐收藏、归档 |
|
|
176
|
+
| **ALAC** | `.m4a` | alac | Apple 无损格式 | iTunes/iOS 无损 |
|
|
177
|
+
| **WAV** | `.wav` | pcm_s16le | 未压缩原始音频 | 专业音频编辑 |
|
|
178
|
+
|
|
179
|
+
#### 质量选项
|
|
180
|
+
|
|
181
|
+
| 质量 | MP3 | AAC | FLAC | 说明 |
|
|
182
|
+
| ---------- | ---- | ---- | ------ | ---------------- |
|
|
183
|
+
| **low** | 128k | 128k | 级别 0 | 快速,文件小 |
|
|
184
|
+
| **medium** | 192k | 192k | 级别 5 | 平衡质量(推荐) |
|
|
185
|
+
| **high** | 320k | 256k | 级别 8 | 最佳质量 |
|
|
186
|
+
|
|
187
|
+
#### 使用示例
|
|
188
|
+
|
|
189
|
+
**基础转换**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# 交互式选择格式和质量
|
|
193
|
+
fkt v2a video.mp4
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**指定格式和质量**
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# 转换为高质量 MP3
|
|
200
|
+
fkt v2a video.mp4 -f mp3 -q high
|
|
201
|
+
|
|
202
|
+
# 转换为中等质量 AAC
|
|
203
|
+
fkt v2a video.mp4 -f aac -q medium
|
|
204
|
+
|
|
205
|
+
# 转换为无损 FLAC
|
|
206
|
+
fkt v2a video.mp4 -f flac -q high
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**指定输出路径**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# 指定输出目录
|
|
213
|
+
fkt v2a video.mp4 -o ./audio -f mp3 -q high
|
|
214
|
+
|
|
215
|
+
# 输出文件: ./audio/video.mp3
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**批量转换**
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
# 使用 shell 循环批量转换
|
|
222
|
+
for file in *.mp4; do
|
|
223
|
+
fkt v2a "$file" -f mp3 -q high
|
|
224
|
+
done
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
#### 进度显示
|
|
228
|
+
|
|
229
|
+
转换过程中会实时显示进度:
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
⠋ 正在提取音频 45%
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
完成后显示输出路径:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
✔ 音频已提取到: ./video.mp3
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
#### 命令选项
|
|
242
|
+
|
|
243
|
+
| 选项 | 描述 |
|
|
244
|
+
| --------------------- | --------------------------------- |
|
|
245
|
+
| `-f, --format <fmt>` | 音频格式(mp3/aac/flac/alac/wav) |
|
|
246
|
+
| `-q, --quality <qlt>` | 音频质量(low/medium/high) |
|
|
247
|
+
| `-o, --output <path>` | 输出目录(默认:视频所在目录) |
|
|
248
|
+
| `-h, --help` | 显示帮助信息 |
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
### 4️⃣ 文件加密
|
|
253
|
+
|
|
254
|
+
使用 AES-256-GCM 算法对文件进行加密,生成加密的 JSON 文件。
|
|
255
|
+
|
|
256
|
+
#### 加密算法
|
|
257
|
+
|
|
258
|
+
- **算法**:AES-256-GCM(Galois/Counter Mode)
|
|
259
|
+
- **密钥派生**:PBKDF2-SHA256(100,000 次迭代)
|
|
260
|
+
- **初始化向量**:16 字节随机生成
|
|
261
|
+
- **盐值**:32 字节随机生成
|
|
262
|
+
- **认证标签**:GCM 模式自动生成,确保数据完整性
|
|
263
|
+
|
|
264
|
+
#### 基础用法
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
fkt encrypt <文件路径> [选项]
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### 使用示例
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# 交互式加密(会提示输入密码)
|
|
274
|
+
fkt encrypt secret.txt
|
|
275
|
+
|
|
276
|
+
# 命令行指定密码
|
|
277
|
+
fkt encrypt secret.txt -p myPassword123
|
|
278
|
+
|
|
279
|
+
# 指定输出目录
|
|
280
|
+
fkt encrypt secret.txt -o ./encrypted -p myPassword123
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
#### 输出格式
|
|
284
|
+
|
|
285
|
+
生成的加密 JSON 文件格式:
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{
|
|
289
|
+
"type": "crypto",
|
|
290
|
+
"algorithm": "aes-256-gcm",
|
|
291
|
+
"createdAt": "2024-12-16 10:30:45",
|
|
292
|
+
"file": {
|
|
293
|
+
"name": "secret.txt",
|
|
294
|
+
"extension": ".txt",
|
|
295
|
+
"size": 2048,
|
|
296
|
+
"iv": "base64_encoded_iv",
|
|
297
|
+
"authTag": "base64_encoded_auth_tag",
|
|
298
|
+
"salt": "base64_encoded_salt",
|
|
299
|
+
"encrypted": "base64_encoded_data"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### 安全建议
|
|
305
|
+
|
|
306
|
+
- ⚠️ **请妥善保管密码**,丢失后无法恢复文件
|
|
307
|
+
- 🔒 密码长度至少 6 位,建议使用强密码
|
|
308
|
+
- 💾 建议备份加密文件到安全位置
|
|
309
|
+
- 🔑 不要在命令行直接暴露密码(使用交互模式)
|
|
310
|
+
|
|
311
|
+
#### 命令选项
|
|
312
|
+
|
|
313
|
+
| 选项 | 描述 |
|
|
314
|
+
| ---------------------- | -------------------------------- |
|
|
315
|
+
| `-p, --password <pwd>` | 加密密码(建议使用交互模式输入) |
|
|
316
|
+
| `-o, --output <path>` | 输出目录(默认:当前目录) |
|
|
317
|
+
| `-h, --help` | 显示帮助信息 |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
### 5️⃣ 文件解密
|
|
322
|
+
|
|
323
|
+
从加密的 JSON 文件中解密并还原原始文件。
|
|
324
|
+
|
|
325
|
+
#### 基础用法
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
fkt decrypt <加密JSON文件> [选项]
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
#### 使用示例
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# 交互式解密(会提示输入密码)
|
|
335
|
+
fkt decrypt secret.crypto.json
|
|
336
|
+
|
|
337
|
+
# 命令行指定密码
|
|
338
|
+
fkt decrypt secret.crypto.json -p myPassword123
|
|
339
|
+
|
|
340
|
+
# 指定输出目录
|
|
341
|
+
fkt decrypt secret.crypto.json -o ./decrypted -p myPassword123
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
#### 特性
|
|
345
|
+
|
|
346
|
+
- ✅ 自动验证密码正确性
|
|
347
|
+
- ✅ 验证数据完整性(通过 GCM 认证标签)
|
|
348
|
+
- ✅ 还原原始文件名和扩展名
|
|
349
|
+
- ✅ 密码错误时友好提示
|
|
350
|
+
|
|
351
|
+
#### 错误处理
|
|
352
|
+
|
|
353
|
+
如果密码错误,会显示以下提示:
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
✖ 解密失败:密码错误或文件已损坏
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
#### 命令选项
|
|
360
|
+
|
|
361
|
+
| 选项 | 描述 |
|
|
362
|
+
| ---------------------- | -------------------------------- |
|
|
363
|
+
| `-p, --password <pwd>` | 解密密码(建议使用交互模式输入) |
|
|
364
|
+
| `-o, --output <path>` | 输出目录(默认:当前目录) |
|
|
365
|
+
| `-h, --help` | 显示帮助信息 |
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## 🎮 命令参考
|
|
370
|
+
|
|
371
|
+
### 全局选项
|
|
372
|
+
|
|
373
|
+
| 选项 | 别名 | 描述 |
|
|
374
|
+
| --------------- | ---- | ------------ |
|
|
375
|
+
| `--help` | `-h` | 显示帮助信息 |
|
|
376
|
+
| `--version` | `-v` | 显示版本号 |
|
|
377
|
+
| `--interactive` | `-i` | 启动交互模式 |
|
|
378
|
+
|
|
379
|
+
### 命令列表
|
|
380
|
+
|
|
381
|
+
| 命令 | 别名 | 描述 |
|
|
382
|
+
| ------------------------ | ----- | --------------- |
|
|
383
|
+
| `base64 <input>` | - | 文件转 Base64 |
|
|
384
|
+
| `restore <input>` | - | Base64 还原文件 |
|
|
385
|
+
| `video-to-audio <input>` | `v2a` | 视频提取音频 |
|
|
386
|
+
| `encrypt <input>` | - | 文件加密 |
|
|
387
|
+
| `decrypt <input>` | - | 文件解密 |
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
391
|
+
## 🎯 使用场景
|
|
392
|
+
|
|
393
|
+
### 场景 1:文件分享与存储
|
|
394
|
+
|
|
395
|
+
**问题**:需要将二进制文件转换为文本格式,便于在 API 或数据库中存储和传输。
|
|
396
|
+
|
|
397
|
+
**解决方案**:
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
# 转换为 Base64
|
|
401
|
+
fkt base64 document.pdf -o ./archive
|
|
402
|
+
|
|
403
|
+
# 通过 API 传输或存储到数据库
|
|
404
|
+
# ...
|
|
405
|
+
|
|
406
|
+
# 需要时还原
|
|
407
|
+
fkt restore ./archive/document.json -o ./restored
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
### 场景 2:敏感文件加密存储
|
|
413
|
+
|
|
414
|
+
**问题**:需要安全存储敏感文件,如合同、身份证件等。
|
|
415
|
+
|
|
416
|
+
**解决方案**:
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
# 加密文件
|
|
420
|
+
fkt encrypt contract.pdf -o ./encrypted
|
|
421
|
+
|
|
422
|
+
# 安全传输或备份加密文件
|
|
423
|
+
# ...
|
|
424
|
+
|
|
425
|
+
# 需要时解密
|
|
426
|
+
fkt decrypt ./encrypted/contract.crypto.json -o ./restored
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
### 场景 3:视频素材音频提取
|
|
432
|
+
|
|
433
|
+
**问题**:从视频素材中提取音频用于后期制作或音乐收藏。
|
|
434
|
+
|
|
435
|
+
**解决方案**:
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
# 提取高质量 MP3(日常使用)
|
|
439
|
+
fkt v2a interview.mp4 -f mp3 -q high -o ./audio
|
|
440
|
+
|
|
441
|
+
# 提取无损 FLAC(专业编辑)
|
|
442
|
+
fkt v2a concert.mp4 -f flac -q high -o ./audio
|
|
443
|
+
|
|
444
|
+
# Apple 设备使用 ALAC
|
|
445
|
+
fkt v2a music_video.mp4 -f alac -q high -o ./audio
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
### 场景 4:自动化工作流
|
|
451
|
+
|
|
452
|
+
**问题**:需要批量处理多个文件。
|
|
453
|
+
|
|
454
|
+
**解决方案**:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
# 批量加密
|
|
458
|
+
for file in *.txt; do
|
|
459
|
+
fkt encrypt "$file" -p myPassword123 -o ./encrypted
|
|
460
|
+
done
|
|
461
|
+
|
|
462
|
+
# 批量转换视频
|
|
463
|
+
for video in *.mp4; do
|
|
464
|
+
fkt v2a "$video" -f mp3 -q high -o ./audio
|
|
465
|
+
done
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## 📊 架构设计
|
|
471
|
+
|
|
472
|
+
```
|
|
473
|
+
┌─────────────────────────────────────┐
|
|
474
|
+
│ CLI 层 (cli.ts) │ ← Citty 命令行解析
|
|
475
|
+
├─────────────────────────────────────┤
|
|
476
|
+
│ Config 层 (config/) │ ← 配置管理
|
|
477
|
+
│ • defaults.ts │ - CLI 默认配置
|
|
478
|
+
│ • audio-formats.ts │ - 音频格式配置
|
|
479
|
+
│ • crypto-algorithm.ts │ - 加密算法配置
|
|
480
|
+
├─────────────────────────────────────┤
|
|
481
|
+
│ Commands 层 (commands/) │ ← 命令处理
|
|
482
|
+
│ • base64.ts │ - Base64 转换命令
|
|
483
|
+
│ • restore.ts │ - Base64 还原命令
|
|
484
|
+
│ • video-to-audio.ts │ - 视频转音频命令
|
|
485
|
+
│ • encrypt.ts │ - 文件加密命令
|
|
486
|
+
│ • decrypt.ts │ - 文件解密命令
|
|
487
|
+
├─────────────────────────────────────┤
|
|
488
|
+
│ Core 层 (core/) │ ← 核心业务逻辑
|
|
489
|
+
│ • base64.ts │ - Base64 编解码
|
|
490
|
+
│ • crypto.ts │ - 加密解密算法
|
|
491
|
+
│ • extract.ts │ - 视频音频提取
|
|
492
|
+
├─────────────────────────────────────┤
|
|
493
|
+
│ Utils 层 (utils/) │ ← 通用工具函数
|
|
494
|
+
│ • errors.ts │ - 错误处理
|
|
495
|
+
│ • helpers.ts │ - 命令助手
|
|
496
|
+
│ • file.ts │ - 文件操作
|
|
497
|
+
│ • logger.ts │ - 日志输出
|
|
498
|
+
│ • prompts.ts │ - 交互提示
|
|
499
|
+
│ • time.ts │ - 时间格式化
|
|
500
|
+
└─────────────────────────────────────┘
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
## 🛠️ 技术栈
|
|
506
|
+
|
|
507
|
+
| 技术 | 描述 | 用途 |
|
|
508
|
+
| ------------------ | ----------------------- | ------------------ |
|
|
509
|
+
| **Citty** | 现代化命令行框架 | CLI 路由和参数解析 |
|
|
510
|
+
| **Clack Prompts** | 美观的交互式 CLI 提示库 | 用户交互界面 |
|
|
511
|
+
| **FFmpeg** | 强大的多媒体处理工具 | 视频音频转换 |
|
|
512
|
+
| **Ansis** | 轻量级终端颜色库 | 终端输出美化 |
|
|
513
|
+
| **Node.js Crypto** | Node.js 内置加密模块 | AES-256-GCM 加密 |
|
|
514
|
+
|
|
515
|
+
---
|
|
516
|
+
|
|
517
|
+
## ⚙️ 配置
|
|
518
|
+
|
|
519
|
+
### 环境变量
|
|
520
|
+
|
|
521
|
+
```bash
|
|
522
|
+
# 开启调试模式(显示详细错误堆栈)
|
|
523
|
+
DEBUG=1 fkt base64 file.txt
|
|
524
|
+
|
|
525
|
+
# 指定 FFmpeg 路径(如果未在 PATH 中)
|
|
526
|
+
FFMPEG_PATH=/usr/local/bin/ffmpeg fkt v2a video.mp4
|
|
527
|
+
```
|
|
528
|
+
|
|
529
|
+
---
|
|
530
|
+
|
|
531
|
+
## 🔧 常见问题
|
|
532
|
+
|
|
533
|
+
### Q1: FFmpeg 相关错误
|
|
534
|
+
|
|
535
|
+
**错误**:`FFmpeg 未找到` 或 `spawn ffmpeg ENOENT`
|
|
536
|
+
|
|
537
|
+
**解决方案**:
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
npm install @ffmpeg-installer/ffmpeg
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
### Q2: 视频转音频进度卡住
|
|
546
|
+
|
|
547
|
+
**原因**:视频文件损坏或格式不支持
|
|
548
|
+
|
|
549
|
+
**解决方案**:
|
|
550
|
+
|
|
551
|
+
1. 检查视频文件是否完整:
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
ffmpeg -i video.mp4
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
2. 尝试使用其他格式:
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
fkt v2a video.mp4 -f mp3
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
3. 检查文件权限:
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
ls -la video.mp4
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
### Q3: Base64 文件过大
|
|
572
|
+
|
|
573
|
+
**原因**:Base64 编码会增加约 33% 的体积
|
|
574
|
+
|
|
575
|
+
**建议**:
|
|
576
|
+
|
|
577
|
+
- 对于大文件(>10MB),考虑先压缩再编码
|
|
578
|
+
- Base64 更适合小型文件或需要文本传输的场景
|
|
579
|
+
- 对于大型文件,建议使用加密功能而非 Base64
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
### Q4: 加密/解密失败
|
|
584
|
+
|
|
585
|
+
**问题**:密码错误或文件损坏
|
|
586
|
+
|
|
587
|
+
**解决方案**:
|
|
588
|
+
|
|
589
|
+
```bash
|
|
590
|
+
# 确保密码正确(区分大小写)
|
|
591
|
+
fkt decrypt file.crypto.json -p correctPassword
|
|
592
|
+
|
|
593
|
+
# 检查 JSON 文件完整性
|
|
594
|
+
cat file.crypto.json | jq
|
|
595
|
+
|
|
596
|
+
# 验证文件类型
|
|
597
|
+
fkt decrypt file.crypto.json # 使用交互模式
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
---
|
|
601
|
+
|
|
602
|
+
### Q5: 权限错误
|
|
603
|
+
|
|
604
|
+
**错误**:`EACCES: permission denied`
|
|
605
|
+
|
|
606
|
+
**解决方案**:
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
# 检查文件权限
|
|
610
|
+
ls -la file.txt
|
|
611
|
+
|
|
612
|
+
# 修改权限
|
|
613
|
+
chmod 644 file.txt
|
|
614
|
+
|
|
615
|
+
# 检查目录权限
|
|
616
|
+
chmod 755 ./output
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
---
|
|
620
|
+
|
|
621
|
+
### Q6: 内存不足(大文件处理)
|
|
622
|
+
|
|
623
|
+
**问题**:处理大文件时内存溢出
|
|
624
|
+
|
|
625
|
+
**解决方案**:
|
|
626
|
+
|
|
627
|
+
```bash
|
|
628
|
+
# 增加 Node.js 内存限制
|
|
629
|
+
NODE_OPTIONS="--max-old-space-size=4096" fkt base64 large-file.zip
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
---
|
|
633
|
+
|
|
634
|
+
## 📝 开发
|
|
635
|
+
|
|
636
|
+
### 本地开发
|
|
637
|
+
|
|
638
|
+
```bash
|
|
639
|
+
# 克隆仓库
|
|
640
|
+
git clone https://github.com/coderking3/file-kit.git
|
|
641
|
+
cd file-kit
|
|
642
|
+
|
|
643
|
+
# 安装依赖
|
|
644
|
+
pnpm install
|
|
645
|
+
|
|
646
|
+
# 开发模式运行
|
|
647
|
+
pnpm dev base64 test.txt
|
|
648
|
+
|
|
649
|
+
# 类型检查
|
|
650
|
+
pnpm typecheck
|
|
651
|
+
|
|
652
|
+
# 代码格式化
|
|
653
|
+
pnpm format
|
|
654
|
+
|
|
655
|
+
# 代码检查
|
|
656
|
+
pnpm lint
|
|
657
|
+
|
|
658
|
+
# 构建
|
|
659
|
+
pnpm build
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
### 项目结构
|
|
663
|
+
|
|
664
|
+
```
|
|
665
|
+
file-kit/
|
|
666
|
+
├── src/
|
|
667
|
+
│ ├── cli.ts # CLI 入口
|
|
668
|
+
│ ├── config/ # 配置层
|
|
669
|
+
│ │ ├── defaults.ts
|
|
670
|
+
│ │ ├── audio-formats.ts
|
|
671
|
+
│ │ └── crypto-algorithm.ts
|
|
672
|
+
│ ├── commands/ # 命令层
|
|
673
|
+
│ │ ├── index.ts
|
|
674
|
+
│ │ ├── base64.ts
|
|
675
|
+
│ │ ├── restore.ts
|
|
676
|
+
│ │ ├── video-to-audio.ts
|
|
677
|
+
│ │ ├── encrypt.ts
|
|
678
|
+
│ │ └── decrypt.ts
|
|
679
|
+
│ ├── core/ # 核心逻辑层
|
|
680
|
+
│ │ ├── base64.ts
|
|
681
|
+
│ │ ├── crypto.ts
|
|
682
|
+
│ │ └── extract.ts
|
|
683
|
+
│ ├── utils/ # 工具函数层
|
|
684
|
+
│ │ ├── errors.ts
|
|
685
|
+
│ │ ├── file.ts
|
|
686
|
+
│ │ ├── helpers.ts
|
|
687
|
+
│ │ ├── logger.ts
|
|
688
|
+
│ │ ├── prompts.ts
|
|
689
|
+
│ │ └── time.ts
|
|
690
|
+
│ └── types/ # 类型定义
|
|
691
|
+
│ └── index.ts
|
|
692
|
+
├── bin/
|
|
693
|
+
│ └── cli.mjs # 可执行文件
|
|
694
|
+
├── package.json
|
|
695
|
+
├── tsconfig.json
|
|
696
|
+
└── README.md
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
### 发布流程
|
|
700
|
+
|
|
701
|
+
```bash
|
|
702
|
+
# 更新版本号
|
|
703
|
+
pnpm release
|
|
704
|
+
|
|
705
|
+
# 构建并发布
|
|
706
|
+
pnpm build
|
|
707
|
+
pnpm publish
|
|
708
|
+
```
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
## 🤝 贡献
|
|
713
|
+
|
|
714
|
+
欢迎贡献代码!请遵循以下步骤:
|
|
715
|
+
|
|
716
|
+
1. Fork 本仓库
|
|
717
|
+
2. 创建特性分支(`git checkout -b feature/AmazingFeature`)
|
|
718
|
+
3. 提交更改(`git commit -m 'Add some AmazingFeature'`)
|
|
719
|
+
4. 推送到分支(`git push origin feature/AmazingFeature`)
|
|
720
|
+
5. 开启 Pull Request
|
|
721
|
+
|
|
722
|
+
### 贡献指南
|
|
723
|
+
|
|
724
|
+
- 遵循现有代码风格
|
|
725
|
+
- 添加适当的测试
|
|
726
|
+
- 更新相关文档
|
|
727
|
+
- 确保所有测试通过
|
|
728
|
+
|
|
729
|
+
---
|
|
730
|
+
|
|
731
|
+
## 📄 许可证
|
|
732
|
+
|
|
733
|
+
[MIT License](LICENSE) © 2024 King3
|
|
734
|
+
|
|
735
|
+
---
|
|
736
|
+
|
|
737
|
+
## 🔗 相关链接
|
|
738
|
+
|
|
739
|
+
- 📦 [NPM 包](https://www.npmjs.com/package/@king-3/file-kit)
|
|
740
|
+
- 🐙 [GitHub 仓库](https://github.com/coderking3/file-kit)
|
|
741
|
+
- 🐛 [问题反馈](https://github.com/coderking3/file-kit/issues)
|
|
742
|
+
- 📋 [更新日志](https://github.com/coderking3/file-kit/releases)
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
## 💬 联系方式
|
|
747
|
+
|
|
748
|
+
- **作者**:King3
|
|
749
|
+
- **邮箱**:king3.wm@gmail.com
|
|
750
|
+
- **问题反馈**:[GitHub Issues](https://github.com/coderking3/file-kit/issues)
|