[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