Opened 5 months ago
Last modified 4 months ago
#10741 new defect
aac_at quality only settable with q:a, not global_quality:a
Reported by: | Brandon R | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | avcodec |
Version: | 6.0 | Keywords: | AAC Audiotoolbox |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
Expected behavior: According to the docs and 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%
I can confirm this bug.
FWW it seems the latest changes to VideoToolBox and AudioToolbox in FFmpeg did introduced a lot of issues. ALAC isn't working anymore, ProRes Profiles are not working correct, ...
If you do hardware accelerated encoding on macOS, you should use FFmpeg 5.0 which do not have these issues.
Hardware accelerated encoding for macOS needs desperately some love for sure.