The following filters could not choose their formats: Parsed_amerge_5 Consider inserting the (a)format filter near their input or output in FFmpeg

I mixed in volume levelling in my amerge command.

ffmpeg -i adele.mp3 -i ruby.mp4 -filter_complex \
"[0:a]aformat=sample_fmts=s16:channel_layouts=stereo,volume=0.390625[a1];
 [1:a]aformat=sample_fmts=s16:channel_layouts=stereo,aresample=44100,volume=0.781250[a2];
 [a1][a2]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
 -map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4

But there's an error so it couldn't be created.

ffmpeg version N-60332-ga0d5204 Copyright (c) 2000-2014 the FFmpeg developers
  built on Feb  4 2014 21:31:51 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.101 / 55. 49.101
  libavformat    55. 29.101 / 55. 29.101
  libavdevice    55.  7.100 / 55.  7.100
  libavfilter     4.  1.102 /  4.  1.102
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mp3, from 'adele.mp3':
  Metadata:
    title           : Chasing Pavements
    artist          : Adele
    track           : 3
    album           : 19 (Deluxe Edition)
    date            : 2008
  Duration: 00:03:30.55, start: 0.025056, bitrate: 160 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 159 kb/s
    Stream #0:1: Video: mjpeg, yuvj420p(pc), 600x600 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
    Metadata:
      title           : 
      comment         : Other
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'Ruby on Rails 101- What is Ruby on Rails_.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2013-12-21 07:56:20
  Duration: 00:05:42.40, start: 0.000000, bitrate: 1214 kb/s
    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1020 kb/s, 30 fps, 30 tbr, 60 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #1:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
    Metadata:
      creation_time   : 2013-12-21 07:56:23
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
[Parsed_pan_6 @ 0x7fc8a1c0d360] This syntax is deprecated. Use '|' to separate the list items.
File 'output.mp4' already exists. Overwrite ? [y/N] y
[Parsed_amerge_5 @ 0x7fc8a1c36f60] No channel layout for input 1
    Last message repeated 1 times
[AVFilterGraph @ 0x7fc8a1e00ae0] The following filters could not choose their formats: Parsed_amerge_5
Consider inserting the (a)format filter near their input or output.

I followed the rules, particularly both inputs must have the same format and more.

I am not also familiar with the error message bec. it's my first time to encounter it.


Apparently it's pickier than I thought, so I was more explicit with the aformat audio filter this time. This should work for you, but I did not test it extensively:

ffmpeg -i music.mp3 -i videowithaudio.mp4 -filter_complex \
"[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1]; \
 [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.8[a2]; \
 [a1][a2]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4

Continued from: Simplify FFmpeg amerge and volume customization.


Just to add another example, here's how I applied aformat to hook up amerge with volume filters that apparently don't declare the output stream channel layout early enough for amerge to figure out what to do.

The purpose of the command is to produce a simple left/right/both stereo speaker test file. It is encoded as MP3 using LAME on lowest VBR quality.

The command has been edited for readability; be sure to add \ or ^ for line continuation according to your CLI's requirements.

ffmpeg -v debug -i mikro128.mp3
 -filter_complex
 "[0:a] channelsplit [l] [r];
  [l]volume='if(between(t,1,2),0.1, 1)':eval=frame [l2];
  [r]volume='if(     gt(t,1),  1, 0.1)':eval=frame [r2];
  [l2] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [l3];
  [r2] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [r3];
  [l3][r3] amerge=inputs=2,pan=stereo|c0=FL|c1=FR [out]"
 -map "[out]"
 -c:a libmp3lame -q:a 9 "links, rechts, beide.mp3"

The amerge/pan part can be simplified in this case:

  [l3][r3] amerge [out]"

By the way, I find the FFmpeg -v debug output is actually helpful to the end user in order to figure out what goes on, given that the FFmpeg user is usually a tech guy.