ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

qmc-decoder:把 QQ 音乐 QMC 加密音频转成 MP3、FLAC 的完全指南

qmc-decoder:把 QQ 音乐 QMC 加密音频转成 MP3、FLAC 的完全指南 qmc-decoder把 QQ 音乐 QMC 加密音频转成 MP3、FLAC 的完全指南【免费下载链接】qmc-decoderFastest best convert qmc 2 mp3 | flac tools项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoderqmc-decoder 是一个命令行解密转换工具把 QQ 音乐下载的.qmc3、.qmcflac、.qmcogg加密文件还原成任意播放器都能打开的.mp3、.flac、.ogg。整个过程是纯字节级解密不重新编码转换后的文件与源文件字节数完全一致。这篇文章覆盖从克隆代码、三平台编译到单文件和整目录转换的完整流程说明它支持的格式映射和批量行为给出定时任务和 Python 调用两套可直接运行的自动化方案最后整理一份常见报错的排查清单。先搞清楚它到底在干什么QMC 系列文件并不是独立的音频容器里面装的只是被固定掩码逐字节异或过的 MP3、FLAC 或 OGG 数据。src/seed.hpp定义了掩码生成器一张 8×7 的固定种子表seed类的next_mask()每调用一次吐出一个掩码字节遍历路径是固定的往返之字形跨 0x800032KB字节边界时再递归取一次下一字节所以任意长度的文件都能对齐。src/decoder.cpp是主流程把整个文件读进内存对第 i 个字节执行buffer[i] seed_.next_mask() ^ buffer[i]然后写回源文件所在目录只把扩展名替换掉。因为是纯异或、不碰音频流转换后文件大小与源文件完全一致也就谈不上音质损失。全部逻辑集中在这两个文件里想了解原理的话读完它们就足够。从零跑通第一次转换第一步获取代码。克隆仓库并初始化子模块3rdparty/filesystem目录依赖它提供跨平台的文件系统操作git clone https://gitcode.com/gh_mirrors/qm/qmc-decoder cd qmc-decoder git submodule update --init第二步编译。入口是 CMake构建方式在 Linux、macOS、Windows 上只有最后两步不同。Linux需要 cmake 和 gccmkdir -p build cd build cmake .. makemacOS没装 cmake 的话先装brew install cmake mkdir -p build cd build cmake .. makeWindows在 VS 的 Native Tools Command Prompt 里执行需先装好 MSVC 和 Gitmkdir build cd build cmake -G NMake Makefiles .. -DCMAKE_BUILD_TYPERelease nmake第三步转换第一个文件。产物在build/目录里。单文件模式传一个路径参数输出会生成在源文件旁边./build/qmc-decoder ~/Music/qq/some-song.qmc3跑完看一眼源文件目录出现同名、扩展名为.mp3的新文件就成了。第四步整目录处理。把可执行文件拷进音乐目录、不带任何参数运行它会递归扫描当前目录下的所有 QMC 文件逐个处理并打印decode: 文件路径的进度macOS 用户也可以把decoder.command脚本放进同一目录双击执行cp build/qmc-decoder ~/Music/qq/ cd ~/Music/qq ./qmc-decoder注意目录模式会把产物写回音乐目录本身所以下一节的注意事项里有一条关于覆盖的提醒。它能处理哪些格式以及怎么处理扩展名匹配靠正则只认下面四种其它后缀的文件会被直接忽略源扩展名解密后扩展名输出格式.qmc3、.qmc0.mp3MP3兼容性最好.qmcflac.flacFLAC无损.qmcogg.oggOGG目录模式使用递归迭代器扫描当前目录及所有子目录原 QMC 文件保持不动输出文件写在源文件旁边文件名与源文件相同、仅替换扩展名。如果同名输出文件已存在会被直接覆盖——重复运行等于重新转换不会报错也不会追加。把它塞进你的工作流方案一cron 定时转换。下载目录里的新文件每晚自动处理写一个 shell 脚本给 cron 调用错误输出落进日志方便事后排查#!/bin/bash # qmc_convert.sh每晚处理 QQ 音乐下载目录里的新文件 MUSIC_DIR$HOME/Music/qq # 本地下载目录 DECODER$HOME/qmc-decoder/build/qmc-decoder # 编译产物路径 cd $MUSIC_DIR || exit 1 $DECODER 2 $HOME/qmc_convert.log # 不带参数 递归处理当前目录注册到 crontab每天凌晨 3 点执行(crontab -l 2/dev/null; echo 0 3 * * * $HOME/qmc_convert.sh) | crontab -方案二程序化调用。要接进下载管线或网页服务时用subprocess包一层即可。工具一次只接受一个文件路径所以脚本需要循环逐文件调用#!/usr/bin/env python3 import subprocess from pathlib import Path DECODER Path.home() / qmc-decoder/build/qmc-decoder MUSIC_DIR Path.home() / Music/qq for qmc in MUSIC_DIR.rglob(*.qmc*): r subprocess.run([str(DECODER), str(qmc)], capture_outputTrue) # 返回码 0 即成功失败原因在 r.stderr 里 print(f{qmc.name} - {OK if r.returncode 0 else FAIL})踩坑排查清单please check if you have the write permissions on this dir.原因目录模式会先检查当前目录是否可写输出要写回源文件旁边单文件模式弹出同一句提示时检查的其实是输入文件的读权限。 修复chmod uw ~/Music/qq或换一个有写权限的目录再运行。Put the binary in the same directory ... or use the CLI interface: qmc-decoder /PATH/TO/SONG原因传了不止一个参数比如试图同时指定输出文件名工具最多只接受一个文件路径。 修复去掉第二个参数输出文件名由源文件扩展名替换自动生成。failed read file: some-song.mp3原因输入文件打开失败注意提示里打印的是输出路径而不是源路径容易误导。 修复用ls确认源文件真实存在扩展名是否为qmc3、qmc0、qmcflac、qmcogg之一。编译期报3rdparty/filesystem/include/ghc/filesystem.hpp: No such file or directory原因3rdparty/filesystem是 git 子模块没初始化时目录是空的。 修复回到项目根目录执行git submodule update --init再重新编译。项目里有什么qmc-decoder/ ├── CMakeLists.txt # 构建配置C11 或 C17Linux 下静态链接 ├── LICENSE # MIT 许可证 ├── README.md # 项目说明与三平台编译方法 ├── decoder.command # macOS 双击启动脚本查找同目录的 qmc-decoder ├── src/ │ ├── decoder.cpp # 解密主流程格式匹配、种子异或、目录扫描 │ └── seed.hpp # 种子掩码生成器8×7 种子表加之字形遍历 └── 3rdparty/ └── filesystem/ # ghc filesystem 子模块C17 filesystem 不可用时的替代用之前记住这几条原文件不会被删除但同名输出文件会被直接覆盖重跑前先确认目录里没残留旧产物校验很简单转换后文件大小应与源文件完全一致不一致说明源文件本身有问题元数据不处理歌手、专辑这类 tag 需要转换后用专门的打标工具补每个文件会被整体读入内存几个 GB 的大文件不要开多个实例并行跑音乐目录在只读挂载点上的话改用单文件模式输出前先把文件拷到可写位置大规模转换前拉一次最新源码核心解密逻辑很稳定更新主要涉及构建与兼容【免费下载链接】qmc-decoderFastest best convert qmc 2 mp3 | flac tools项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表