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

Jeremy F advanced4 at gmail.com
Thu Jun 23 23:29:27 EEST 2022


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

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


More information about the ffmpeg-user mailing list