You need to enable JavaScript to run this app. 如何在discord.js的JS文件中执行终端命令实现录音处理自动化
优惠活动
大模型
产品
解决方案
定价
更多

如何在discord.js的JS文件中执行终端命令实现录音处理自动化

实现方案

直接用Node.js内置的child_process模块即可在代码中调用终端命令,完全自动化整个流程,无需手动操作。

具体实现步骤

  1. 首先在你的机器人主代码顶部导入子进程模块:
const { exec } = require('child_process');
// 如果需要实时输出命令执行日志,也可以使用spawn替代exec
  1. 修改!stoprecording指令的处理逻辑,在断开语音连接的代码之后,依次执行合并、转码命令:
// 原有断开语音连接的逻辑
// ...

// 第一步:执行merge.js合并零散PCM文件
exec('node merge.js', (mergeErr, mergeStdout, mergeStderr) => {
  if (mergeErr) {
    console.error('合并文件失败:', mergeErr);
    return;
  }
  if (mergeStderr) {
    console.error('合并过程警告:', mergeStderr);
  }
  console.log('文件合并完成,开始转码MP3');

  // 第二步:执行FFMPEG转码,请把命令参数替换为你实际使用的配置
  // 示例参数说明:-f 输入格式 -ar 采样率 -ac 声道数,要和你录音的参数完全一致
  const ffmpegCmd = 'ffmpeg -f s16le -ar 48k -ac 2 -i merged.pcm final_output.mp3';
  exec(ffmpegCmd, (ffmpegErr, ffmpegStdout, ffmpegStderr) => {
    if (ffmpegErr) {
      console.error('FFMPEG转码失败:', ffmpegErr);
      return;
    }
    if (ffmpegStderr) {
      console.error('转码过程警告:', ffmpegStderr);
    }
    console.log('MP3文件生成完成');
    // 这里可以加后续逻辑,比如发送MP3文件到频道、删除临时文件等
  });
});

注意事项

  • 命令执行是异步操作,必须等待上一个命令执行完成后再触发下一个,避免合并未完成就执行转码导致生成的文件损坏
  • 注意路径问题,建议所有文件路径都使用绝对路径,避免工作目录不一致导致找不到文件的问题
  • FFMPEG的输入参数必须和你录音生成的PCM参数完全匹配,否则会出现声音变调、杂音等问题
  • 如果想要更高的执行效率,可以直接把merge.js中的合并逻辑作为模块导入到机器人代码中直接调用,省去子进程调用的开销

内容的提问来源于stack exchange,提问作者Shreyas007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:54:01