Блог веб-разработчика: в помощь программистам

Ставим и настраиваем FFmpeg, FFmpeg-PHP и дополнительные кодеки


Итак, ниже я подробно опишу как поставить на ваш Linux-сервер FFmpeg, FFmpeg-PHP, Mplayer, Mencoder , flv2tool, LAME MP3 Encoder, Libogg, Libvorbis.
А нафиг это всё мне нужно – спросите вы, отвечу – при помощи этого набора вы сможете конвертировать видео у себя на сервере, делать скриншоты из видео роликов и много чего другого, а всё это вам приходиться если вы надумаете у себя поднять сервис типа или ещё более гениальную вещь :)
Начну с описания своего дистрибутива

[[email protected] /]# uname -a
Linux server.clientservers.org.ua 2.6.18-8.1.1.el5 #1 SMP Mon Apr 9 09:46:54 EDT 2007 i686 i686 i386 GNU/Linux



cd /usr/local/src
#для начала выкачаем всё необходимое:
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
wget http://rubyforge.org/frs/download.php/9225/flvtool2_1.0.5_rc6.tgz
wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
wget http://downloads.sourceforge.net/ffmpeg-php/ffmpeg-php-0.5.2.1.tbz2
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.1.2.tar.gz
#извлекаем архивы:
tar zxvf flvtool2_1.0.5_rc6.tgz
tar zxvf lame-3.97.tar.gz
tar zxvf libogg-1.1.3.tar.gz
tar zxvf libvorbis-1.1.2.tar.gz
tar zxvf flvtool2_1.0.5_rc6.tgz
tar jxvf essential-20061022.tar.bz2
tar jxvf ffmpeg-php-0.5.2.1.tbz2
#сделаем папочку под это дело:
mkdir /usr/local/lib/codecs/
#JUST IN CASE:
yum install gcc gmake make libcpp libgcc libstdc++ gcc4 gcc4-c++ gcc4-gfortran ruby svn
#проверяем SVN репозитарии:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/src/mplayer
svn update
cd /usr/local/src
#Копируем кодеки для MPLAYER:
mv /usr/local/src/essential-20061022/* /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/
#делаем temp директорию
mkdir /usr/local/src/tmp
chmod 777 /usr/local/src/tmp
export TMPDIR=/usr/local/src/tmp
#LAME:
cd /usr/local/src/lame-3.97
./configure
make && make install
#LIBOGG:
cd /usr/local/src/libogg-1.1.3
./configure && make && make install
#LIBVORBIS:
cd /usr/local/src/libvorbis-1.1.2
./configure && make && make install
#FLVTOOL2:
cd /usr/local/src/flvtool2_1.0.5_rc6/
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
cd /usr/local/src/
cd /usr/local/src/mplayer
./configure && make && make install
#FFMPEG:
cd /usr/local/src/ffmpeg/
./configure --enable-libmp3lame --disable-mmx --enable-shared
make
make install
ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51
ln -s /usr/local/lib/libavformat.so.52 /usr/lib/libavformat.so.52
ln -s /usr/local/lib/libavdevice.so.52 /usr/lib/libavdevice.so.52
cd /usr/local/src/
#FFMPEG-PHP:
cd /usr/local/src/ffmpeg-php-0.5.2.1/
phpize
./configure
make
make install

#добавляем расширение в наш php.ini
echo 'extension=/usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so' >> /usr/local/Zend/etc/php.ini
#рестартуем веб-серве
service httpd restart

Дальше запускаем Скрипт с phpinfo() и ищем раздел ffmpeg
У меня вот так получилось:
ffmpeg
ffmpeg support (ffmpeg-php) enabled
ffmpeg-php version 0.5.2.1
libavcodec version Lavc51.57.0
libavformat version Lavf52.14.0
ffmpeg-php gd support enabled

Directive Local Value Master Value
ffmpeg.allow_persistent 0 0

Всё работает, всё круто :) Если у кого-то не получилось – не отчаивайтесь а пишите в коментах.

  • ./configure

  • коро

  • напишите ICQ 9367226

  • checking for ffmpeg support… yes, shared
    checking whether to force gd support in ffmpeg-php… no
    checking for ffmpeg headers…
    configure: error: ffmpeg headers not found. Make sure ffmpeg is compiled as shared libraries using the –enable-shared option

  • Спасибо, реально помогло ))))

  • Вот как надо компилить ffmpeg, потому что если его просто так скомпилить он не фига поддерживать не будет http://dotblog.ru/2009/05/20/sborka-ffmpeg-s-maksimalnojj-podderzhkojj-kodekov-i-prochikh-funkcijj/

  • У меня выводит: ffmpeg-php gd support disabled, как включить?

  • Могди бы Вы написать для НЕ ПРОГРАММИСТА как пошагово (для совсем тупых) установить на сервер ffmpeg?

  • Евгений, см. как пользоваться терминалом, и тогда вам строки не будут казаться замысловатым текстом.
    Удачи.

  • у меня выходить ошибка на ffmpeg-php когда делаю make ffmpeg_frame.lo все исправления которые нашел перепробовал не работает (исправления ffmpeg_frame.loT ffmpeg_frame.lo и замена RGBA32 на RGB32)

    помогите, какой то кодек не поставил или как?

    • Предоставляйте более расширенный лог, к сожалению телепатии пока не обучен и ответить по такому маленькому количеству информации не представляется возможным

  • все делал по инструкции

  • извиняюсь ошибка ffmpeg-php.lo

  • _frame.c -fPIC -DPIC -o .libs/ffmpeg_frame.o
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c: In function ‘_php_convert_frame’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:162: warning: implicit declaration of function ‘img_convert’
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c: In function ‘_php_crop_frame’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:215: warning: implicit declaration of function ‘img_copy’
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c: In function ‘_php_resample_frame’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:237: error: ‘ImgReSampleContext’ undeclared (first use in this function)
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:237: error: (Each undeclared identifier is reported only once
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:237: error: for each function it appears in.)
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:237: error: ‘img_resample_ctx’ undeclared (first use in this function)
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:263: warning: implicit declaration of function ‘img_resample_full_init’
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:276: warning: implicit declaration of function ‘img_resample’
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg_frame.c:281: warning: implicit declaration of function ‘img_resample_close’
    make: *** [ffmpeg_frame.lo] Ошибка 1

    вот такая вот ошибка выходит при make

  • у меня файла ffmpeg_frame.lo и ffmpeg_frame.loТ нету даже после make

    появляется файл после make ffmpeg-php.lo
    и я делаю mv ffmpeg-php.lo ffmpeg_frame.lo
    теперь выходит такая ошибка

    .libs/ffmpeg-php.o: In function `get_module’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:56: multiple definition of `get_module’
    .libs/ffmpeg-php.o:/usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:56: first defined here
    .libs/ffmpeg-php.o:(.data.rel+0x0): multiple definition of `ffmpeg_module_entry’
    .libs/ffmpeg-php.o:(.data.rel+0x0): first defined here
    .libs/ffmpeg-php.o: In function `zm_info_ffmpeg’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:113: multiple definition of `zm_info_ffmpeg’
    .libs/ffmpeg-php.o:/usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:113: first defined here
    .libs/ffmpeg-php.o: In function `zm_shutdown_ffmpeg’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:98: multiple definition of `zm_shutdown_ffmpeg’
    .libs/ffmpeg-php.o:/usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:98: first defined here
    .libs/ffmpeg-php.o: In function `zm_startup_ffmpeg’:
    /usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:71: multiple definition of `zm_startup_ffmpeg’
    .libs/ffmpeg-php.o:/usr/local/src/ffmpeg-php-0.5.0/ffmpeg-php.c:71: first defined here
    collect2: ld returned 1 exit status
    make: *** [ffmpeg.la] Ошибка 1

    • Проверьте билды пакетов, соответствуют ли они указанным в статье. есть информация о том что взятый из SVN билд не собирается.

  • помогите пожалуйста

  • когда делаю phpize он такое выдает это нормально?
    Configuring for:
    PHP Api Version: 20041225
    Zend Module Api No: 20060613
    Zend Extension Api No: 220060519

    • Да, это нормально.

  • *** [ffmpeg_frame.lo] Ошибка 1

    Как ее исправить, нашел уже кто-нибудь?..

  • FFmpeg SVN-r12665
    libavutil 3212800
    libavcodec 3356160
    libavformat 3411200
    libavdevice 3407872
    FFmpeg version SVN-r12665, Copyright (c) 2000-2008 Fabrice Bellard, et al.
    configuration: –enable-gpl –enable-postproc –enable-swscale –enable-avfilter-lavf –enable-pthreads –enable-liba52 –enable-avisynth –enable-libfaac –enable-libfaad –enable-libgsm –enable-memalign-hack –enable-libmp3lame –enable-libnut –enable-libtheora –enable-libvorbis –enable-libx264 –enable-libxvid –cpu=i686 –extra-ldflags=-static
    libavutil version: 49.6.0
    libavcodec version: 51.54.0
    libavformat version: 52.13.0
    libavdevice version: 52.0.0
    built on Apr 2 2008 22:35:11, gcc: 4.2.3
    У меня всё правильно настроено или нет

You can follow any responses to this entry through the RSS 2.0 feed.