I've been trying to add background audio to another audio file. Here is what I tried :
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)
For some reason the file generated only has the second audio file sound (i.e. audio2.m4a). Any help is appreciated.
fluent-ffmpeg doesn't mention anything about "overlaying" 2 inputs, I guess your best chance is to use a complex filter and create a down mix of the 2 audio samples.
You can either use the amix filter, which mixes multiple audio inputs into a single output, or the amerge filter, which merges two or more audio streams into a single multi-channel stream. I suggest you use the amix filter.
How to use complex filter with 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)
A more detailed answer about the filter specifically : How to overlay/downmix two audio files using ffmpeg
The docs about complexFilter() : https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#complexfilterfilters-map-set-complex-filtergraph
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With