[FFmpeg-trac] #8066(avcodec:open): Bad quality encoding of high compressed audio by AAC encoder

FFmpeg trac at avcodec.org
Tue May 5 14:43:03 EEST 2020


#8066: Bad quality encoding of high compressed audio by AAC encoder
------------------------------------+-----------------------------------
             Reporter:  Lirk        |                    Owner:  Lynne
                 Type:  defect      |                   Status:  open
             Priority:  normal      |                Component:  avcodec
              Version:  git-master  |               Resolution:
             Keywords:  aac         |               Blocked By:
             Blocking:              |  Reproduced by developer:  1
Analyzed by developer:  1           |
------------------------------------+-----------------------------------

Comment (by marcan):

 While cascading is certainly not the ultimate encoder test, I disagree
 with the premise that it isn't a good idea because you can "cheat".
 Allowing sideband data is a silly idea for this test; you'd do it by going
 through a pipeline where the only thing between repeated encodings is
 plain PCM.

 Repeated encodes can bring out artifacts and problems which are harder to
 discern in a single encode. Additionally, single-digit number of
 transcodes are a thing in valid use cases, and something worth optimizing
 for. An encoder that produces 10% better quality than another encoder at a
 single encode, but 40% worse quality after 2 encodes, is an inferior
 encoder for a lot of practical use cases (and if that tradeoff really must
 be made, that should be a configurable option so both use cases are
 covered).

 For what it's worth, libfdk_aac seems to be exceptionally stable. At 100
 repeat encodes at 128kbps, it still produces listenable output, with
 somewhat patchy high frequency bands but otherwise no added distortion nor
 level changes. I would subjectively rate it on par with ffmpeg-aac after
 just 6 transcodes. At that point ffmpeg-aac has more high frequency
 content, but also has more audible *added* noise/artifacts. Those add up
 to complete destruction by the time you get to 100 transcodes. Sure, 100
 transcodes is a silly use case, but the results still sound like they
 should lead to some insight as to how to improve the encoder.

 Also, consider that already encoded audio is perfectly valid PCM after
 decoding, and a useful sample to test encoding on. While there are
 subtleties regarding whether an encoder encoding its own output would have
 an advantage vs encoding another encoder's output (or another dodec's
 entirely), this is still not a test to be dismissed on the face of it.
 This whole thing started for me because a practical MP3 (256k) -> ffmpeg-
 aac (320kbps) -> ffmpeg-aac (320kbps) pipeline had noticeably worse
 artifacts than replacing just the last step with libfdk_aac at the same
 bitrate, or even at 128kbps. I posit that 320kbps should be effectively
 transparent for essentially all samples, and should remain so even after a
 few transcodes. The sample that started this all is not transparent for me
 after just 2 rounds of ffmpeg-aac at 320kbps (>99% confidence), but is
 after 100 rounds of libfdk_aac at the same bitrate.

 Just to add some relevant references:
 - ffmpeg-aac vs libfdk_aac listening tests:
 https://hydrogenaud.io/index.php?topic=111085.0
 - A few user reactions to quality improvements after switching from ffmpeg
 to CoreAudio in the comments: https://obsproject.com/forum/resources/obs-
 studio-enable-coreaudio-aac-encoder-windows.220/

 (meta: I "recruited an army on twitter" because last time I raised an
 issue about this I was effectively ignored/dismissed as crazy and
 imagining artifacts, and this time, before making the twitter thread, I
 was linked to this ticket by another user, where I saw that the immediate
 response from a developer in comments 1 and 3 was dismissive, rude, and
 outright had not paid attention to what the user who opened the ticket had
 actually said; this was followed by the ticket being closed NEEDINFO by
 another person with no further explanation or request for info, even
 though the original user who opened it attempted to calmly clarify what
 the problem was. I started the Twitter thread after seeing this; then I
 had a request for info from @ffmpeg, which I did provide (after
 considering for a while whether I really should be spending more of my
 time on this), and this was followed by more rude responses aimed at me
 from yet another ffmpeg developer. If ffmpeg developers expect users to
 "file a bug or ping a developer", I would recommend reacting politely and
 listening when users do exactly that, and perhaps consider whether keeping
 certain developers around who alienate users is a net benefit for the
 project. I am happy to provide samples and perform listening tests if they
 are going to be taken seriously, but so far that hasn't happened and I'd
 like some reassurance that they will before I waste more of my time on
 this.)

--
Ticket URL: <https://trac.ffmpeg.org/ticket/8066#comment:13>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list