Сегодня я поделюсь с вами как я собирал 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