Concatenate multiple WAV files using single command, without extra file
I want to concatenate multiple WAV files into a single WAV file using FFMPEG.
I have used the following command and it generates the required file.
Command:
ffmpeg -f concat -i mylist.txt -c copy output.wav
File :
#mylist.txt
file '1.wav'
file '2.wav'
file '3.wav'
file '4.wav'
But as you can see the problem is that I have to create a text file to specify the list of WAV files to concatenate.
I can do all these tasks, but I would prefer a single command something that looks like
ffmpeg -i 1.wav -i 2.wav -i 3.wav -i 4.wav output.wav
or
ffmpeg -i "concat:1.wav|2.wav|3.wav|4.wav" -c copy output.wav
I have tried these two simple commands but they return just the voice of 1.wav
Please help me write a single command( or correct the above 2 commands ) that achieves the desired result.
Please don't suggest other Media Encoders/Editors, I want to use FFMPEG only, as it is already installed and used at other places.
Solution 1:
You could try using the concat filter; it requires re-encoding, and so will take more system resources (a pretty tiny amount on any vaguely modern computer in this particular case), but PCM -> PCM audio should be mathematically lossless. In your case, you would use something like:
ffmpeg -i input1.wav -i input2.wav -i input3.wav -i input4.wav \
-filter_complex '[0:0][1:0][2:0][3:0]concat=n=4:v=0:a=1[out]' \
-map '[out]' output.wav
For example if you have five input files, use n=5
and add [4:0]
.
Solution 2:
I think the best option for wav is to use sox, not ffmpeg:
$ sox short1.wav short2.wav short3.wav long.wav
Solution comes from How do I append a bunch of .wav files while retaining (not-zero-padded) numeric ordering?