Entendendo o Formato NCM
O NetEase Cloud Music utiliza o formato de arquivo NCM para proteger os direitos autorais de seu catálogo. Essa criptografia restringe a reprodução exclusivamente ao cliente oficial da plataforma. A ferrramenta de código aberto ncmdump foi desenvolvida para reverter esse processo, extraindo o áudio e convertendo-o para o formato padrão MP3 sem perda de qualidade.
Obtendo a Ferramenta
Para adquirir o utilitário, clone o repositório oficial:
git clone https://gitcode.com/gh_mirrors/ncmd/ncmdump
A estrutura do diretório contém os seguintes componantes principais:
main.exe: O binário responsável pela descriptografia.img/: Diretório com recursos visuais de documentação.LICENSE: Termos da licença de código aberto.
Métodos de Conversão
Interface Gráfica (Arrastar e Soltar)
A abordagem mais direta envolve a interação direta com o executável:
- Navegue até o diretório do
ncmdump. - Selecione um arquivo
.ncmou uma pasta inteira contendo múltiplos arquivos. - Arraste o item selecionado e solte sobre o ícone do
main.exe. - O processo será iniciado automaticamente, gerando os arquivos
.mp3no mesmo diretório de origem.
Automação via PowerShell
Para usuários que preferem automação e maior controle sobre o fluxo de trabalho, scripts em PowerShell oferecem uma alternativa robusta e moderna aos tradicionais arquivos em lote.
Conversão em Lote
$targetPath = "D:\AudioLibrary\NetEase"
Get-ChildItem -Path $targetPath -Filter "*.ncm" -Recurse | ForEach-Object {
Write-Host "Processando: $($_.FullName)"
& ".\main.exe" $_.FullName
}
Write-Host "Conversão finalizada."
Read-Host "Pressione Enter para sair"
Definindo Diretório de Saída Personalizado
Este script isola os arquivos originais e move o resultado para uma pasta específica:
$sourceFolder = "D:\RawDownloads\NCM"
$destinationFolder = "D:\Music\Decrypted"
if (-not (Test-Path $destinationFolder)) {
New-Item -ItemType Directory -Path $destinationFolder
}
Get-ChildItem -Path $sourceFolder -Filter "*.ncm" -Recurse | ForEach-Object {
Write-Host "Convertendo: $($_.Name)"
& ".\main.exe" $_.FullName
$newFilePath = Join-Path $_.DirectoryName ($_.BaseName + ".mp3")
if (Test-Path $newFilePath) {
Move-Item -Path $newFilePath -Destination $destinationFolder -Force
}
}
Monitoramento Contínuo de Pasta
Para processar novos downloads automaticamente em segundo plano:
$watchPath = "D:\Downloads\IncomingMusic"
$archivePath = "D:\Music\ProcessedArchive"
while ($true) {
$files = Get-ChildItem -Path $watchPath -Filter "*.ncm"
foreach ($file in $files) {
Write-Host "Novo arquivo detectado: $($file.Name)"
& ".\main.exe" $file.FullName
Move-Item -Path $file.FullName -Destination $archivePath -Force
}
Start-Sleep -Seconds 15
}
Segurança, Privacidade e Uso Legítimo
O ncmdump opera estritamente em ambiente local. Nenhuma conexão de rede é estabelecida e nenhum dado é transmitido para servidores externos. O código-fonte é aberto, permitindo auditoria completa.
É fundamental respeitar as leis de direitos autorais locais. A ferramenta deve ser utilizada apenas para fins de backup pessoal de músicas adquiridas legalmente, conversão de formato para compatibilidade com dispositivos próprios ou edição de áudio em softwares DAW (Digital Audio Workstation) que não suportam o formato proprietário.
Desempenho e Compatibilidade
O binário é altamente otimizado, processando arquivos individuais em menos de dois segundos. Em lotes de cem arquivos, a conversão total leva aproximadamente meio minuto. A extração é feita sem reencodificação, preservando a integridade do fluxo de áudio original.
A compatibilidade abrange as versões do cliente NetEase Cloud Music de 2.0 a 7.0 de forma integral, e mantém uma taxa de sucesso de cerca de 95% nas versões 8.0 e superiores.
Resolução de Problemas e Registro de Logs
Caso o arrastar e soltar não produza resultados, verifique se o arquivo não está corrompido e execute o main.exe como administrador. Se a conversão em lote travar, isole o arquivo problemático e processe-o individualmente.
Para ambientes corporativos ou bibliotecas extensas, implementar um sistema de logs é recomandado. O script abaixo registra o status de cada operação:
$logDirectory = "D:\Logs"
$logFileName = "ncm_decrypt_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
$logPath = Join-Path $logDirectory $logFileName
"===== Iniciando processo em $(Get-Date) =====" | Out-File -FilePath $logPath -Append
Get-ChildItem -Path "D:\Music\Library" -Filter "*.ncm" | ForEach-Object {
"Processando: $($_.FullName)" | Out-File -FilePath $logPath -Append
& ".\main.exe" $_.FullName
if ($LASTEXITCODE -eq 0) {
"Sucesso: $($_.Name) descriptografado." | Out-File -FilePath $logPath -Append
} else {
"Falha: Erro ao processar $($_.Name)." | Out-File -FilePath $logPath -Append
}
}
"===== Processo concluído em $(Get-Date) =====" | Out-File -FilePath $logPath -Append