5

here is what i have: input1.avi - video that contain sounds. input2.avi - video that doesn't contain sounds. music.mp3 - audio file.

i want to add background music(music.mp3 file) to the video.

C:\input1.avi -i C:\music.mp3 -shortest -c:v copy -c:a copy C:\output1.avi

then output1.avi is the same as input1 - movie with sounds but without the background music (music.mp3)

when i try to use the other file (video without sounds):

C:\input2.avi -i C:\music.mp3 -shortest -c:v copy -c:a copy C:\output2.avi

then output2.avi is the same as input2 + it have the background music.

so why input1 does not contain the background music??? and how can i decrease or increase the volume of music.mp3 file?

thanks.


console output:

C:\motionbee\ffmpeg\bin>ffmpeg -i C:\input.avi
-i C:\music.mp3 -shortest -c:v copy -filter_
complex "[0:a]aformat=fltp:44100:stereo[0a];[1]aformat=fltp:44100:stereo,volume=
1.5[1a];[0a][1a]amix[a]" -map 0:v -map "[a]" -ac 2 C:\output1.avi
ffmpeg version N-78949-g6f5048f Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
ibilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopenc
ore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --ena
ble-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable
-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --ena
ble-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx
264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable
-lzma --enable-decklink --enable-zlib
  libavutil      55. 19.100 / 55. 19.100
  libavcodec     57. 27.101 / 57. 27.101
  libavformat    57. 28.100 / 57. 28.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 39.100 /  6. 39.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, avi, from 'C:\input.avi':
  Metadata:
    encoder         : Lavf57.28.100
  Duration: 00:02:05.76, start: 0.000000, bitrate: 450 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 720
x480 [SAR 1:1 DAR 3:2], 440 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k
b/s
[mp3 @ 00000000005c8020] Skipping 0 bytes of junk at 32370.
Input #1, mp3, from 'C:\music.mp3':
  Metadata:
    title           : Broadcast News Package - News Intro
    artist          : After Effects News Template
  Duration: 00:01:57.89, start: 0.025057, bitrate: 194 kb/s
    Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 192 kb/s
    Metadata:
      encoder         : Lavc56.26
File 'C:\output1.avi' already exists. Overwrite
? [y/N] y
Output #0, avi, to 'C:\output1.avi':
  Metadata:
    ISFT            : Lavf57.28.100
    Stream #0:0: Video: mpeg4 (XVID / 0x44495658), yuv420p, 720x480 [SAR 1:1 DAR
 3:2], q=2-31, 440 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Stream #0:1: Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 44100 Hz, stereo
, fltp (default)
    Metadata:
      encoder         : Lavc57.27.101 libmp3lame
Stream mapping:
  Stream #0:1 (mp3) -> aformat
  Stream #1:0 (mp3) -> aformat
  Stream #0:0 -> #0:0 (copy)
  amix -> Stream #0:1 (libmp3lame)
Press [q] to stop, [?] for help
frame= 3118 fps=0.0 q=-1.0 Lsize=    6917kB time=00:02:05.76 bitrate= 450.6kbits
/s speed= 867x
video:6754kB audio:74kB subtitle:0kB other streams:0kB global headers:0kB muxing
 overhead: 1.307944%
13

When multiple streams are available, and no map is specified, ffmpeg picks one video and one audio stream from among the inputs.

Since you will likely need to re-encode audio, you can use

ffmpeg -i C:\input1.avi -i C:\music.mp3 -c:v copy \
       -filter_complex "[0:a]aformat=fltp:44100:stereo,apad[0a];[1]aformat=fltp:44100:stereo,volume=1.5[1a];[0a][1a]amerge[a]" \
       -map 0:v -map "[a]" -ac 2 C:\output1.avi
23
  • i got an error: [Parsed_amerge_1 @ 00000000001901a0] No channel layout for input 1 [Parsed_amerge_1 @ 00000000001901a0] No channel layout for input 2 [AVFilterGraph @ 000000000015dfe0] The following filters could not choose their formats: Parsed_amerge_1 Consider inserting the (a)format filter near their input or output. Error configuring complex filters. I/O error Mar 20 '16 at 6:20
  • Please paste the full console output of the command in the question.
    – Gyan
    Mar 20 '16 at 6:31
  • C:\ffmpeg\bin>ffmpeg -i C:\input.avi -i C:\music.mp3 -shortest -c:v copy -filter_ complex "[1]volume=1.5[1a];[0][1a]amerge[a]" -map 0:v -map "[a]" -ac 2 C:\output1.avi ffmpeg version N-78949-g6f5048f Copyright (c) 2000-2016 the FFmpeg developers built with gcc 5.3.0 (GCC) Mar 20 '16 at 7:02
  • libavutil 55. 19.100 / 55. 19.100 libavcodec 57. 27.101 / 57. 27.101 libavformat 57. 28.100 / 57. 28.100 libavdevice 57. 0.101 / 57. 0.101 libavfilter 6. 39.100 / 6. 39.100 libswscale 4. 0.100 / 4. 0.100 libswresample 2. 0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100 Input #0, avi, from 'C:\output.avi': Metadata: encoder : Lavf57.28.100 Duration: 00:02:05.76, start: 0.000000, bitrate: 450 kb/s Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 720 Mar 20 '16 at 7:04
  • Stream #0:0: Video: mpeg4 (Simple Profile) (XVID / 0x44495658), yuv420p, 720 x480 [SAR 1:1 DAR 3:2], 440 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 128 k b/s [mp3 @ 000000000012bc20] Skipping 0 bytes of junk at 32370. Input #1, mp3, from 'C:\motionbee\sound_tracks\After_Effects_News.mp3': Metadata: title : Broadcast News Package - News Intro artist : After Effects News Template Duration: 00:01:57.89, start: 0.025057, bitrate: 194 kb/s Mar 20 '16 at 7:04
3

I tried this command seems to be working.

ffmpeg -i audio.mp3 -i input.mp4 -filter_complex "[0:a][1:a]amerge,pan=stereo|c0<c0+c2|c1<c1+c3[out]" -map 1:v -map "[out]" -c:v copy -shortest output.mp4

Things changed :

  1. Unknown encoder 'libfdk_aac'
  2. This syntax is deprecated. Use '|' to separate the list items ('stereo|c0<c0+c2|c1<c1+c3' instead of 'stereo|c0<c0+c2:c1<c1+c3')

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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