首页 > 解决方案 > fluent-ffmpeg 使用复杂过滤器设置音频电平

问题描述

我希望将 2 个音频与 ffmpeg-fluent 混合,下面是用于此目的的代码。

ffmpeg()
  .input(audio1)
  .input(audio2)
  .complexFilter([
    {
      filter: 'amix', options: { inputs: 2, duration: 'shortest' }
    }
  ])
  .on('end', async function (output) {
    console.log(output, 'files have been merged and saved.')
  })
  .saveToFile("mix.mp3");

现在我还想独立设置每个轨道的音频级别,尝试将音量作为音频过滤器传递,但是当使用复杂过滤器时它似乎不接受音频过滤器。

标签: ffmpegfluent-ffmpeg

解决方案


我知道这个帖子有几个月的历史了,但我想我仍然会回答它,因为我找到了如何去做,如果有人像我一样找到这个帖子,他们就会有答案。

const command = new FfmpegCommand();
    //create audio file with voice and engine sound under.
    await command
    .addInput(inputFilePath)
    .addInput('./audio/utility/RB16BengineOnboard.mp3').seekInput(40)
    .complexFilter([{
      filter: 'volume',
      options: ['1.0'],
      inputs: "0:0",
      outputs: "[s1]"
    },
    {
      filter: 'volume',
      options: ['0.15'],
      inputs: "1:0",
      outputs: "[s2]"
    },
    {
      filter: 'amix',
      inputs: ["[s1]","[s2]"],
      options: ['duration=first','dropout_transition=0']
    }]).output('./audio/temp/overlayed.mp3').on('error', function(err) {
      console.log(err);
    })
    .on('end', function() {
      console.log('Amixed audio files together.');
    })
    .run();

对于输入:“0:0”第一个 0 代表第一个 addInput 文件 a,第二个 0 代表该文件的音轨。如此处所述: this thread about ffmpeg audio files

代码的其余部分是非常自我解释的,因为它是音量,输出命名该过滤器的输出,因此它可以稍后在代码中用作 amix 过滤器的输入。


推荐阅读