Raspberry Pi 2 – собираем AAC, MP3, H264 и FFMPEG на Raspbian (Jessie)

Сегодня я поделюсь с вами как я собирал FFMPEG с кодеками на Raspbian Pi (Jessie).

FFMPEG – это пожалуй самая популярная библиотека в мире linux для работы с мультимедиа.

Как известно, FFMPEG не включен в репозиторий raspbian, поэтому его не возможно просто установить с помощью

sudo apt-get install ffmpeg

как это зачастую можно сделать на других операционных системах, под другие архитектуры. Вот поэтому мы его будем собирать из исходников.

Перед тем, как мы скомпилируем FFMPEG, нам понадобиться собрать также все кодеки, которые мы планируем использовать. В моем случае это AAC, MP3 и H264.

Итак, приступим.

Обычно для установки чего либо, требуются права root. Для того, чтобы не вводить каждый раз sudo – сделаем это один раз

# выполнение всех последующих команд от имени root
sudo su

ALSA

Для работы с медиа нам понадобятся соответствующие библиотеки для работы со звуком – ALSA

# установка ALSA headers и соответствующие библиотеки
apt-get update
apt-get install libasound2-dev

После этого, ALSA headers можно будет найти в /usr/include/alsa, а соответствующие библиотеки в /usr/lib/arm-linux-gnueabihf.

YASM

Не уверен, что в этом есть необходимость, но я собрал на всякий случай YASM

# собираем YASM - assembler для H264 и ffmpeg
cd /usr/src
# скачиваем yasm (на данный момент уже есть http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz)
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
# распаковываем
tar xzvf yasm-1.2.0.tar.gz
# заходим в папку с yasm
cd yasm-1.2.0
# запускаем конфигуратор
./configure
# компилируем с использованием всех 4-х ядер процессора - параметр -j4 (только в том случае если у вас 4-х ядерный процессор, иначе работать не будет)
make -j4
# устанавливаем
make install

H264

Теперь собираем кодек H264. Очень важно указать параметр –disable-asm в конфигураторе, без него, при попытке использовать H264 кодек, вылазит ошибка – "illegal instruction".

# h.264 video encoder
# если еще не установили - устанавливаем git
apt-get install git
# скачиваем исходники с git репозитория
cd /usr/src
git clone git://git.videolan.org/x264
# заходим в папку с исходниками
cd x264
# запускаем конфигуратор компилятора
./configure --disable-asm --enable-shared
# компилируем с параметром -j4 (работать всем 4 ядрам процессора, намного ускоряет весь процесс)
make -j4
# и устанавливаем
make install

MP3

Следующим собираем MP3 кодек. Библиотеки mp3 кодека будут установлены в /usr/local/lib/libmp3lame

# mp3 audio encoder
cd /usr/src
# скачиваем исходники (на данный момент уже есть http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz)
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.tar.gz
# распаковываем
tar xzvf lame-3.99.tar.gz
# заходим в папку с исходниками
cd lame-3.99
# запускаем конфигуратор
./configure
# компилируем
make -j4
# и устанавливаем
make install

AAC

Собираем AAC кодек, в итоге библиотеки будут установлены в /usr/local/lib/libfaac

# aac encoder
cd /usr/src
# скачиваем исходники
curl -#LO http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
# распаковываем
tar xzvf faac-1.28.tar.gz
# заходим в папку с исходниками
cd faac-1.28

В данной версии faac-1.28 (надеюсь что только в этой версии) есть ошибка в файле common/mp4v2/mpeg4ip.h, чтобы ее пофиксить надо открыть этот файл и добавить несколько строк после строки 126 таким образом, чтобы это выглядело примерно так

#ifdef __cplusplus
extern "C" {
#endif
#ifndef _STRING_H
char *strcasestr(const char *haystack, const char *needle);
#endif
#ifdef __cplusplus
}
#endif

Далее продолжим…

# запускаем конфигуратор
./configure
# компилируем
make -j4
# и устанавливаем
make install

FFMPEG

Наконец мы готовы собрать FFMPEG. В итоге библиотеки ffmpeg будут установлены в /usr/bin/ffmpg. Компиляция ffmpeg занимает не мало времени, и как повествует нам об этом интернет, на ранних версиях Raspberry Pi это могло достигать и до 5 часов, но благо в новом Rasspberry Pi 2 B есть аж целых 4 ядра процессора, поэтому для меня, весь процесс компиляции занял не более 25 минут (и это при том, что я не разгонял тактовую частоту процессора до 1000MHz), что в свою очередь не может не радовать.

# ffmpeg tools
cd /usr/src/
# скачиваем последнюю версию исходников из репозитория ffmpeg
git clone git://source.ffmpeg.org/ffmpeg.git
# заходим в папку с исходниками
cd ffmpeg
# запускаем конфигуратор с соответствующими параметрами
./configure --enable-shared --enable-gpl --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-libfaac --enable-libx264 --enable-version3 --disable-mmx
# компилируем
make -j4
# и устанавливаем
make install

Финальные настройки

Из-за того, что все кодеки были установлены в папку /usr/local/lib, ffmpeg надо дать об этом как-то знать, для этого существует глобальная переменная – LD_LIBRARY_PATH. Можно каждый раз запускать ffmpeg таким образом

LD_LIBRARY_PATH=/usr/local/lib ffmpeg

Но есть и более универсальный вариант – установить значение этой переменной на постоянной основе

echo "/usr/local/lib" > /etc/ld.so.conf.d/libx264.conf
ldconfig

На этом наша сборка подошла к концу. Единственное, на что хотелось бы обратить внимание, всё вышеперечисленное будет работать только с указанными версиями исходников, на других версиях я не тестировал поэтому не могу дать гарантии что это будет работать.

Всем удачных экспериментов.

Использованные источники
http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/
https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=53936
https://wiki.debian.org/ru/MultimediaCodecs
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

Leave a Reply