mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-04-01 13:15:29 +00:00
133 lines
No EOL
4.6 KiB
Text
133 lines
No EOL
4.6 KiB
Text
# Збірка 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 Підпільне: ретрансляція українського мовлення |