gemlog/public/uk/ffmpeg-aacp-on-fedora-linux.gmi
2026-04-01 15:03:20 +03:00

133 lines
No EOL
4.6 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Збірка 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 Підпільне: ретрансляція українського мовлення