[FFmpeg-user] Forced upmixing scheme with no way to disable

Paul B Mahol onemda at gmail.com
Fri Jun 24 00:24:42 EEST 2022


On Thu, Jun 23, 2022 at 10:30 PM Jeremy F <advanced4 at gmail.com> wrote:

> Unfortunately due to platform limitations, AAC is the only
> mutli-channel audio codec supported in my use case. However, I do not see,
> at a glance, where the AAC specification mandates that if there are 6
> channels, that channel 4 must be a 128hz LFE channel. AAC also supports the
> 6.0 channel layout for example, which does not include LFE. Ffmpeg appears
> to be making assumptions at channel layout, as well as doing corresponding
> upmixing schemes, with no way to override or disable. This is does not
> appear to be an AAC problem
>

Then use join filter instead of amerge and specify 6.0 layout,

Good luck.

>
> On Thu, Jun 23, 2022 at 4:04 PM Paul B Mahol <onemda at gmail.com> wrote:
>
> > On Thu, Jun 23, 2022 at 8:43 PM Jeremy F <advanced4 at gmail.com> wrote:
> >
> > > That's what I thought! However, here are some commands showing this. I
> > set
> > > the lowpass to be 10khz on channel4 just to prevent any confusion (it
> > > should clearly _not_ sound like any kind of real low pass filter). With
> > an
> > > input of "vid.mp4" that has standard stereo, run the following:
> > >
> > > ffmpeg -i vid.mp4 -err_detect ignore_err -filter_complex
> > >
> > >
> >
> "[0:a]channelsplit[left][right];[left]asplit=3[l1][l2][l3];[l1]aecho=1.0:0.7:25|60:0.5|0.3[l1];[l2]lowpass=f=550[l2];[l3]adelay=1,aecho=1.0:0.7:25|60:0.5|0.3[l3];[right]asplit=3[r1][r2][r3];[r1]aecho=1.0:0.7:25|60:0.5|0.3[r1];[r2]lowpass=f=10000[r2];[r3]adelay=1,aecho=1.0:0.7:25|60:0.5|0.3[r3];[l1][r1][l2][r2][l3][r3]amerge=inputs=6[a]"
> > > -map 0:v -map [a] -acodec aac -c:v copy vid1.mp4
> > >
> > > Then to extract channel 4 (since its zero based it's labeled 3):
> > >
> > > ffmpeg -i vid1.mp4 -map_channel 0.1.3 ch4.mp3
> > >
> > > ch4.mp3 will be a 128hz lowpass filtered version of the audio, despite
> me
> > > never specifying that.
> > >
> > >
> > Stop transcoding to aac.
> >
> >
> >
> > >
> > > On Thu, Jun 23, 2022 at 1:48 PM Paul B Mahol <onemda at gmail.com> wrote:
> > >
> > > > On Thu, Jun 23, 2022 at 7:09 PM Jeremy F <advanced4 at gmail.com>
> wrote:
> > > >
> > > > > A more succinct way of putting it: if I channelsplit (or any other
> > type
> > > > of
> > > > > upmixing as far as I'm aware) into 6 channels, channel 4 always
> has a
> > > > 128hz
> > > > > low pass filter applied to it. I do not want this
> > > > >
> > > > > My particular use case is I play a game that supports multi-channel
> > > live
> > > > > audio streams, but no filters on any audio. So I apply filters
> myself
> > > and
> > > > > position them as appropriate in the game (i.e. a reverb/echo effect
> > in
> > > a
> > > > > hallway, a 550hz lowpass outside the main area, etc.). More
> > generally,
> > > > > ffmpeg should allow me to apply any effect to any channel, but it
> > would
> > > > > appear ffmpeg sees me using 6 channels, and decides to use the
> > default
> > > > > 5.1(side) upmixing scheme. I could find little documentation on
> this
> > > > > behaviour, but this page very briefly mentions this behaviour about
> > > > halfway
> > > > > down https://trac.ffmpeg.org/wiki/AudioChannelManipulation
> > > > >
> > > > > Also my provided command was a bit verbose. I could simply
> > channelsplit
> > > > L &
> > > > > R into 3 channels each without any modification to any individual
> > > > channels.
> > > > > All channels will be duplicates of its original L or R channel, but
> > > > channel
> > > > > 4 will have a 128hz low pass on it.
> > > > >
> > > >
> > > > That directly contradicts with reality.
> > > >
> > > > FFmpeg never applies lowpass to LFE channels, unless you call lowpass
> > > > filter or similar filter on it.
> > > >
> > > >
> > > > >
> > > > > On Thu, Jun 23, 2022 at 12:55 PM Paul B Mahol <onemda at gmail.com>
> > > wrote:
> > > > >
> > > > > > On Thu, Jun 23, 2022 at 6:45 PM Jeremy F <advanced4 at gmail.com>
> > > wrote:
> > > > > >
> > > > > > > Hi I'm probably using ffmpeg in an edge-case way, but I simply
> > want
> > > > to
> > > > > > take
> > > > > > > 2 channels/stereo, and end up with 6 channels of audio, where I
> > can
> > > > > > > apply/modify/filter each channel as I please. And I figured out
> > the
> > > > > > ffmpeg
> > > > > > > magic to do this, but along my dive into this it appears that
> no
> > > > matter
> > > > > > the
> > > > > > > method used to upmix (of which there are many such as "-ac 6",
> > > > > "asplit",
> > > > > > > "pan", "channelsplit") it appears no matter what, I'm forced to
> > use
> > > > the
> > > > > > > upmixing scheme that always sets channel 4 to a lowpass filter
> of
> > > > > 128hz,
> > > > > > > rendering it useless for my case.
> > > > > > >
> > > > > > > There doesn't appear to be a way to disable this that I can
> find,
> > > and
> > > > > it
> > > > > > > seems like there should be
> > > > > > >
> > > > > > > My current command I'm using, which works great except for
> > channel
> > > 4
> > > > > > > (labeled r2 in here). No matter what filter I apply, it always
> > ends
> > > > up
> > > > > > > being a lowpass of 128.
> > > > > > >
> > > > > > > -err_detect ignore_err -filter_complex
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> [0:a]channelsplit[left][right];[left]asplit=3[l1][l2][l3];[l1]aecho=1.0:0.7:25|60:0.5|0.3[l1];[l2]lowpass=f=550[l2];[l3]adelay=1,aecho=1.0:0.7:25|60:0.5|0.3[l3];[right]asplit=3[r1][r2][r3];[r1]aecho=1.0:0.7:25|60:0.5|0.3[r1];[r2]lowpass=f=550[r2];[r3]adelay=1,aecho=1.0:0.7:25|60:0.5|0.3[r3];[l1][r1][l2][r2][l3][r3]amerge=inputs=6[a]
> > > > > > > -map 0:v -map [a] -acodec aac -c:v copy
> > > > > > >
> > > > > > >
> > > > > > > The code, at a glance, seems to corroborate this, but it's a
> bit
> > > > beyond
> > > > > > my
> > > > > > > depth to do anything further (and I don't want to compile /
> make
> > a
> > > > > custom
> > > > > > > version of ffmpeg)
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://github.com/FFmpeg/FFmpeg/blob/9aa20d28cdda0dcaa4daa2848670a6530c6ba26a/libavfilter/af_surround.c
> > > > > > >
> > > > > > > So, if possible, how can I disabled the upmixing scheme?
> > > > > > >
> > > > > >
> > > > > > The surround filter have nothing to do with that filtergraph
> above.
> > > > > >
> > > > > > And I really failed to understand what you are trying to do.
> > > > > >
> > > > > >
> > > > > >
> > > > > > > Thanks!
> > > > > > > --
> > > > > > > Sincerely,
> > > > > > >
> > > > > > > Jeremy
> > > > > > > _______________________________________________
> > > > > > > ffmpeg-user mailing list
> > > > > > > ffmpeg-user at ffmpeg.org
> > > > > > > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> > > > > > >
> > > > > > > To unsubscribe, visit link above, or email
> > > > > > > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> > > > > > >
> > > > > > _______________________________________________
> > > > > > ffmpeg-user mailing list
> > > > > > ffmpeg-user at ffmpeg.org
> > > > > > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> > > > > >
> > > > > > To unsubscribe, visit link above, or email
> > > > > > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> > > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Sincerely,
> > > > >
> > > > > Jeremy
> > > > > _______________________________________________
> > > > > ffmpeg-user mailing list
> > > > > ffmpeg-user at ffmpeg.org
> > > > > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> > > > >
> > > > > To unsubscribe, visit link above, or email
> > > > > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> > > > >
> > > > _______________________________________________
> > > > ffmpeg-user mailing list
> > > > ffmpeg-user at ffmpeg.org
> > > > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> > > >
> > > > To unsubscribe, visit link above, or email
> > > > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> > > >
> > >
> > >
> > > --
> > > Sincerely,
> > >
> > > Jeremy
> > > _______________________________________________
> > > ffmpeg-user mailing list
> > > ffmpeg-user at ffmpeg.org
> > > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> > >
> > > To unsubscribe, visit link above, or email
> > > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> > >
> > _______________________________________________
> > ffmpeg-user mailing list
> > ffmpeg-user at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-user
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
> >
>
>
> --
> Sincerely,
>
> Jeremy
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-user mailing list