Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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.

share|improve this question

migrated from stackoverflow.com Apr 25 '13 at 10:34

This question came from our site for professional and enthusiast programmers.

add comment

3 Answers 3

up vote 5 down vote accepted

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

If you have five input files, use n=5.

share|improve this answer
    
Sorry for accepting the answer so late. :D –  Manu Jun 22 '13 at 19:08
add comment

The FFmpeg wiki mentions using the concat protocol is not possible with all file types. It works fine with most MPEG containers and bitstreams, but obviously not WAV files with PCM audio.

You don't necessarily have to create a temporary file and use that. With Bash (or other shells that support process substitution), you can do everything in a single command:

ffmpeg -f concat -i <( for f in *.wav; do echo "file '$(pwd)/$f'"; done ) output.wav

The process substitution <( ) creates a file—or, to be precise, a file descriptor—on the fly, which ffmpeg can read. This file will contain the path to every .wav file in the current directory. We have to prefix it with $(pwd) to get the correct path relative to your current directory, and not relative to the file descriptor.

Of course, the command within the substitution can be changed to something else.

share|improve this answer
add comment

You could use shntools for wav-files.

shnjoin 01.wav 02.wav ...
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.