# Збірка ffmpeg з підтримкою AAC+ засобами FDK AAC В рамках сетапу ретрансляції радіо "Культура" на радіо Pidpilne, був приємно здивований високою якістю звуку AAC+ при низьких бітрейтах (до 16) і вирішив поряд з онлайн-ретрансляціями ще й додати у цьому форматі дампи деяких подкастів з Youtube. Але виявилось, що просто перекодувати потік з yt-dlp засобами ffmpeg з репозиторіїв Fedora не вийде, через ліцензійні обмеження GNU/GPL. Довелось зібрати ffmpeg з сорсу - код потрібних кодеків є відкритим, хоч і не вільним для поширення: > License: nonfree and unredistributable ## Системні залежності ``` bash sudo dnf remove ffmpeg sudo dnf install fdk-aac-devel \ freetype-devel \ lame-devel \ libass-devel \ libvorbis-devel \ libvpx-devel \ openssl-devel \ opus-devel \ SDL2-devel \ x264-devel \ x265-devel ``` * для сабжу треба тільки `fdk-aac-devel` Переконайтесь, що бібліотека fdk-aac розпізнається системою: ``` bash $ pkg-config --modversion fdk-aac 2.0.3 ``` ### fdk-aac > В мене варіант з сорсу не спрацював (можливо) через не правильну лінковку, тому згодом я встановив `fdk-aac-devel`, а даний приклад компіляції - просто лишаю для нотатки як є, може згодиться потім. Опціонально, останню версію fdk-aac можна зібрати з початкового коду: ``` bash git clone https://github.com/mstorsjo/fdk-aac.git cd fdk-aac ./autogen.sh ./configure make -j$(nproc) sudo make install ``` * для видалення: `sudo make uninstall` ## ffmpeg ``` bash git clone https://github.com/FFmpeg/FFmpeg.git cd FFmpeg ./configure --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree \ --enable-openssl make -j$(nproc) sudo make install ``` * для сабжу треба тільки `--enable-libfdk-aac` * для видалення: `sudo make uninstall` ## Тестування ``` bash $ ffmpeg -encoders | grep fdk A....D libfdk_aac Fraunhofer FDK AAC (codec aac) $ ffmpeg -hide_banner -h encoder=libfdk_aac Encoder libfdk_aac [Fraunhofer FDK AAC]: General capabilities: dr1 delay small Threading capabilities: none Supported sample rates: 96000 88200 64000 48000 44100 32000 24000 22050 16000 12000 11025 8000 Supported sample formats: s16 Supported channel layouts: mono stereo 3.0 4.0 5.0 5.1 6.1(back) 7.1(wide) 7.1 5.1.2(back) ... ``` ## Перекодування Нижче - мої приклади з низькими бітрейтами та максимальною компактністю для "голосу". ### Моно (HE-AAC v1) ``` bash ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 16k -ar 22050 output.m4a ``` ### Стерео (HE-AAC v2) ``` bash ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k -ar 22050 output.m4a ``` ### Перевірка На прикладі результату для "Стерео (HE-AAC v2)": ``` bash $ ffprobe output.m4a ... Audio: aac (HE-AACv2) (mp4a / 0x6134706D), 22050 Hz, stereo, fltp, 32 kb/s (default) ... ``` ### yt-dlp Довідка: на "вході" та "виході" використовується контейнер .m4a - він потрібен для збереження мета-інформації про відео: ``` bash yt-dlp -x --audio-format m4a \ --postprocessor-args "ffmpeg: -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k -ar 22050" \ URL ``` * URL - ваше значення ## Посилання => https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_aac ### Дивіться також => pidpilne.gmi Підпільне: ретрансляція українського мовлення