With ffmpeg, I see how to add music file as background for a video, but the problem is how to make the audio loop/repeat. Is there a way out?
-
I don't think so. I think you'll have to generate your looping audio track offline before combining it with the video – rupello Jun 11 '11 at 00:08
-
Option -stream_loop for ffmpeg exists since dbb03b8e, as per https://trac.ffmpeg.org/ticket/2584 – jamadagni May 23 '18 at 13:48
2 Answers
ffmpeg
has the promising -loop_input
flag, but it doesn't support audio inputs yet.
I'd recommend sox
and the -shortest
option for ffmpeg
as a solution.
sox short_audio.mp3 looped_audio.mp3 repeat 1000 # adjust count as necessary
ffmpeg -i input_video.mp4 -i looped_audio.mp3 -shortest output_video.mp4
The sox command will loop the input, and the ffmpeg command will use it for the audio, but stop when it runs out of video to process.

- 33,069
- 21
- 98
- 152
-
6`-i` parameter is deprecated in sox. Is is properly to use `-e ima-adpcm` instead. – Ivan Kochurkin Mar 08 '13 at 20:51
-
@blahdiblah can you tell me what is short_audio.mp3 and what is looped_audio.mp3 from my thinking short_audio.mp3 is **input path** from local and looped_audio.mp3 is **out put file** to stored looped sound then after later looped_audio.mp3 will be use to merge video am i right ? – ND1010_ Mar 01 '18 at 05:09
-
-
1
-
Please note that for large files, this process will be very slow. You can use -c:v copy to stream copy (mux) the video. No re-encoding of the video occurs. Quality is preserved and the process is fast. [For more details, see @llogan 's answer on https://stackoverflow.com/questions/11779490/how-to-add-a-new-audio-not-mixing-into-a-video-using-ffmpeg] – iamakhilverma Jan 10 '22 at 12:03
I ran into the same problem and managed to do it by using ffmpeg and concat[enate] filter. Here is an example of how to loop it three times:
ffmpeg -i audio.wav -filter_complex "[0:a]afifo[a0];[0:a]afifo[a1];[0:a]afifo[a2];[a0][a1][a2]concat=n=3:v=0:a=1[a]" -map "[a]" out.wav
Edited (23/12/2020)
In addition to the above, another super easy 2 methods :
1st method : with audio output SIZE defined.
meaning : it will repeat / concatenate "MyAudio.mp3" till it reaches size of 10M and stop ( you will need to calculate end size yourself )
ffmpeg -stream_loop -1 -i "MyAudio.mp3" -fs 10M -c copy "MyRepeatingAudio.mp4"
2nd method : with NO output SIZE defined ( you will need to stop process, CTRL+C once it reaches required size
ffmpeg -stream_loop -1 -i "MyAudio.mp3" -c copy "MyRepeatingAudio.mp4"
Please note that above methods are also for REPEATING VIDEOS
3rd-party edit (15/09/2021)
This command adds repeating audio to a video in a single step:
ffmpeg -i input.mp4 -stream_loop -1 -i audio.mp4 -shortest \
-map 0:v:0 -map 1:a:0 -c:v copy output.mp4

- 7,819
- 3
- 38
- 38

- 822
- 8
- 15
-
7
-
@Mulvya, thanks. Unfortunately, it doesn't work for me. I'm using the latest static linked build of ffmpeg for Windows and when I try the command you shared it gives me: [auto-inserted resampler 0 @ 00000000025fc0a0] Channel layout change is not supported Error while filtering: Not yet implemented in FFmpeg, patches welcome – nanestev Jun 09 '16 at 09:52
-
-
-
-
-
See here, you can use asplit: https://ffmpeg.org/ffmpeg-filters.html#Examples-120 `[in] asplit=3 [out0][out1][out2]` – M3D Aug 06 '17 at 22:57
-
@nanestev excellent command. This was the only thing I could get to work in a complex ffmpeg command (and I tried a lot) to merge various video's with repeated audio. For some reason the `loop` (and `aloop`) commands were not working for me. For anyone reading this, note that you can add the filter_complex string at the end of an existing video-merging filter_complex string simply separating it with a semicolon. i.e. `-filter_complex "....your_existing_filter_complex...;[0:a]afifo[a0]; ... etc"`. Thanks again. – Roel Van de Paar May 31 '19 at 02:14
-
And (thank you!) this made me realize there is another better way still, which also seems to avoid some "[out_0_1 @ 0x55f6ec424340] 10000 buffers queued in out_0_1, something may be wrong." ffmpeg errors with the above command, and you can do it like this; specify multiple audio inputs, then merge them, i.e. `ffmpeg -i audio.mp3 -i audio.mp3 -i video1.mp4 -i video2.mp4 -filter_complex "[2:v][3:v]concat=n=2:v=1:a=0[v];[0:a][1:a]concat=n=2:v=0:a=1[a]" -shortest -map "[v]" -map '[a]' "out.mp4"` - just make sure enough audio is there to cover the video! Enjoy! – Roel Van de Paar May 31 '19 at 02:19
-
Hrm. -shortest does not work in this case. See long standing bug: https://trac.ffmpeg.org/ticket/3789 – Roel Van de Paar May 31 '19 at 02:53