好友
阅读权限10
听众
最后登录1970-1-1
|
完整项目地址:https://gitee.com/pmhw/bnk/tree/master
支持游戏内置 .bnk 音频转换可以播放的音频,其它格式文件 请修改源代码 · 理论支持所有游戏音频格式文件,本文拿《永劫无间》举例
用到的技术栈 nodejs 上手还是比较快的 后续再写一个python原生版本的
因为主要调用的是第三方插件的 cmd 命令所以选择nodejs
一、具体思路:
开始想用 ww2ogg.exe 和 revorb.exe ww2ogg 转换wem 然后 revorb 修复
然后 ffmpeg 转换 wem 为音频格式 但是奈何ffmpeg 太臃肿了 300多mb 果断放弃
使用现成的 vgmstream
vgm 用于播放视频游戏中使用的数百种流式(预录)音频格式的库 官网:https://vgmstream.org/
二、直接上代码:
[JavaScript] 纯文本查看 复制代码 const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
child_process
[JavaScript] 纯文本查看 复制代码 // 配置工具路径
const vgmstreamW64 = path.join(__dirname, 'plugin', 'vgmstream-win64', 'vgmstream-cli.exe');
// 配置工作目录
const bnkDirectory = path.join(__dirname, 'bnks'); // .bnk 文件所在目录
const outputDirectory = path.join(__dirname, 'ext'); // 输出目录
[JavaScript] 纯文本查看 复制代码
// 迁移到ext文件
function extractWemFiles(bnkFile) {
const data = fs.readFileSync(bnkFile);
// 假设文件的第 128 字节后是音频数据(具体需根据 .bnk 格式调整)
// const wemDataOffset = 128;
// const wemData = data.slice(wemDataOffset);
// 保存全部data
// 保存为临时 .wem 文件
const wemFilePath = path.join(outputDirectory, `${path.basename(bnkFile, '.bnk')}.bnk`);
fs.writeFileSync(wemFilePath, data);
return wemFilePath;
}
// 将 .wem 转换为 .ogg 的方法
function convertWemToOgg(wemFile) {
// console.log(wemFile)
// 执行 ww2ogg 转换
exec(`"${vgmstreamW64}" "${wemFile}"`, (err, stdout, stderr) => {
if (err) {
console.error(`转换失败: ${stderr}`);
return;
}
fs.unlinkSync(wemFile)
console.log(`转换成功:${wemFile}`)
});
}
// 主函数:处理目录中的所有 .bnk 文件
function processBnkFiles() {
// 检查并创建输出目录
if (!fs.existsSync(outputDirectory)) {
fs.mkdirSync(outputDirectory);
}
// 遍历目录中的所有 .bnk 文件
const bnkFiles = fs.readdirSync(bnkDirectory).filter(file => file.endsWith('.bnk'));
if (bnkFiles.length === 0) {
console.error('未找到任何 .bnk 文件!');
return;
}
bnkFiles.forEach(file => {
const bnkFilePath = path.join(bnkDirectory, file);
const wemFile = extractWemFiles(bnkFilePath);
convertWemToOgg(wemFile);
});
}
// 启动程序
processBnkFiles();
具体以永劫无间为例:
以永劫无间为例,首先找到
.bnk 游戏音乐文件存放位置 D:\Naraka\program\NarakaBladepoint_Data\StreamingAssets\Audio\GeneratedSoundBanks\Windows\Chinese(CN)
直接检索 哈迪(hadi)
殷紫萍:zipingyin武田信忠:takeda顾清寒:justinagu胡桃:kurumi迦南:matari季沧海火男:tarka特木尔风男:temulch天海和尚:tenkai崔三娘:valda宁红叶:viper无尘:wuchen妖刀:yotohime岳山:yueshan哈迪:hadi
全选复制到程序 bnks 目录
然后运行 终端 node bnk.js
至此转换成可以播放的音频文件,其他格式文件(非 .bnk)请自行修改代码
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|