Commit Graph
9 Commits
Author SHA1 Message Date
ypshidifu 271612bbef fix: 添加 python-multipart 到 requirements.txt (Web转码依赖) 2026-09-17 17:34:15 +08:00
ypshidifu 095cd11a21 Add fastapi/uvicorn to requirements.txt 2026-09-17 17:13:04 +08:00
ypshidifu 8dd6aebd8b Web 前端: HTML上传+转码界面 + FastAPI后端
- app.py: FastAPI 后端,POST /convert 接收文件上传并调用 vipsong.convert_file 转码
  GET /download/<filename> 提供下载,GET /health 健康检查
  文件名安全过滤保留扩展名,支持多格式输出(mp3/flac/wav/ogg/m4a)
- templates/index.html: 纯HTML/CSS/JS单页应用,拖拽上传、格式选择、状态显示、下载链接
- .gitignore: 添加 static/uploads/、static/outputs/、音频输出文件过滤
- requirements.txt: 添加 fastapi、uvicorn、python-multipart

验证 MCP 可用性:
- Baota MCP SystemInfo/SiteList/ServiceStatus 全部正常返回
- nginx+mysql+php-fpm-74/82/85 运行中,5个网站正常
- Web API 端对端测试: NCM→MP3/FLAC/OGG 均输出有效音频,错误处理返回 HTTP 400
2026-09-17 17:10:55 +08:00
ypshidifu 8a281f584c Fix: > 重定向相对路径应相对于输入文件目录解析
问题:用户从 C:\Users\ypshidifu 运行,执行
  D:\CloudMusic\VipSongsDownload\*.ncm>../1.wav
输出显示成功,但 D:\CloudMusic 目录空空如已,文件消失。

根因:_parse_gt_output 将相对路径解析为相对于 cwd 而非输入文件目录。
cwd is C:\Users\ypshidifu,导致 ../1.wav 解析为 C:\Users\1.wav。

修复:相对路径在 _parse_gt_output 结尾处相对于输入文件目录 (p.parent) 解析。
2026-09-17 15:16:38 +08:00
ypshidifu e24966935e Fix: > 重定向目录+格式语法解析错误
问题:输入 'dir/*.ncm>../.ogg' 时,所有文件输出到同一路径 '../.ogg',
覆盖互相,导致 17 个文件都写入同一个空白路径。

根因:_parse_gt_output 将包含路径分隔符的输出规格 '../.ogg' 直接当作
完整文件路径处理,未识别出 '..' 是目录、'.ogg' 是格式扩展名。

修复:当输出规格包含路径分隔符时,检查分隔符后的部分:
- 若为 '.ext' 格式(如 '.ogg' '._mp3')→ 视为 目录+格式,为每个输入文件
  生成独立输出路径 <dir>/<filename>.<ext>
- 若为裸格式名(如 'ogg') → 同样视为目录+格式
- 若为普通文件名(如 'yy.mp3') → 保持原有字面路径行为
- 若仅目录(如 '/tmp/') → 使用原文件名 + mp3 扩展名

提交哈希:
2026-09-17 15:07:51 +08:00
ypshidifu 110eef3d3c Round 4: 修复ffmpeg空格式错误 + 添加防御性校验
- 添加 _normalize_format() 函数,规范化格式字符串,防止空/无效格式
- 修复 _parse_gt_output 空输出规格 bug(如 song.ncm> 会导致 ValueError)
- 在 _convert_audio 中添加 src_fmt/dst_fmt 空值保护,确保 never empty
- 在 convert_file 中添加 out_fmt 空值保护
- 在 _process_patterns 中添加 > 重定向空输出警告 + 回退到全局格式
- 将 -f 参数解析改为使用 _normalize_format(argv + 交互模式)
- 添加 VIPSONG_DEBUG 环境变量支持,输出 container/out_fmt/src_fmt/dst_fmt 诊断日志

根因:out_fmt 为空字符串时,_FORMAT_MAP.get 返回空字符串,
导致 audio.export(format="") -> ffmpeg -f '' -> "is not known" 错误。
2026-09-17 14:57:00 +08:00
ypshidifu e7656911e8 修复完整路径输入与>重定向语法,修正int.from_bytes字节序参数类型 2026-09-17 13:48:40 +08:00
ypshidifu 3af7501b47 修复 vipsong.py 多处错误
1. 修复 Line 277 语法错误:output_path")" 多余引号导致的 SyntaxError
2. 添加缺失的 META_KEY 常量(NCM 元数据 AES 密钥,16 字节)
3. 添加缺失的 KUGOU_KEY_PATH 常量(指向 kugou_key.xz)
4. 添加缺失的 stats 和 kgm_decoder 模块级初始化
5. 添加缺失的 import io(用于 _convert_audio 的 BytesIO)
6. 添加缺失的 _sniff_container 函数(音频容器魔术字节检测)
7. 添加缺失的 _extension_for 函数(格式到扩展名映射)
8. 添加缺失的 _convert_audio 函数(原始音频转码)
9. 修复 print("\n") 为 print()(恢复更清洁的输出格式)
2026-09-17 13:22:49 +08:00
ypshidifu 430e7156b8 初始提交:vipsong 音乐加密格式转码工具 2026-09-17 12:58:10 +08:00