Добавление фоновой музыки с помощью fluent-ffmpeg

Я пытался добавить фоновый звук в другой аудиофайл. Вот что я пробовал:

      const audio_urls = ['/path/audio1.m4a', '/path/audio2.m4a'];
      const file_name = 'merged_file.m4a';
      ffmpeg()
      .input(audio_urls[0])
      .input(audio_urls[1])
      .on('end', async function (output) {
        console.log(output, 'files have been merged and saved.')
      })
      .saveToFile(file_name)

По какой-то причине сгенерированный файл имеет только звук второго аудиофайла (например, audio2.m4a). Любая помощь приветствуется.


person Dhawal Patel    schedule 17.05.2020    source источник


Ответы (1)


Используйте сложный фильтр для создания понижающего микширования 2 аудиовходов

fluent-ffmpeg ничего не упоминает о "наложении" 2 входов, я думаю, ваш лучший шанс - использовать сложный фильтр и создать понижающее микширование 2 аудиосэмплов.

Вы можете использовать фильтр amix, который смешивает несколько аудиовходов в один выход, или фильтр amerge, который объединяет два или более аудиопотока в один многоканальный поток. Я предлагаю вам использовать фильтр amix.

Как использовать сложный фильтр с fluent-ffmpeg:

ffmpeg()
      .input(audio_urls[0])
      .input(audio_urls[1])
      .complexFilter([
        {
           filter : 'amix', options: { inputs : 2, duration : 'longest' }
        }
      ])
      .on('end', async function (output) {
        console.log(output, 'files have been merged and saved.')
      })
      .saveToFile(file_name)

Более подробный ответ о фильтре конкретно: Как наложить / понижающее микширование два аудиофайла с использованием ffmpeg

Документы о complexFilter (): https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#complexfilterfilters-map-set-complex-filtergraph

person Pascal Lamers    schedule 17.05.2020
comment
Спасибо @Pascal Lamers. Это сработало. Еще я хотел добавить зацикливание первого звука, поскольку оно смешивается со вторым аудиофайлом. Теперь фильтр смешивает первый звук только один раз. Я попробовал другой фильтр под названием 'aloop' и соответственно изменил сложный фильтр на '' .complexFilter ([{filter: 'aloop', options: {loop: -1}}, {filter: 'amix', options: { входы: 2, продолжительность: 'самая длинная'}}]) ``. Но это приводит к следующей ошибке. Не удается найти соответствующий поток для немаркированной входной панели 1 в фильтре Parsed_amix_1. - person Dhawal Patel; 17.05.2020
comment
Искал решение, но ничего полезного не нашел. Возможно, для вашей операции потребуется 2 шага, сначала цикл, а затем смешивание. Возможно, этот ответ поможет вам в цикле https://stackoverflow.com/questions/5930296/adding-repeated-background-audio-with-ffmpeg - person Pascal Lamers; 18.05.2020
comment
Лучше сначала найти решение, используя простые команды ffmpeg, а затем перевести его в код fluent-ffmpeg - person Pascal Lamers; 18.05.2020