[FFmpeg-trac] #10741(avcodec:new): aac_at quality only settable with q:a, not global_quality:a

FFmpeg trac at avcodec.org
Tue Dec 19 03:00:05 EET 2023


#10741: aac_at quality only settable with q:a, not global_quality:a
-------------------------------------+-------------------------------------
             Reporter:  Brandon R    |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  avcodec      |                  Version:  6.0
             Keywords:  AAC          |               Blocked By:
  Audiotoolbox                       |
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 **Summary of the bug**:

 ''Expected behavior'': According to the
 [https://trac.ffmpeg.org/wiki/Encode/AAC#aac_at docs] and
 [https://github.com/FFmpeg/FFmpeg/blob/f009f849617ab0c2015d2a748892d55b37d378c0/libavcodec/audiotoolboxenc.c#L597C19-L597C49
 source], when `-aac_at_mode` is not specified, the encoder defaults to VBR
 if audio quality is specified, which is done using `-global_quality:a`.

 ''Observed behavior'': `-global_quality:a` doesn't have any affect on mode
 or bitrate. When mode is not specified, the output is identical to using
 `aac_at` without providing any parameters, which I believe is 128 kb/s
 CBR. When the mode is explicitly set to VBR, VBR is used but
 `-global_quality:a` doesn't affect the bitrate.

 However, `-q:a` has the effect that `-global_quality:a` is supposed to
 have.

 **How to reproduce**:

 No mode specified, global quality 4 -> `bitrate= 130.7kbits/s` (same as
 `ffmpeg -i i.wav -c:a aac_at o.m4a`):
 {{{
 $ ffmpeg -i In.wav -c:a aac_at -global_quality:a 4 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     227kB time=00:00:14.23 bitrate= 130.7kbits/s speed=45.3x
 video:0kB audio:224kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 1.424740%
 }}}

 No mode specified, global quality 10 -> `bitrate= 130.7kbits/s` (no
 change):

 {{{
 $ ffmpeg -i In.wav -c:a aac_at -global_quality:a 10 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     227kB time=00:00:14.23 bitrate= 130.7kbits/s speed=  50x
 video:0kB audio:224kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 1.424740%
 }}}

 VBR specified, global quality 4 -> `bitrate= 360.6kbits/s` (same as when
 `-aac_at_mode vbr` is used without specifying quality):
 {{{
 $ ffmpeg -i In.wav -c:a aac_at -aac_at_mode vbr -global_quality:a 4
 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     627kB time=00:00:14.23 bitrate= 360.6kbits/s speed=44.1x
 video:0kB audio:623kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.511802%
 }}}

 VBR specified, global quality 10 -> `bitrate= 360.6kbits/s` (no change)

 {{{
 $ ffmpeg -i In.wav -c:a aac_at -aac_at_mode vbr -global_quality:a 10
 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     627kB time=00:00:14.23 bitrate= 360.6kbits/s speed=35.8x
 video:0kB audio:623kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.511802%
 }}}

 Using `-q:a` instead of `-global_quality:a`, with or without `-aac_at_mode
 vbr`, results in VBR outputs with different bitrates. For example:
 {{{
 $ ffmpeg -i In.wav -c:a aac_at -aac_at_mode vbr -q:a 4 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     307kB time=00:00:14.23 bitrate= 176.7kbits/s speed=41.4x
 video:0kB audio:304kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 1.050192%
 }}}
 {{{
 $ ffmpeg -i In.wav -c:a aac_at -q:a 10 Out.m4a
 ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.0.40.1)
   configuration: --prefix=/usr/local/Cellar/ffmpeg/6.0_2 --enable-shared
 --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-
 ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl
 --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d
 --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e
 --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt
 --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-
 libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-
 libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-
 libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype
 --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr
 --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
 --enable-videotoolbox --enable-audiotoolbox
   libavutil      58.  2.100 / 58.  2.100
   libavcodec     60.  3.100 / 60.  3.100
   libavformat    60.  3.100 / 60.  3.100
   libavdevice    60.  1.100 / 60.  1.100
   libavfilter     9.  3.100 /  9.  3.100
   libswscale      7.  1.100 /  7.  1.100
   libswresample   4. 10.100 /  4. 10.100
   libpostproc    57.  1.100 / 57.  1.100
 Guessed Channel Layout for Input Stream #0.0 : stereo
 Input #0, wav, from 'In.wav':
   Duration: 00:00:14.23, bitrate: 1411 kb/s
   Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2
 channels, s16, 1411 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> aac (aac_at))
 Press [q] to stop, [?] for help
 Output #0, ipod, to 'Out.m4a':
   Metadata:
     encoder         : Lavf60.3.100
   Stream #0:0: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128
 kb/s
     Metadata:
       encoder         : Lavc60.3.100 aac_at
 size=     140kB time=00:00:14.23 bitrate=  80.5kbits/s speed=44.9x
 video:0kB audio:137kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 2.335356%
 }}}
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/10741>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list